摘要
前段时间被问起DB2 Ingest的使用,趁这假期汇总学习下。
本文主要DB2 V10 INGEST Utility的介绍和使用说明
INGEST是DB2-Client端的工具,可以从文件管道中通过类似SQL的语句抽取数据到server端的表中,并不影响数据的并发性和可用性。
使用条件
1.DB2 Client: 只要安装有DB2 Client,都可以使用,但DB2 Client连接到DB2 Server端需要参考对应的版本
2.不需要额外的licence
3.适用的DB2版本:DB2 V9.5/DB2 V9.7/DB2 V9.8(pureScale)
4.可以安装的Location
存在的DB2 Server/新的独立INGEST Server/存在的用于ETL的共享server/DPF:协调分区
支持的字符集
文件中输入数据的格式有
a.行和列通过限制符划分开-Delimited ASCII (DEL) Format (如下:)
1, "Mark Kate", "DB2 Specialist", "IBM Canada"
2, "John Doe", "DB2 Specialist", "IBM Canada"
3, "Steven Johns", "Manager", "IBM London"
b.每一列都在行的相同位置-Fixed Format ASCII (ASC) (如下:)
1 Mark Kate DB2 Specialist IBM Canada
2 John Doe DB2 Specialist IBM Canada
3 Steven Johns Manager IBM London
操作
支持insert/delete/update/meger(只使用replace的option)
import和load并不能使用数据的转换,ingest的使用场景更多,如下sample语句的更新操作
INGEST FROM FILE my_file.del FORMAT DELIMITED
( $key_fld1 INTEGER EXTERNAL,
$key_fld2 INTEGER EXTERNAL,
$data_fld1 CHAR(8),
$data_fld2 CHAR(8),
$data_fld3 CHAR(8) )
UPDATE my_table SET (data1_col, data2_col, data3_col) = ($data_fld1, $data_fld2, $data_fld3)
WHERE (key_col1 = $key_fld1) AND (key_col2 = $key_fld2);
其他常用的操作:
1.基本的操作
INGEST FROM FILE my_file.txt FORMAT DELIMITED INSERT INTO my_table;
2.使用POSITIONAL格式化输入数据(固定位置)
INGEST FROM FILE my_file.txt FORMAT POSITIONAL(
$field1 POSITION(1:8) INTEGER EXTERNAL,
$field2 POSITION(10:19) DATE ’yyyy-mm-dd’,
$field3 POSITION(25:34) CHAR(10))
INSERT INTO my_tableVALUES($field1, $field2, $field3);
3.DEL格式定制
INGEST FROM PIPE mypipe FORMAT DELIMITED BY ‘/' (
$prod_ID CHAR(8),
$description CHAR(32),
$price DECIMAL(5,2) EXTERNAL,
$sales_tax DECIMAL(4,2) EXTERNAL,
$shipping DECIMAL(3,2) EXTERNAL )
INSERT INTO my_table(prod_ID, description, total_price) VALUES($prod_id, $description, $price + $sales_tax + $shipping);
执行过程中拒绝的数据可以输出到文件或者表中
INGEST FROM FILE my_file.txt FORMAT DELIMITED ( $field1 INTEGER EXTERNAL, $field2 DATE 'mm/dd/yyyy', $field3 CHAR(32) )
EXCEPTION TABLE excp_table MESSAGES messages.txt
INSERT INTO my_table VALUES($field1, $field2, $field3);
支持的类型表
跟Load/Import的支持类型参考如下表:
使用场景
通过ingest特性可以使用各种场景
目标表正在load中,同时还需要另外一个application进行更新这目标表
输入文件中有些filed是不需要的
不同与insert的sql语句
特殊的sql语句表达式(如包括多个field的计算或者操作)
etc…