Dmfldr的簡單使用
使用示例表
SQL> desc production.product
LINEID NAME TYPE$ NULLABLE
---------- --------------------- ------------ --------
1 PRODUCTID INTEGER N
2 NAME VARCHAR(100) N
3 AUTHOR VARCHAR(25) N
4 PUBLISHER VARCHAR(50) N
5 PUBLISHTIME DATE N
6 PRODUCT_SUBCATEGORYID INTEGER N
7 PRODUCTNO VARCHAR(25) N
8 SATETYSTOCKLEVEL SMALLINT N
9 ORIGINALPRICE DEC(19, 4) N
10 NOWPRICE DEC(19, 4) N
11 DISCOUNT DEC(2, 1) N
12 DESCRIPTION TEXT Y
13 PHOTO BLOB Y
14 TYPE VARCHAR(5) Y
15 PAPERTOTAL INTEGER Y
16 WORDTOTAL INTEGER Y
17 SELLSTARTTIME DATE N
18 SELLENDTIME DATE Y
- 導出
- 導出全表
dmfldr userid=SYSDBA/[email protected]:5236 control=\'/tmp/ldr/test.ctl\' mode=\'out\' LOB_DIRECTORY=\'/tmp/ldr/\'
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt'
INTO TABLE production.product
FIELDS '|'
結果為亂碼
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiNx8FesU2cfdGLwczX0xiRGZkRGZ0Xy9GbvNGLwIzXlpXazxSdGdUYndmMZBjRyEWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4EjYkFjNlJTYlFzN0QjMidzMlRjMmFTNyM2MmN2MwkzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
檢視檔案格式
[[email protected] tmp]$ file product.txt
product.txt: ISO-8859 text
這是因為終端的LANG=en_US.utf8
設定導出字元集為UTF-8
dmfldr userid=SYSDBA/[email protected]:5236 control=\'/tmp/ldr/test.ctl\' mode=\'out\' CHARACTER_CODE=\'UTF-8\' LOB_DIRECTORY=\'/tmp/ldr/\'
檢視檔案内容不再為亂碼
檔案格式為utf8
[[email protected] tmp]$ file product.txt
product.txt: UTF-8 Unicode text
-
- 部分導出
導出部分列
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt'
INTO TABLE production.product
FIELDS '|'
(productid,
name,
author,
type)
導出部分行
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt'
INTO TABLE production.product
WHEN type = ‘8’
FIELDS '|'
(productid,
name,
author,
type)
根據關鍵字when并不能做到導出部分行
- 導入
- 全表導入
dmfldr userid=SYSDBA/[email protected]:5236 control=\'/tmp/ldr/test.ctl\' CHARACTER_CODE=\'UTF-8\' LOB_DIRECTORY=\'/tmp/ldr/\' LOB_FILE_NAME=\'dmfldr.lob\' mode=\'in\' client_lob=true
(這裡要注意client_lob,它代表大字段檔案存放位置,true表示放在本地,false表示放在伺服器上,預設是false)
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt' replace
INTO TABLE production.pronew
FIELDS '|'
-
- 導入部分資料
跳過前幾行
dmfldr userid=SYSDBA/[email protected]:5236 control=\'/tmp/ldr/test.ctl\' CHARACTER_CODE=\'UTF-8\' LOB_DIRECTORY=\'/tmp/ldr/\' LOB_FILE_NAME=\'dmfldr.lob\' mode=\'in\' client_lob=true skip=5
導入前幾列,如果不包含大字段,可以去掉lob相關的參數
dmfldr userid=SYSDBA/[email protected]:5236 control=\'/tmp/ldr/test.ctl\' CHARACTER_CODE=\'UTF-8\' mode=\'in\'
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt' replace
INTO TABLE production.pronew
FIELDS '|'
(
PRODUCTID,
NAME,
AUTHOR
)
忽略某列原值
test.ctl
LOAD DATA
INFILE '/tmp/ldr/product.txt' replace
INTO TABLE production.pronew
FIELDS '|'
(
PRODUCTID,
NAME FILLER,
AUTHOR
)
- 性能提升
n BUFFER_NODE_SIZE
BUFFER_NODE_SIZE 設定讀取檔案緩沖區頁大小,值越大,緩沖區的頁越大,每次讀取的資料就越多,每次發送到伺服器的資料也就越多,效率越高。但其大小受 dmfldr 用戶端記憶體大小限制。
n READ_ROWS
在某些情況下,BUFFER_NODE_SIZE 讀入的資料行數很大,而後續操作處理不了這麼大的行數,此時可以用 READ_ROWS來限制處理的行數。dmfldr 取 READ_ROWS 和BUFFER_NODE_SIZE 中較小的值作為一次處理的行數。
n SEND_NODE_NUMBER
指定 dmfldr 在資料載入時發送節點的個數,預設由系統計算一個初始值。若在資料載入時發現發送節點不夠用,系統會動态增加配置設定。在系統記憶體足夠的情況下,可以适當設大 SEND_NODE_NUMBER 值,提升 dmfldr 載入性能。
n TASK_THREAD_NUMBER
指定 dmfldr 在資料載入時處理使用者資料的線程數目。預設情況下,dmfldr 将該參數值設為系統 CPU 的個數,但當 CPU 個數大于 8 時,預設值都被置為 8。在 dmfldr 用戶端所在機器 CPU 大于 8 環境中,提高 TASK_THREAD_NUMBER 值可以提升 dmfldr 裝載性能。
n BLDR_NUM
水準分區表裝載時,指定伺服器 BLDR 的最大個數,預設為 64。伺服器的 BLDR 儲存水準分區子表相關資訊,BLDR_NUM 的設定也就指定了伺服器能同時載入的水準分區子表的個數。若 BLDR_NUM 設定太大,當水準分區子表數過多時,可能會導緻伺服器記憶體不足。當載入時實際需要的 BLDR 個數超出 BLDR_NUM 設定時,會淘汰指定子表的 BLDR,并替換為新的子表 BLDR。
n BDTA_SIZE
BDTA(Batch Data)的大小,預設為 5000。
BDTA 代表 DM 資料庫批量資料處理機制中一個批量,在記憶體、CPU 允許的條件下,增大BDTA_SIZE能加快裝載速度;在網絡是裝載性能瓶頸時,增大 BDTA_SIZE 影響不大。
n INDEX_OPTION
索引的設定選項,預設為 1。INDEX_OPTION 的可選項有 1、2 和 3。
1 代表伺服器裝載資料時先不重新整理二級索引,而是将新資料按照索引預先排序,在裝載完成後,再将排好序的資料插入索引。如果在資料載入前,目标表中已有較多資料,建議INDEX_OPTION 置為 1。
2 代表伺服器在快速裝載過程中不重新整理二級索引資料,隻在裝載完成時重建所有二級索引。如果在資料載入前,目标表中沒有資料或資料量較小,建議 INDEX_OPTION 置為 2。
3 代表伺服器使用追加模式來進行二級索引的插入, 在資料裝載的過程中, 同時進行二級索引的插入, 當原有資料量遠大于插入資料量時, 建議 INDEX_OPTION 置為 3。
例:
dmfldr userid=SYSDBA/SYSDBA control=\'/tmp/ldr/test.ctl\'
test.ctl
options
(
CHARACTER_CODE='UTF-8'
LOB_DIRECTORY='/tmp/ldr/'
LOB_FILE_NAME='dmfldr.lob'
mode='in'
client_lob=true
read_rows=5
)
LOAD DATA
INFILE '/tmp/ldr/product.txt' replace
INTO TABLE production.pronew
FIELDS '|'
參考:達夢技術手冊-DM8_dmfldr使用手冊
歡迎通路達夢社群:http://eco.dameng.com