Ingest 應用工具是 DB2 Galileo 版本中新的概念 , 它是一個客戶端工具。用戶可以用 INGEST 來進行數據的導入 , 它有比 LOAD,IMPORT 更好的性能,本文介紹 Ingest Utility 支持的各種文件格式,并詳細介紹 Ingest Utility SQL statement( insert, update, del
ingest 是 db2 galileo( db2 10 的開發代號) 的新特性 , 是為了有大量持續的數據流來實時和并發的快速進行數據導入而引入的新概念。本文將詳細介紹了 ingest 支持的各種數據文件格式,以及所支持的 insert, replace, update, delete, merge 的數據導入操作。
Ingest Utility 支持的各種文件格式介紹,用法和實例分析
Ingest 工具支持兩種數據格式:DELIMITED 和 POSITIONAL。語法如清單 1 所示。 選擇用 DELIMITED 文件格式的時候后面跟著劃分符,如果不指定,默認的是“,”,這點和 import 和 load 類似。
如果選用的是 POSITIONAL 文件格式的數據時后面可跟數據記錄的長度,這個長度是指每條記錄每次截取的總長度,如果 RECORDLEN 指定的長度小于各列的長度之和時就會報錯并退出,如果大于各列的長度之和,ingest 工具將會忽略最后一列結尾到指定的長度之間的字節。RECORDLEN 可指定的范圍是 1-32767。如果不指定 RECORDLEN 的長度,則默認是回車符或者回車換行符作為每一條記錄的結束符。并且在指定 field name 之后還可以通過 POSITION 關鍵字指定每個 field 的起始位置。
清單 1:INGEST 支持的數據文件格式定義
|--+-DELIMITED--+----------+-----------+------------------------> | '-BY--char-' | '-POSITIONAL--+-------------------+-' '-RECORDLEN--length-' field-definition |--$field-name--+-----------------------------------+-----------> '-POSITION--(--start--+--------+--)-' '-:--end-'
清單 2 是一個用 POSITIONAL 格式但沒有指定 RECORDLEN 參數的例子。 在 a.asc 文件中,每一行的第 12 位中不為空,第 17 到 19 位也有字符存在。但因為有 ingest 語句中指定了 position 的起始位置,所以 ingest 工具只取 position 指定的起始位置,并不關心別的位置有無字符。并且此處沒有指定 RECORDLEN 的長度,所以默認為回車換行符為一行的結束位置。
清單 2: POSITIONAL INGEST 示例
數據文件 a.asc 的內容 2 2001 552010aaa 25 2002 452011bbb 143 2003 2c2012ccc 1555 2004 3b2013ddd 1309 2005 7a2014eee 執行 INGEST 語句的結果 INGEST FROM file format21_01.asc format POSITIONAL ( $field1 POSITION(1:4) int external, $field2 POSITION(6:9) DATE 'YYYY', $field3 POSITION(11:11) TIME 'H', $field4 POSITION(13:16) timestamp 'YYYY' ) restart off insert into t1(perkey,perioddate, periodtime, periodts) values($field1,$field2, $field3,$field4) SQL2979I The ingest utility is starting at "08/08/2012 01:34:10.517287". SQL2914I The ingest utility has started the following ingest job: "DB21001:20120808.013410.517287:00002:00004". Number of rows read = 5 Number of rows inserted = 5 Number of rows rejected = 0 SQL2980I The ingest utility completed successfully at timestamp "08/08/2012 01:34:16.322027" db2 => select * from t1 PERKEY PERIODDATE PERIODTIME PERIODTS ----------- ---------- ---------- -------------------------- 25 01/01/2002 04:00:00 2011-01-01-00.00.00.000000 1555 01/01/2004 03:00:00 2013-01-01-00.00.00.000000 143 01/01/2003 02:00:00 2012-01-01-00.00.00.000000 2 01/01/2001 05:00:00 2010-01-01-00.00.00.000000 1309 01/01/2005 07:00:00 2014-01-01-00.00.00.000000 5 record(s) selected.