前言
dmfldr 是 DM 数据库提供的一种快速装载工具,让用户通过使用快速装载工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数据库中,或把 DM 数据库中的数据按照一定格式载出到文本文件中。dmfldr 适合数据量特别巨大的情况,且性能相比其他工具更好,但是功能性方面较差。
系统结构
dmfldr(DM Fast Loader)包含 dmfldr 客户端和 dmfldr 模块两部分 :
-
dmfldr 客户端实现初始化快速装载环境、读取数据、打包数据和发送数据功能。
-
dmfldr 功能模块嵌入
-
当进行数据载入时,dmfldr客户端接收用户提交的命令与参数,分析控制文件与数据文件,将数据打包发送给服务器端的dmfldr模块,由服务器完成数据的真正装载工作。并分析服务器返回的消息,必要时根据用户参数指定生成日志文件与错误数据文件。
-
当进行数据导出时,dmfldr客户端接收用户提交的命令与参数,分析控制文件,将用户要求转换成相应消息发送给服务器端的dmfldr模块。服务器解析并打包需要导出的数据,发送给dmfldr客户端,客户端将数据写入指定的数据文件,必要时根据用户参数指定生成日志文件。
参数解析
- dmfldr 参数解析
关键字 | 说明 |
---|---|
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 不刷新二级索引,数据装载完成后重建所有二级索引 ;3 刷新二级索引, 数据装载的同时将数据插入二级索引 |
ERRORS | 允许的最大数据错误数 (100) |
CHARACTER_CODE | 字符编码,字符串类型 (GBK, GB18030,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_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水平分区表 (FALSE) |
EP | 指定需要发送数据的站点序号列表,仅向MPP环境导入数据时有效 |
HELP | 打印帮助信息 |
使用方式
- 参数 USERID 必须置于首位,此外的多个参数之间排列顺序无影响,参数之间使用空格间隔;
## 路径必须加 ' '
dmfldr userid=SYSDBA/SYSDBA@localhost:5237 control=\'/opt/data/test.ctrl\'
## 配置文件
LOAD DATA
INFILE '/opt/data/test.txt'
INTO TABLE test1 WHEN A != 'a'
FIELDS ','
(
a,
b
)
INTO TABLE test2
WHEN B = 'b'
FIELDS ','
(
a,
b
)