DB2 IMPORT、LOAD、EXPORT 三大數據移動工具的核心契約是「文件格式」。ASC (Non-delimited ASCII) 與 DEL (Delimited ASCII) 是最通用的兩種文本格式,正確理解其列邊界定義、分隔符轉義、編碼約定,直接決定數據能否零損失、高性能地跨系統流轉。本文結合實際樣本數據,逐字節解析兩種格式規範。
LF (0x0A) 或 CRLF (0x0D 0x0A)。NULL INDICATOR 文件單獨指定。假設表結構:DEPTNO SMALLINT, DEPTNAME VARCHAR(20), MGRNO INTEGER, ADMRDEPT CHAR(4), LOCATION VARCHAR(15)
對應位置定義 (起始:長度):1:5, 7:22, 30:11, 42:4, 47:17 (含列間 1 空格間隔)
10 Head Office 160 Corporate New York
15 New England 50 Eastern Boston
20 Mid Atlantic 10 Eastern Washington
38 South Atlantic 30 Eastern Atlanta
42 Great Lakes 100 Midwest Chicago
51 Plains 140 Midwest Dallas
66 Pacific 270 Western San Francisco
84 Mountain 290 Western Denver
db2 "IMPORT FROM dept.asc OF ASC
METHOD L (1 5, 7 22, 30 11, 42 4, 47 17)
NULL INDICATORS (0, 0, 0, 0, 0)
INSERT INTO DEPT"
METHOD L:指定位置列表 (Start Length 成對)。NULL INDICATORS:每列 0/1,1 表示該列在數據文件中額外佔用 1 字節 NULL 指示符 (Y/N)。| 優點 | 缺點 |
|---|---|
| 解析極快 (無分隔符掃描),適合超大文件並行切片導入 | Schema 變更 (增刪列、調整長度) 需重新生成文件與 METHOD 定義 |
| 無轉義/引號干擾,二進制安全 | 人類可讀性差,調試困難 |
| 主機/大型機下載文件常用格式 | 跨平台換行符 (LF/CRLF) 易導致行解析錯誤 |
, (逗號),可通過 MODIFIED BY COLDEL<char> 自定義 (如 |, \t)。" (雙引號),可通過 CHARDEL<char> 自定義。"He said ""Hello""");或使用 DELDEL 參數指定轉義字符。,,) 或顯式 NULL 關鍵字 (需 MODIFIED BY NULLINDCHAR)。CODEPAGE=1208 (UTF-8)。10,"Head Office",160,"Corporate","New York"
15,"New England",50,"Eastern","Boston"
20,"Mid Atlantic",10,"Eastern","Washington"
38,"South Atlantic",30,"Eastern","Atlanta"
42,"Great Lakes",100,"Midwest","Chicago"
51,"Plains",140,"Midwest","Dallas"
66,"Pacific",270,"Western","San Francisco"
84,"Mountain",290,"Western","Denver"
# 導出
db2 "EXPORT TO dept.del OF DEL
MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
SELECT * FROM DEPT"
# 導入
db2 "IMPORT FROM dept.del OF DEL
MODIFIED BY CHARDEL\" COLDEL, CODEPAGE=1208
INSERT INTO DEPT"
| 優點 | 缺點 |
|---|---|
| 人類可讀,Excel/文本編輯器直接打開 | 解析需掃描分隔符、處理引號轉義,CPU 開銷大 |
| Schema 演進友好 (列順序可通過 HEADER 推導) | 大文本列含換行符/分隔符時易損壞行結構 |
| 異構系統 (Oracle/MySQL/PostgreSQL) 通用交換格式 | 數值格式 (科學計數法、小數點) 受區域設置影響 |
| 參數 | 適用格式 | 說明 | 示例 |
|---|---|---|---|
| COLDEL<c> | DEL | 列分隔符 | COLDEL| |
| CHARDEL<c> | DEL | 字符串限定符 | CHARDEL' |
| DELDEL<c> | DEL | 限定符內部轉義字符 | DELDEL\ |
| CODEPAGE<n> | ASC/DEL | 文件代碼頁 (1208=UTF-8, 1386=GBK) | CODEPAGE=1208 |
| USEDEFAULTS | ASC/DEL | 目標表列有 DEFAULT 值時,文件缺列自動填充 | USEDEFAULTS |
| NOROWWARNINGS | ASC/DEL | 抑制行級警告輸出,提升大批量導入性能 | NOROWWARNINGS |
| ANYORDER | LOAD | 允許並行插入不保證順序,極大提升 LOAD 速度 | ANYORDER |
| FASTPARSE | LOAD | 跳過數據驗證 (數值範圍、日期合法性),極速模式 | FASTPARSE |
dos2unix 或編程語言 \n 輸出。db2load 多線程或 IMPORT 多進程並發,線性提升吞吐。awk -F, 'NF!=5' dept.del (DEL) 或 awk '{print length}' dept.asc (ASC) 快速檢查列數/行長一致性。掌握 ASC/DEL 格式本質與參數微調,即可在主機下載、異構遷移、數據湖入湖、雲上數據攝入等場景中,構建穩健、高效、可審計的數據移動管道。