暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

13.达梦DCP认证课程-快速数据加载

原创 让世界为你转身 2024-10-31
306

8.数据快速加载

8.1 dmfldr简介

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

安装好 DM 数据库管理系统后,在安装目录的“bin”子目录下可找到 dmfldr 执行文件。

数据载入:

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

数据导出:

当进行 数据导出时,dmfldr 客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的 dmfldr 模块。服务器解析并打包需要导出的数据,发送给 dmfldr 客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。

8.2 dmfldr用法

8.2.1 帮助信息

[dmdba@localhost ~]$ dmfldr help version: 03134283904-20220630-163817-20005 格式: ./dmfldr KEYWORD=value 例程: ./dmfldr SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl' USERID 必须是命令行中的第一个参数 CONTROL 必须是命令行中的第二个参数 字符串类型参数必须以引号封闭 关键字 说明(默认值) -------------------------------------------------------------------------------- USERID 用户名/口令, 格式:{<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>] <connect_identifier> : [<svc_name> | host[:port] | <unixsocket_file>] <option> : #{<exetend_option>=<value>[,<extend_option>=<value>]...} --此行外层{}是为了封装参数之用,书写时需要保留 <os_auth> : AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO} 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 不刷新二级索引,数据装载完成后重建所有二级索引 3 刷新二级索引, 数据装载的同时将数据插入二级索引 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 LOG_SIZE 日志信息缓冲区的大小 (1),有效值范围1~100 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/DPC环境,是否只生成单个数据文件(FALSE) LAN_MODE MPP/DPC环境,是否以内网模式装载数据(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/DPC环境导入数据时有效 PARALLEL 是否开启并行装载(FALSE) SQL 使用自定义查询语句,仅导出模式有效 TABLE 导入/出表 ROW_SEPERATOR 行分隔符 FIELD_SEPERATOR 列分隔符 COMMIT_OPTION 提交选项(0), 0:每发送一批数据后提交, 1:发送完所有数据后提交 APPEND_OPTION 追加选项(0), 0: 追加方式, 1: 替代方式, 2: 插入方式 COLNAME_HEADING 是否在导出文件头中打印列名(FALSE) IGNORE_AIMLESS_DATA 是否忽略无目标数据(FALSE) LOB_AS_VARCHAR 是否将CLOB作为VARCHAR进行导入导出(FALSE) LOB_AS_VARCHAR_SIZE 将CLOB作为VARCHAR进行导入导出时, lob数据最大大小(10)MB LOG_LEVEL 记录错误数据信息级别(3), 0: 不记录 1: 只记录到log文件 2: 只记录到bad文件 3: 记录到log和bad文件 FLDR_INI 配置文件路径,字符串类型 HELP 打印帮助信息

8.2.2 重要参数

data: 指定数据文件,也可以在控制文件中 infile 子句指定数据文件。

指定数据文件的三种方式:

一是在控制文件中指定; 二是通过命令行参数 DATA 直接指定; 三是使用 dmfldr.ini 指定;

mode: 指定装载类型mode参数,IN/OUT,默认为IN。

control: 指定装载使用的控制文件。

8.2.3 dmfldr的控制文件

控制文件 CONTROL 是启动 dmfldr 必须要指定的参数,用于指定数据文件中数据的格式。在数据载入时,dmfldr 根据控制文件指定的格式来解析数据文件;导出数据时,dmfldr 也会根据控制文件指定的列分隔符、行分隔符等生成数据文件。

控制文件语法:

[OPTIONS( <id>=<value> …… )] LOAD [DATA] #优先级高于options INFILE < <file_option>|<directory_option> > [BADFILE <path_name>] [APPEND|REPLACE|INSERT] <into_table_clause> <into_table_clause> ::= <into_table_single>{<into_table_single>} <into_table_single> ::=INTO TABLE [<schema>.]<tablename> [EP <ep_option>] [WHEN <field_conditions>] [FIELDS [TERMINATED BY] [X] <delimiter>] [<enclosed_option>] #设置封闭符,比如导出时字段加上双引号 [<coldef_option>]

说明:

1.关于 OPTIONS 选项,该选项支持命令行参数中除 userid,control,help 以外的所有参数的指定,每个参数值对使用空格或者换行分割。对于 option 中出现的参数,在 dmfldr 的指定执行参数中也出现的,dmfldr 会选择 option 中对应参数的值执行;

2.关于 APPEND|REPLACE|INSERT 选项,表示将数据装载时采用的加载方式。INSERT,插入方式,向空表插入新记录(如果不是空表则会报错无效的装载模式);APPEND,追加方式,为缺省方式,在表中追加新记录;REPLACE,替代方式,先清空表再插入新记录;

3.dmfldr 在处理数据文件中换行符时 windows 默认为 0x0D0A(\r\n),非windows 默认为 0x0A(\n),用户应该根据现有的数据文件中的换行符做相应的调整;

8.3 dmfldr使用示例

8.3.1 快速装载导出

mode=out

1.编写控制文件,emp.ctl

#用法1:导出所有字段,into从哪个表中导出 load data infile 'emp.txt' into table dmhr.employee files ',' #用法2:导出部分字段 options (character_code='UTF-8') load data infile 'emp.txt' into table dmhr.employee fields ',' (employee_id, employee_name, hire_date date format 'YYYYMMDD', IDENTITY_CARD enclose by '''' )

2.导出数据

dmfldr userid=jt/jiangtao.2023@localhost:5236 control=\'emp.ctl\' mode=\'OUT\'

8.3.2 指定数据文件装载

8.3.2.1 控制文件中定义列格式

1.创建test表

create table test(c1 int,c2 int,c3 date);

2.编辑数据文件test.txt,存放在/dm8/data/dmfldr/test.txt,内容如下:

1 1|2015-11-06 2 2|2015-11-05 3 3|2015-11-04

3.编辑控制文件test.ctl,存放路径为/dm8/data/dmfldr/test.ctl,内容如下:

LOAD DATA INFILE '/dm8/data/dmfldr/test.txt' INTO TABLE test FIELDS '|' ( C1 TERMINATED BY ' ', C2, C3 DATE FORMAT 'yyyy-mm-dd' )

4.使用dmfldr进行数据载入

dmfldr userid=jt/jiangtao.2023@localhost:5236 control=\'/dm8/data/dmfldr/test.ctl\'

5.验证结果

select * from test;

8.3.2.2 控制文件不指定列格式

1.创建测试表dept

create table dept as select * from dmhr.department where 1=0;

2.编写数据文件dept.txt

101|总经理办|1001|1 102|行政部|1002|1 103|开发部|1003|1 104|市场部|1004|1 105|技术支持部|1005|1 201|总经理办|2001|2 202|行政部|2002|2 204|市场部|2004|2 301|总经理办|3001|3 302|行政部|3002|3 303|开发部|3003|3 304|市场部|3004|3 305|技术支持部|3005|3

3.编写控制文件dept.ctl

options (errors=10 log='dept.log' character_code='UTF-8') LOAD DATA INFILE '/dm8/data/dmfldr/dept.txt' str X '0a' INTO TABLE DEPT FIELDS '|'

4.使用dmfldr进行数据载入

dmfldr userid=jt/jiangtao.2023@localhost:5236 control=\'/dm8/data/dmfldr/dept.ctl\'

5.验证结果

select * from dept;

8.3.3 dmldrc和dmldrp用法

1.先启动dmldrp数据装载工具服务器

#启动时可以指定端口,不指定默认端口为8336 [dmdba@localhost bin]$ dmldrp dmldrp V8 dmldrp is ready!

2.dmldrc连接dmldrp进行导入

dmldrc userid=dmtest/Dameng123 localhost:8336 control=\'/dm8/backup/dmfldr/dept.ctl\' mode=\'IN\'

8.3.4 大字段处理

dmfldr 支持所有 DM 数据库支持的列定义类型,包括字符串、数值、时间日期、时间日期间隔、大字段类型等。
若数据文件的编码方式与 DM 数据库服务器的编码方式不一样,dmfldr 还需要进行字符编码的转换。

dmfldr相关lob字段命令行参数:

[dmdba@localhost ~]$ dmfldr help|grep LOB CLIENT_LOB 大字段目录是否在本地 (FALSE) LOB_DIRECTORY 大字段数据文件存放目录 LOB_FILE_NAME 大字段数据文件名称,仅导出有效 (dmfldr.lob) BLOB_TYPE BLOB类型字段数据值的实际类型,字符串类型 (HEX_CHAR) LOB_AS_VARCHAR 是否将CLOB作为VARCHAR进行导入导出(FALSE) LOB_AS_VARCHAR_SIZE 将CLOB作为VARCHAR进行导入导出时, lob数据最大大小(10)MB

1.创建测试表test_lob

--创建test_lob表 DROP TABLE TEST_LOB; CREATE TABLE TEST_LOB(C1 INT,C2 BLOB,C3 CLOB); --插入数据 INSERT INTO TEST_LOB VALUES(1,0XAB121032DE,'abcdefg'); INSERT INTO TEST_LOB VALUES(2,0XAB121032DE,'abcdefg'); commit;

2.编写控制文件test_lob.ctl,存放在/dm8/data/dmfldr/test_lob.ctl,内容如下:

#方式1: LOAD DATA INFILE '/dm8/data/dmfldr/test_lob.txt' INTO TABLE test_lob FIELDS '|' ( C1, C2, C3 ) #方式2:不指定导出字段 LOAD DATA INFILE '/dm8/data/dmfldr/test_lob.txt' INTO TABLE test_lob FIELDS '|'

3.使用dmfldr导出数据

#方式1:lob字段和导出的数据文件在一个目录 dmfldr userid=jt/jiangtao.2023@localhost:5236 control=\'/dm8/data/dmfldr/test_lob.ctl\' mode=\'out\' #方式2:大字段数据文件存放目录 dmfldr userid=jt/jiangtao.2023@localhost:5236 control=\'/dm8/data/dmfldr/test_lob.ctl\' lob_directory=\'/dm8/data/dmfldr/\' lob_file_name=\'test_lob.lob\' mode=\'out\'

4.验证

[dmdba@localhost dmfldr]$ cat test_lob.txt 1|dmfldr.lob:0:5|dmfldr.lob:5:7 2|dmfldr.lob:12:5|dmfldr.lob:17:7 [dmdba@localhost dmfldr]$ strings dmfldr.lob abcdefg abcdefg
最后修改时间:2024-10-31 09:31:32
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论