Sybase中的load table的用法
用sybase iq作為數據倉庫的存儲,確實有其獨特的特點和優勢,但是在數據ETL的時候,如果用insert、update方式,速度太慢,大概是2秒鍾左右一條數據。好在iq提供了一條load語句來解決這個問題。
load語句的格式: LOAD [ INTO ] TABLE [ owner.]table-name [ ( column-name, . . . ) ] FROM filename [ load-option . . . ] [ statistics-limitation-options ] load-option : CHECK CONSTRAINTS { ON | OFF } | COMPUTES { ON | OFF } | DEFAULTS { ON | OFF } | DELIMITED BY string | ESCAPE CHARACTER character | ESCAPES { ON | OFF } | FORMAT { ASCII | BCP } | HEXADECIMAL {ON | OFF} | ORDER {ON | OFF} | PCTFREE percent-free-space | QUOTES { ON | OFF } | SKIP integer | STRIP { ON | OFF } | WITH CHECKPOINT { ON | OFF } • 如果字段名未出現在字段列表中,則填充NULL、0、空、或者DEFAULT; 存在於輸入文件中的字段可以用“filler()”.忽略 • DEFAULTS { ON | OFF } 為ON則字段取缺省值。否則取NULL • QUOTES { ON | OFF } 缺省為ON ,字段定界符為‘’或者 “” • DELIMITED BY 選項: 可以單個字符,最多255個字符,例如:制表符 號作分割符號: ...DELIMITED BY ’nx09’ • SKIP n 忽略前n條記錄; • STRIP ON|OFF 尾空格插入前是否截取; • WITH CHECKPOINT ON|OFF 缺省為 OFF, 如果設置為ON則,命令完成 后,執行CHECKPOINT 操作。
下面是從一個文本文件load到表F_INN_IA_DAILY_SUM中的語句:
set temporary option date_order=YMD; Load Table F_INN_IA_DAILY_SUM ( ORG_SID '+|+', DEAL_SID '+|+', ALL_TIME_SID '+|+', R_COUNT_DIM_SID '+|+', T_TAX_STOR_COST '+|+', T_STOR_COST '+|+', T_STOR_SUM '+|+', CREATED_DT 'X0A' ) From '/load_data/F_Inn_IA_Daily_Sum.txt' ESCAPES OFF QUOTES OFF NOTIFY 100000 WITH CHECKPOINT ON; COMMIT
其中+|+是字段的分隔符,X0A是記錄的分隔符,即回車(文本文件中)。
例一:
1,文本文件的內容格式為:
abc|defgh|aaaa|bbbbbb|ccccc|ddddd|eeee|fffF abc|defgh|aaaa|bbbbbb|ccccc|ddddd|eeee|fffF abc|defgh|aaaa|bbbbbb|ccccc|ddddd|eeee|fffF
2,load table語句:
Load table My_Table ( ORG_SID '|', DEAL_SID '|', ALL_TIME_SID '|', R_COUNT_DIM_SID '|, T_TAX_STOR_COST '|', T_STOR_COST '|', T_STOR_SUM '|', CREATED_DT '\X0A' --數據文件中每行的換行符(16進制) ) From '/load_data/loadTest.txt' ---要加載文件的路徑 ESCAPES OFF QUOTES OFF NOTIFY 100000 WITH CHECKPOINT ON; COMMIT;
文件以‘|’作為分隔符,每行的換行符以 '\X0A'換行; 通常的換行有'\x0d\x0a'(回車、換行) 或'\x0A' (換行);
load table 語法寫入存儲過程,然后直接調用存儲過程文件即可加載入庫;
例二:
1,文本格式為:
20171222|&@001731edae78|&@absent|&@absent|&@001731edae78|&@| 20171222|&@001bb958bc07|&@absent|&@absent|&@001bb958bc07|&@| 20171222|&@001bfc067636|&@absent|&@absent|&@001bfc067636|&@|
2,load table 語句:
set temporary option CONVERSION_ERROR = 'OFF'; load table t_station_match_result(load_dt '|&@' null('\\xd0'),op_station '|&@' null('\\xd0'),ip '|&@' null('\\xd0'),mac '|&@' null('\\xd0'), mobile '|&@|' null('')) FROM '" + file_path+"' ESCAPES OFF QUOTES OFF NOTIFY 100000 WITH CHECKPOINT ON; COMMIT;
file_path:txt文件路徑(絕對路徑)