DM8_dmfldr 快速装载工具命令行工具
用途: DM 数据库中表数据的快速载入和导出.
dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。 -- 文本文件
启动dmfldr
工具目录: <数据库软件安装目录>/bin
查看帮助:
[dmdba@dm8 bin]$ ./dmfldr help
version: 03134283890-20220525-161267-10045 Pack7
格式: ./dmfldr KEYWORD=value
例程: ./dmfldr SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'
USERID 必须是命令行中的第一个参数
CONTROL 必须是命令行中的第二个参数
字符串类型参数必须以引号封闭
关键字 说明(默认值)
--------------------------------------------------------------------------------
USERID 用户名/口令, 格式:{
--此行外层{}是为了封装参数之用,书写时需要保留
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文件
HELP 打印帮助信息
例如:
dmfldr USERID=SYSDBA/SYSDBA CONTROL='c:\fldr.ctl'
指定参数的方法和优先级: 控制文件中的OPTIONS选项指定的参数> 命令行中指定的参数 > dmfldr.ini配置文件中指定的参数.
注意: USERID 必须是第一参数 , CONTROL 必须是第二参数.
dmfldr控制文件
OPTIONS
(
SKIP = 0
ROWS = 50000 --每次提交的行数
DIRECT = TRUE --数据装载方式,布尔值。默认为 TRUE
INDEX_OPTION = 2 --索引的设置选项,整形数值。默认为 1. 2.在快速装载后,重建所有二级索引.
)
LOAD DATA
INFILE '/opt/data/test1.txt' STR X '0A'
BADFILE '/opt/data/test1.bad'
INTO TABLE test1
FIELDS '|'
(
F1,
F2 DATE FORMAT 'YYYY-MM-DD',
F3 NULL,
F4 TERMINATED BY WHITESPACE ENCLOSE BY '(',
F5 CONSTANT "test",
F6 "trim()"
)
LOAD DATA
INFILE '/opt/data/test2.txt' STR X '0A'
BADFILE '/opt/data/test2.bad'
INTO TABLE test2
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 "sysdate"
)
-- 用例练习
--单表导入.
--创建表
1) 建表 TEST
DROP TABLE TEST;
CREATE TABLE TEST(C1 INT,C2 INT,C3 DATE);
2) 编辑数据文件 test.txt,存放路径为/opt/data/test.txt,文件内容如下
1 1|2015-11-06
2 2|2015-11-05
3 3|2015-11_04
3) 编辑控制文件 test.ctl,存放路径为/opt/data/test.ctl,内容如下:
LOAD DATA
INFILE '/opt/data/test.txt'
INTO TABLE test
FIELDS '|'
(
C1 TERMINATED BY ' ',
C2,
C3 DATE FORMAT 'yyyy-mm-dd'
)
4) 使用 dmfldr 进行数据载入
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\'
错误数据处理
设置badfile参数
/dmfldr userid=SYSDBA/SYSDBA@LOCALHOST:5236 control=\'/opt/data/testv3.ctl\' badfile=\'/opt/data/test.bad\'
more /opt/data/test.bad
大字段数据的处理
创建表:
DROP TABLE TEST;
CREATE TABLE TEST(C1 INT,C2 BLOB,C3 CLOB);
--导出
vim test.ctl
NFILE '/opt/data/test2.txt'
INTO TABLE test
FIELDS '|'
(
C1,
C2,
C3
)
导出语句:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\' LOB_DIRECTORY=\'/opt/data/\' LOB_FILE_NAME=\'test3.txt\' mode=\'out\'
--导入
vim testv5.ctl
LOAD DATA
INFILE '/opt/data/test2.txt'
INTO TABLE test
FIELDS '|'
(
C1,
C2,
C3
)
导入语句:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/testv5.ctl\'LOB_DIRECTORY=\'/opt/data/\' badfile=\'/opt/data/test5.bad\'
日志文件及日志信息
dmfldr 的日志文件路径由 LOG 参数设置,默认日志文件名为 fldr.log。
例如:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\'log=\'/opt/data/test.log\'
自增列需要谨慎处理.
当 当 DIRECT 参数为 TRUE 时 ,使用参数SET_IDENTITY 来控制自增列的处理,
true: 则 dmfldr 将把从数据文件中读取的自增列值作为目标值插入数据库表中,用户应当保证每一行的自增列的值符合自增
列的规则,否则将造成数据混乱
false: 则 dmfldr 将忽略数据文件中对应自增列的值,服务器将根据自增列定义和表中已有数据自动生成自增列的值插入每
一行的对应列。
语句示例:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\' direct=true set_identity=false
数据排序:
SORTED 参数用来设置数据是否已经按照聚集索引排序,默认为 FALSE。
如果设置为 TRUE,则用户必须保证数据已按照聚集索引排序完成,并且如果表中存在数据,需要插入的数据索引值要比表中数据的索引值大,服务器在做插入操作时顺序进行插
入。若数据并未按照索引排序,则 dmfldr 会报错,装载失败。
如果设置为 FALSE,则服务器对于每条记录进行定位插入。此参数仅在 MODE 为 IN 且 DIRECT 为 TRUE 的情况下有效
语句示例:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\' sorted=true -- 可以提高插入速度
空值处理
dmfldr 通过设置 NULL_MODE 参数来处理空值。
设置为 TRUE,载入时 NULL 字符串处理为 NULL,载出时空值处理为 NULL 字符串.
设置为 FALSE,载入时 NULL 字符串处理为字符串,载出时空值处理为空串.
语句示例:
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control=\'/opt/data/test.ctl\' null_mode=true
条件过滤
通过在控制文件中指定 WHEN
个性设置
用户通过设置 dmfldr 的 SKIP、LOAD、ROWS 参数,可以根据自己的需求调整装载的起始行、装载最大行数以及每次提交的行数。
SKIP 参数用来设置跳过数据文件起始的逻辑行数,整形数值。
LOAD 参数用来设置装载的最大行数,整形数值。
ROWS 参数用来设置每次提交的行数,整
形数值。默认的提交行数为 50000 行。
达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台