天天看點

Dmfldr的簡單使用

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

  1. 導出
    1. 導出全表

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 '|'

結果為亂碼

Dmfldr的簡單使用

檢視檔案格式

[[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/\'

檢視檔案内容不再為亂碼

Dmfldr的簡單使用

檔案格式為utf8

[[email protected] tmp]$ file product.txt

product.txt: UTF-8 Unicode text

    1. 部分導出

導出部分列

test.ctl

LOAD DATA

INFILE '/tmp/ldr/product.txt'

INTO TABLE production.product

FIELDS '|'

(productid,

name,

author,

type)

Dmfldr的簡單使用

導出部分行  

test.ctl

LOAD DATA

INFILE '/tmp/ldr/product.txt'

INTO TABLE production.product

WHEN type = ‘8’

FIELDS '|'

(productid,

name,

author,

type)

Dmfldr的簡單使用

根據關鍵字when并不能做到導出部分行

  1. 導入
    1. 全表導入

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 '|'

    1. 導入部分資料

跳過前幾行

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

)

  1. 性能提升

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