首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 數據移動實戰 (二):非定界 ASCII (ASC) 與定界 ASCII (DEL) 文件格式深度解析與範例

     編輯:DB2 教學

背景:為何要掌握文件格式細節?

DB2 IMPORT、LOAD、EXPORT 三大數據移動工具的核心契約是「文件格式」。ASC (Non-delimited ASCII) 與 DEL (Delimited ASCII) 是最通用的兩種文本格式,正確理解其列邊界定義、分隔符轉義、編碼約定,直接決定數據能否零損失、高性能地跨系統流轉。本文結合實際樣本數據,逐字節解析兩種格式規範。

一、ASC — 非定界 ASCII (固定寬度/位置定界)

格式規範

  • 行分隔符:LF (0x0A) 或 CRLF (0x0D 0x0A)。
  • 列邊界:不以分隔符區分,而是通過 起始位置 (Start Position) + 長度 (Length) 定義。位置從 1 開始計算。
  • 數據類型映射:
    • 數值:右對齊,前導空格填充;負號佔用 1 字節。
    • 字符:左對齊,尾部空格填充 (若定長 CHAR);VARCHAR 需在數據前額外 2 字節長度前綴 (二進制)。
    • 日期/時間/時間戳:按 ISO 格式固定寬度輸出 (DATE 10、TIME 8、TIMESTAMP 26)。
  • NULL 表示:全空格 (定長) 或長度前綴為 0 (VARCHAR);也可配合 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) 易導致行解析錯誤

二、DEL — 定界 ASCII (CSV 風格)

格式規範

  • 行分隔符:同 ASC。
  • 列分隔符:默認 , (逗號),可通過 MODIFIED BY COLDEL<char> 自定義 (如 |, \t)。
  • 字符串限定符:默認 " (雙引號),可通過 CHARDEL<char> 自定義。
  • 轉義規則:限定符內部出現限定符本身,雙寫轉義 (如 "He said ""Hello""");或使用 DELDEL 參數指定轉義字符。
  • NULL 表示:兩個分隔符相鄰無內容 (如 ,,) 或顯式 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) 通用交換格式數值格式 (科學計數法、小數點) 受區域設置影響

三、進階參數速查表 (MODIFIED BY 關鍵字)

參數適用格式說明示例
COLDEL<c>DEL列分隔符COLDEL|
CHARDEL<c>DEL字符串限定符CHARDEL'
DELDEL<c>DEL限定符內部轉義字符DELDEL\
CODEPAGE<n>ASC/DEL文件代碼頁 (1208=UTF-8, 1386=GBK)CODEPAGE=1208
USEDEFAULTSASC/DEL目標表列有 DEFAULT 值時,文件缺列自動填充USEDEFAULTS
NOROWWARNINGSASC/DEL抑制行級警告輸出,提升大批量導入性能NOROWWARNINGS
ANYORDERLOAD允許並行插入不保證順序,極大提升 LOAD 速度ANYORDER
FASTPARSELOAD跳過數據驗證 (數值範圍、日期合法性),極速模式FASTPARSE

四、編碼與換行符最佳實踐

  1. 統一 UTF-8 (CODEPAGE=1208):避免中文亂碼、補字符截斷。
  2. 生成端統一 LF (Unix 換行):AIX/Linux 原生;Windows 用 dos2unix 或編程語言 \n 輸出。
  3. 大文件分片並行導入:ASC 格式按位置切片無需掃描,配合 db2load 多線程或 IMPORT 多進程並發,線性提升吞吐。
  4. 驗證腳本:導入前用 awk -F, 'NF!=5' dept.del (DEL) 或 awk '{print length}' dept.asc (ASC) 快速檢查列數/行長一致性。

掌握 ASC/DEL 格式本質與參數微調,即可在主機下載、異構遷移、數據湖入湖、雲上數據攝入等場景中,構建穩健、高效、可審計的數據移動管道。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved