在数据库系统运行期间,不同的应用场景下会有不同的需求。
dmfldr 工具能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到 DM 数 据库中,或把 DM 数据库中的数据按照一定格式写入文本文件。能满足客户定制分隔符导入导出数据的需求。
一、dmfldr 系统结构
Dmfldr 有客户端工具和服务器端模块。数据导入时,客户端分析控制文件和数据文件,将数据发送给服务端模块,服务端完成数据的导入,并分析服务端返回的信息或者错误数据。
当数据导出时,将命令和控制文件的参数分析 后传递给服务端模块,服务端按需求打包数据回传给客户端,客户端写入指定数据文件,生成相关日志。
二、dmfldr 参数
dmfldr的使用必须指定必要的参数,否则工具会报错“无效的参数个数”并退出。除了在启动命令行中直接指定dmfldr参数值外,用户还可以通过设置控制文件中的OPTIONS选项来指定dmfldr参数值,也可以在dmfldr.ini配置文件中指定dmfldr参数值。 参数值的优先选择顺序为先控制文件中的OPTIONS选项,其次命令行中指定的参数值,最后dmfldr.ini配置文件中指定的参数值 。
dmfldr使用较为灵活,参数较多,用户可以使用“dmfldr help”查看dmfldr版本信息和各参数的简单信息。
较为常见的参数 如下
关键字 说明(默认值)
USERID 数据库的连接信息
CONTROL 控制文件,字符串类型
LOG 日志文件,字符串类型 (fldr.log)
BADFILE 错误数据记录文件,字符串类型 (fldr.bad)
SKIP 初始忽略逻辑行数 (0)
LOAD 需要装载的行数 (ALL)
ROWS 提交频次 (50000), DIRECT为FALSE有效
DIRECT 是否使用快速方式装载 (TRUE)
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)
OCI_DIRECTORY OCI动态库所在的目录
DATA 指定数据文件路径
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)
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 配置文件路径,字符串类型
三、dmfldr 常用方法
1、控制文件配置参数值的方式
OPTIONS
(
SKIP = 0
ROWS = 50000
DIRECT = TRUE
INDEX_OPTION = 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()"
)
控制文件里面指定表名,装载的数据文件位置后,命令行 指定 登录数据库的信息和控制文件路径即可装载数据。
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control='/opt/data/test.ctl'
2、大字段数据的装载
DIRECT为TRUE时,此时数据载入若涉及到大字段对象,需要用户指定大字段数据文件。若CLIENT_LOB为TRUE,LOB_DIRECTORY应指定大字段数据文件所在的客户端本地目录,且此时待载入的大字段长度不得超过2G,否则无法成功载入大字段;若CLIENT_LOB为FALSE,用户必须先把相关文件传送到DM服务器所在主库,然后使用LOB_DIRECTORY指明存放目录。在数据文件中,大字段以“文件名:起始偏移:长度”的形式记录在数据文件中。指定的文件名无效时,dmfldr会报错,装载失败。对于CLOB类型字段,当指定的偏移、长度范围内带有不完整字符时,dmfldr将装载失败。
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control='/opt/data/test.ctl' LOB_DIRECTORY='/opt/data/'
DIRECT为FALSE时,数据文件中大字段列数据即字段内容。此时,大字段数据长度不允许超过32KB。BLOB_TYPE参数指定BLOB列内容为十六进制或者字符串:
BLOB_TYPE为HEX_CHAR时,数据文件中BLOB列当作为十六进制内容;
BLOB_TYPE为HEX时,数据文件中BLOB列为字符串形式内容,导入后会转换为十六进制。
BLOB_TYPE参数只对DIRECT为FALSE时有效,默认为HEX_CHAR。
使用dmfldr进行导入数据,BLOB_TYPE为HEX_CHAR。
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control='/opt/data/test.ctl' direct=false blob_type='hex_char'
3、空值处理
dmfldr通过设置NULL_MODE参数来处理空值。 设置为TRUE,载入时NULL字符串处理为NULL,载出时空值处理为NULL字符串 设置为FALSE,载入时NULL字符串处理为字符串,载出时空值处理为空串
null_mode=true 时
1|aaa
2|NULL
3|null
./dmfldr userid=SYSDBA/SYSDBA@localhost:5236 control='/opt/data/test.ctl' null_mode=true
数据文件中C2列的“NULL”和“null”字符串都被处理为空值。
SELECT C1, IFNULL(C2, 'NULL VALUE') FROM TEST;
行号 C1 IFNULL(C2,'NULLVALUE')
1 1 aaa
2 2 NULL VALUE
3 3 NULL VALUE
null_mode=false
数据文件中C2列的“NULL”和“null”字符串直接被作为字符串值插入表中。
SELECT C1, IFNULL(C2, 'NULL VALUE') FROM TEST;
行号 C1 IFNULL(C2,'NULLVALUE')
1 1 aaa
2 2 NULL
3 3 null
4、条件过滤
通过在控制文件中指定WHEN <field_conditions>子句,可以在装载过程中对数据进行过滤,符合field_conditions条件的数据才会被装载。
数据文件内容格式:
1,2
2,3
3,2
4,8
9,1
控制文件过滤条件 c1不等于1
INTO TABLE test1
WHEN C1 != '1'
FIELDS ','
(
c1 position (1:1),
c2 position (3:3)
)
查询结果验证。
SELECT * FROM TEST1;
行号 C1 C2
1 2 3
2 3 2
3 4 8
4 9 1
文章
阅读量
获赞