一、功能
使用
DMFLDR
能够把按照一定格式排序的文本数据以简单、快速、高效的方式载入到
DM
数据库中,或把
DM
数据库中的数据按照一定格式载出到文本文件中。
1.
数据导出:可以按照用户指定的条件导出数据库中的数据,支持导出到不同格式的文件
中,例如文本文件或
CSV
文件等。
2.
数据导入:可以将文件中的数据导入到达梦数据库中,支持从上述提到的文本文件或
CSV
文件导入数据。
表及表的同义词支持数据载入和载出,视图及视图的同义词仅支持数据载出。
二、
dmfldr
结构
1.
客户端:初始化环境,读取、打包、发送数据。
2.
功能模块:装载数据。
运行原理:
1.
数据导入:客户端模块接受用户的命令发送给功能模块,由功能模块完成数据
导入工作。
2.
数据导出:客户端接收用户命令,将用户命令进行转换发送给功能模块,功能
模块进行打包需要导出的数据并发送给客户端,客户端将数据写入指定的数据文件。
总结:
在
dmfldr
工作时,由客户端模块进行用户的命令处理,然后由功能模块进行具体的
数据导入和导出的工作。
三、使用
dmfldr
1.
启动
在数据库的
bin
目录下由
dmfldr
的执行文件,在启动时需要指定参数,且
USERID
必须
是第一位,否则会报错

2. 控制文件 CONTROL
作用:用于指定数据文件中数据的格式,导入时根据指定的格式来解析数据文件;导出时根
据指定的行列分隔符等生成数据文件。
3.
指定数据文件的方式
1).
控制文件中指定数据文件
建表 T1:

编辑数据文件:
保存在
/home/dmdba
中

编辑控制文件:

其中:
LOAD DATA:
这部分指示数据库执行数据加载操作。
INFILE '/home/dmdba/T1.txt/':
这里指定了要加载数据的文件路径。
FIELDS '|':
这个部分指定了字段分隔符为竖线
"|"
,表示数据文件中不同字段之间使用
竖线作为分隔符。
ID TERMINATED BY ' ':
这里指定了第一个字段
ID
的分隔符为空格。
NAME/AGE
:在数据文件中没有特定的分隔符,直接将其加载到目标表的相应列中。
使用 dmfldr 命令进行数据装载:

在数据库中查看是否装载成功:

2).
使用
DATA
参数指定数据文件
依旧使用之前的数据文件,修改控制文件:

使用 dmfldr 命令进行数据装载:

在数据库中查看是否装载成功:

4.
带条件过滤进行数据装载
修改控制文件 T1.ctl:

其中条件过滤设置为年龄
=23
的不进行装载,修改完成后进行装载测试:

修改控制文件使用AND连接多个过滤条件:


总结:在带条件过滤装载数据时,仅支持比较相等和不相等,多个条件用
and
连接
5.
多表装载
在控制文件中指定多个
INTO TABLE
子句,可以将一批数据同时向多个表进行装载,当
需要在不同的表使用不同的过滤条件时也可以在控制文件中进行指定。
在
T1
表中装载所有数据,在
T2
表中装载除了年龄
=23
以外的所有数据,修改控制文件
如下:

装载完成后在数据库进行查询:
T1:

T2:

需注意:对于第二个及其之后的
INTO TABLE
子句,在其
coldef_option
中,必须为第一列指
定
POSITION
选项。
6.
大字段数据的处理
1).
大字段数据的导出
创建表并插入大字段数据:

编辑控制文件:

其中:
LOB_DIRECTORY
指定了导出文件存放的目录,
LOB_FILE_NAME
指定大字段对应的数据
文件名,如果没有指定则默认为
dmfldr.lob
,如果未指定
LOB_DIRECTORY
,则存放于指定导
出数据文件的同一目录中。
导出成功:

导出后的数据文件和对应的大字段数据文件如下:

2).
大字段数据的快速装载
当使用快速装载且导入数据时,需要指定大字段数据文件
使用之前导出的数据文件,修改控制文件如下:

其中
CLIENT_LOB
指定数据文件是否在本地客户端中,
LOB_DIRECTORY
指定数据文件存
放目录,
LOB_FILE_NAME
指定大字段对应的数据文件名。
修改控制文件完成后进行数据导入:


7. 空值处理
编辑数据文件 test.txt:

编辑控制文件 test.ctl:

1).
当
null_mode=true
时
导入数据:

2).
当
null_mode=false
时
导入数据:

总结:当
null_mode=true
时,数据文件中的
null
会处理为空值,当
null_mode=false
时,数
据文件中的
null
会直接作为字符串被导入数据库。