Lin Hong's TECH Blog! 刀不磨要生锈,人不学习要落后 - Thinking ahead

[原创]DB2 INGEST工具

2016-02-13
DB2

摘要

前段时间被问起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的支持类型参考如下表:

DB2-Ingest-TableTypes

使用场景

通过ingest特性可以使用各种场景

目标表正在load中,同时还需要另外一个application进行更新这目标表

输入文件中有些filed是不需要的

不同与insert的sql语句

特殊的sql语句表达式(如包括多个field的计算或者操作)

etc…



Comments