基于Windows系统DM7数据库dmfldr快速装载工具的数据导入

一、工具介绍

dmfldr(DM Fast Loader),是 DM 提供的数据导入导出工具。用户通过 dmfldr 工具,能够把按照一定格式排序的文本数据,以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。

关于该工具使用,达梦官网有详细介绍,不过只有linux版本示例,未补充Windows版本使用方法,在此提供基于Windows操作系统的dmfldr工具使用方法介绍。

二、工具架构

基于Windows系统DM7数据库dmfldr快速装载工具的数据导入_第1张图片

 如上图所示,dmfldr实际上除了客户端工具,还包含一个在数据库服务器中的dmfldr功能模块,它们共同完成dmfldr的各项功能;

dmfldr 客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的 dmfldr 模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。

三、工具使用

dmfldr工具,保存在数据库安装目录的bin目录下。dmfldr 的使用必须指定必要的参数,否则工具会报错“无效的参数个数”并退出,使用前,可以执行命令查看工具使用说明。

基于Windows系统DM7数据库dmfldr快速装载工具的数据导入_第2张图片

在当前示例中,我的数据库安装在F盘的DM目录下,需要查看命令帮助,cd到工具所在目录,执行命令:

dmfldr.ext help

F:\DM7\bin>dmfldr.exe help
格式: dmfldr.exe   KEYWORD=value

例程: dmfldr.exe   SYSDBA/SYSDBA CONTROL='c:\fldr.ctl'

USERID 必须是命令行中的第一个参数
CONTROL 必须是命令行中的第二个参数

字符串类型参数必须以引号封闭

关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令 格式:USER/PWD@SERVER:PORT#SSL_PATH@SSL_PWD
CONTROL             控制文件,字符串类型
LOG                 日志文件,字符串类型 (fldr.log)
BADFILE             错误数据记录文件,字符串类型 (fldr.bad)
SKIP                初始忽略逻辑行数 (0)
LOAD                需要装载的行数 (ALL)
ROWS                提交频次 (50000), DIRECT为FALSE有效
DIRECT              是否使用快速方式装载 (TRUE)
SET_IDENTITY        是否插入自增列 (FALSE)
SORTED              数据是否已按照聚集索引排序 (FALSE)
INDEX_OPTION        索引选项 (1)
                    1 不刷新二级索引,数据按照索引先排序,装载完后再
                    将排序的数据插入索引
                    2 不刷新二级索引,数据装载完成后重建所有二级索引
ERRORS              允许的最大数据错误数 (100)
CHARACTER_CODE      字符编码,字符串类型 (GBK, UTF-8, SINGLE_BYTE, EUC-KR)
MODE                装载方式,字符串类型 IN表示载入,OUT表示载出,
                    OUTORA表示载出ORACLE (IN)
CLIENT_LOB          大字段目录是否在本地 (FALSE)
LOB_DIRECTORY       大字段数据文件存放目录
LOB_FILE_NAME       大字段数据文件名称,仅导出有效 (dmfldr.lob)
BUFFER_NODE_SIZE    读入文件缓冲区的大小 (10),有效值范围1~2048
READ_ROWS           工作线程一次最大处理的行数 (100000),最大支持2^26-10000
NULL_MODE           载入时NULL字符串是否处理为NULL
                    载出时空值是否处理为NULL字符串 (FALSE)
NULL_STR            载入时视为NULL值处理的字符串
SEND_NODE_NUMBER    运行时发送节点的个数 (20),有效值范围16~65535
TASK_THREAD_NUMBER  处理用户数据的线程数目,默认与处理器核数量相同,有效值范围1~128
BLDR_NUM            服务器BLDR数目 (64),有效值范围1~1024
BDTA_SIZE           bdta的大小 (5000),有效值范围100~10000
COMPRESS_FLAG       是否压缩bdta (FALSE)
MPP_CLIENT          MPP环境,是否本地分发 (TRUE)
SINGLE_FILE         MPP环境,是否只生成单个数据文件(FALSE)
LAN_MODE            MPP环境,是否以内网模式装载数据(FALSE)
UNREP_CHAR_MODE     非法字符处理选项(0),为0时表示跳过该数据行,为1时表示使用(*)替换错误字节
SILENT              是否静默方式装载数据(FALSE)
BLOB_TYPE           BLOB类型字段数据值的实际类型,字符串类型 (HEX_CHAR)
                    HEX表示值为十六进制,HEX_CHAR表示值为十六进制字符类型
                    仅在direct=FALSE有效
OCI_DIRECTORY       OCI动态库所在的目录
DATA                指定数据文件路径
ENABLE_CLASS_TYPE   允许用户导入CLASS类型数据 (FALSE)
FLUSH_FLAG          提交时是否立即刷盘 (FALSE)
IGNORE_BATCH_ERRORS 是否忽略错误数据继续导入 (FALSE)
SINGLE_HLDR_HP      是否使用单个HLDR装载HUGE水平分区表 (TRUE)
EP                  指定需要发送数据的站点序号列表,仅向MPP环境导入数据时有效
HELP                打印帮助信息

F:\DM7\bin>

由上图可以得知,dmfldr工具的使用格式为:dmfldr.exe   KEYWORD=value

其中,KEYWORD=value 即为当个option选项,和linux上执行命令,传入多个参数使用方法没有本质区别。

四、数据导入测试

按照工具架构可以得知,如果需要数据导入,我们需要有目的表,其次是导入源数据文件(数据格式需要和目的库表一致),再次还需要一个ctl控制文件(类似于linux的各种服务的配置文件)

首先,我们创建一个测试用的目的库表,尽量格式简单:

CREATE TABLE level(C1 INT,C2 INT,C3 DATE);

总共1个语句正依次执行...

[执行语句1]:
CREATE TABLE level(C1 INT,C2 INT,C3 DATE);
执行成功, 执行耗时26毫秒. 执行号:1,927
影响了0条记录

1条语句执行成功

该表总共三个字段,前两个字段数据类型为int数值类型,最后一个为date日期类型。

然后手动创建源数据文件data.txt,内容如下:

1 1|2015-11-06
test
2 2|2015-11-05
qqqqqqqqqqqqqqq
3 3|2015-11_04

总计5行数据,其中第2行test,和第4行qqqqqqqqqqqqqqq明显不符合目的表的表结构,剩余3行均符合要求。

然后我们创建相应的控制文件test.ctl

LOAD DATA

INFILE 'F:\data.txt'

INTO TABLE level

FIELDS '|'

(

C1 TERMINATED BY ' ',

C2,

C3 DATE FORMAT 'yyyy-mm-dd'

)

 执行导入数据命令:

F:\DM7\bin>start dmfldr.exe userid=SYSDBA/SYSDBA@localhost:5236 control='F:\test.ctl'

 数据库里确认结果:

select * from level;

基于Windows系统DM7数据库dmfldr快速装载工具的数据导入_第3张图片

由上面可以发现,除了故意设置的两行错误数据,正确格式的3行数据均导入成功。

五、工具导入相关问题

以上面导入数据为例,如果有的时候,我们的源数据文件,存在暂未被发现错误数据,导入数据后发现和预期数据量对不上,该如何处理呢?

这就正好涉及到上面导入数据的示例,第2行第4行数据未被导入,是否有记录可以查询?答案是肯定的:

dmfldr在使用的时候,会自动创建工具使用的日志fldr.log和fldr.bad(也可以传参指定文件路径)

fldr.log:记录整个操作过程,包括读取数据导入数据等等

fldr.bad:记录导入异常的数据

这两个文件,默认均存放于数据库安装目录的bin目录下面

基于Windows系统DM7数据库dmfldr快速装载工具的数据导入_第4张图片

 由上面操作,我们可以打开日志看下里面具体记录的内容,是否和任务一致:

首先是fldr.log,内容如下:

dmfldr: 2021-09-30 09:23:36  dmfldr: 

Copyright (c) 2011, 2015, Dameng.  All rights reserved.

控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

数据是否已按照聚集索引排序:No

字符集:GBK


dmfldr: 2021-09-30 09:23:36  
数据文件共1个:
F:\data.txt

错误文件:fldr.bad

目标表:LEVEL

列名                                                                                                                             包装数据类型         终止
C1                                                                                                                               CHARACTER            WHT
C2                                                                                                                               CHARACTER            |
C3                                                                                                                               yyyy-mm-dd           |

行缓冲区数量: 4
任务线程数量: 4

dmfldr: 2021-09-30 09:23:36  数据文件少列
dmfldr: 2021-09-30 09:23:36  数据文件少列
dmfldr: 2021-09-30 09:23:36  
目标表:LEVEL
3 行加载成功。
由于数据格式错误,2行 丢弃。
由于数据错误,0行 没有加载。

跳过的逻辑记录总数:0
读取的逻辑记录总数:5
拒绝的逻辑记录总数:0

用时:57.225(ms)

从日志可以看到,具体操作时间,以及使用该工具时设置的一些参数,其次就是目标表,再次就是读取源数据文件的记录数,总计插入成功多少,丢弃多少。

然后我们可以查看fldr.bad文件,确认异常数据,记录是否一致:

dmfldr: 2021-09-30 09:23:36 LEVEL test


dmfldr: 2021-09-30 09:23:36 LEVEL qqqqqqqqqqqqqqq

由此可以看出,具体操作时间,以及目的表名称,再次就是异常数据,和我们源数据文件第2行第4行的完全对得上。

 关于dmfldr工具的使用,以及具体参数设置,配置文件设置,详细可参考达梦官网文档达梦数据库 - 新一代大型通用关系型数据库 | 达梦云适配中心

你可能感兴趣的:(达梦数据库,数据库,sql)