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/SYSDBA@localhost: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 '|'

结果为乱码

 

查看文件格式

[dmdba@VM-0-3-centos tmp]$ file product.txt

product.txt: ISO-8859 text

这是因为终端的LANG=en_US.utf8

设置导出字符集为UTF-8

dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/tmp/ldr/test.ctl\'  mode=\'out\' CHARACTER_CODE=\'UTF-8\' LOB_DIRECTORY=\'/tmp/ldr/\'

查看文件内容不再为乱码

 

文件格式为utf8

[dmdba@VM-0-3-centos 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)

导出部分行  

test.ctl

LOAD DATA

INFILE '/tmp/ldr/product.txt'

INTO TABLE production.product

WHEN type = ‘8’

FIELDS '|'

(productid,

name,

author,

type)

根据关键字when不能做到导出部分行

  1. 导入
    1. 全表导入

dmfldr userid=SYSDBA/SYSDBA@localhost: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/SYSDBA@localhost: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/SYSDBA@localhost: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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值