dm8 使用dmfldr装载外部数据

1、什么是dmfldr

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

dm8 使用dmfldr装载外部数据_第1张图片

熟悉或使用过oralce朋友,看着是不是感觉和oracle的sqloader差不多

2、dmfldr参数解读

cd $DM_HOME/bin

[dmdba@dm_s1 bin]$ ./dmfldr help
version: 03134283904-20220630-163817-20005
格式: ./dmfldr   KEYWORD=value

例程: ./dmfldr   SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'

USERID 必须是命令行中的第一个参数
CONTROL 必须是命令行中的第二个参数

字符串类型参数必须以引号封闭

关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令, 格式:{[/] | /}[@][

2.1、控制文件参数

dmfldr 控制文件的语法如下所示:
[OPTIONS(
=
……
)]
LOAD [DATA]
INFILE < | >
[BADFILE ]
[APPEND|REPLACE|INSERT]
::=参数
::=值 
::= [LIST] [] [,
[]]
::= DIRECTORY []
::=文件地址
::=STR [X]
::= {}
::=INTO TABLE [.]
[EP ]
[WHEN ]
[FIELDS [TERMINATED BY] [X] ]
[]
[]
::=模式名
::=表名
::=()
::=整型数字列表,以逗号分隔
::= { AND }
::= [(] [)]
::= | (p1:p2)
::= = | <> | !=
::= [X] '<字符串常量>' | BLANKS | WHITESPACE
::='<字符串常量>'
::=({ ,})
::= [FILLER][][][]
[][][]
::=列名
::= | NULL
::=position(p1:p2) | position(p1)
::=DATE FORMAT '<日期格式>'
::= TERMINATED [BY]
::= WHITESPACE|[X]
::= [OPTIONALLY] ENCLOSE [BY] [X]
::= CONSTANT "<常量>"
::= "<函数>"
----------------------------------//语法参数说明//----------------------------------------------
1、 dmfldr 在处理数据文件中换行符时 windows 默认为 0x0D0A(\r\n),非
windows 默认为 0x0A(\n),用户应该根据现有的数据文件中的换行符做相应的
调整。对应选项为,若指定的值为十六进制的字
符串值需要指明[X]选项,值不再需要以 0x 开头。若没有指明[X]选项,
值为指定的字符串;
2、关于列分隔符,用户应当指定 FIELDS 或者 coldef_option 中的至少一种。若
两者均存在,则以 coldef_option 中的设置为准,若分隔符指明[X]选项,则
表明此分隔符为十六进制格式的字符串;
3、关于 file_option,用来指定单个文件;
4、关于 directory_option,用来指定整个文件夹。指定此选项后,dmfldr 会自
动扫描指定文件夹下的所有文件,这些文件数据将被导入到服务器;
5、 关于 LIST 选项,INFILE 使用 LIST 选项时,表明实际的数据文件路径存储在
INFILE 指定的文件中,该文件可以存储多个实际的数据文件路径,使用逗号或者
换行分割;
6、关于 APPEND|REPLACE|INSERT 选项,当 dmfldr 处于数据装载模式时,
INSERT 表示插入方式,向空表插入新记录(如果不是空表则会报错无效的装载模
式);APPEND 表示追加方式,为缺省方式,在表中追加新记录;REPLACE 表示
替代方式,先清空表再插入新记录。
当 dmfldr 处于导出数据模式时,dmfldr 会检查导出数据文件是否存在,若不
存在则直接创建新文件;若存在,当设置为 APPEND 时,以追加的方式写入数据;
设置为 REPLACE 时,先删除文件再重新创建新文件;设置为其他值时则报错。
选项默认值为 APPEND;
7、 关于 OPTIONS 选项,该选项支持命令行参数中除 userid,control,help 以
外的所有参数的指定,每个参数值对使用空格或者换行分割。对于 option 中出
23DM8_dmfldr 使用手册
现的参数,在 dmfldr 的指定执行参数中也出现的,dmfldr 会选择 option 中
对应参数的值执行;
8、 关于 col_def,FILLER 表示跳过处理数据文件中指定列的值;
9、关于 property_option 选项
9.1、 position(p1:p2):从数据文件中每行数据的第 p1 个字节到第 p2 个字节
为该列值,包含边界 p1,p2;
9.2、position(p1):从数据文件中每行数据的第 p1 个字节开始,到下一个列分
隔符之间的数据为该列值,包含边界 p1;
9.3、position 选项对大字段数据无效,若对大字段类型指定此选项会报错;
9.4、NULL:指定的值为 NULL,忽略数据文件中的值;
9.5、某一列使用了 position,后续的列都要使用 position;
9.6、property_option 参数仅对导入有效。
10、关于 fmt_option 选项,用来指定日期格式 DATE FORMAT '<日期格式>'。更
多关于<日期格式>的介绍请参考《DM8_SQL 语言使用手册》中函数
TO_DATE/TO_TIMESTAMP/TO_TIMESTAMP_TZ;
11、关于 term_option 选项,该选项用来指定数据文件中指定列的结束标志。列的
结束标志可以是 WHITESPACE(空格)或者用户自定义的字符串或十六进制串。
指定了 term_option 后,该列不需要用 FIELDS 分隔;
12、 关于 enclosed_option 选项,此参数指定封闭符,为可选参数,默认不存在封
闭符。若在 into_table_clause 和 coldef_option 中均设置了封闭符,则
以 coldef_option 中的设置为准,若封闭符前指定[X]选项,则表明此封闭符
为十六进制格式的字符串;
13、分隔符或封闭符字符串的长度均不能超过 255 个字节;
14、关于 constant_option 选项,指定 constant 关键字后,数据文件中不需要为
该列准备数据,如果指定了,该列数据将作为下一字段数据装载而导致数据混乱。
constant 选项对大字段类型无效;
15、关于 fun_option 选项,目前只支持 trim()、replace(colname, srcStr,
destStr)和 sysdate 函数。trim()函数用于去除列数据的前后空格;
replace()函数用于将 colname 列名指定的列数据中的 srcStr 替换为
destStr,其中 srcStr 和 destStr 参数可使用 chr(int)函数将数字转换成 字符串,
要求 chr()的参数和返回值均不超过 4 个字节;sysdate 函数用于将系
统当前时间插入指定列,忽略数据文件中指定列的值;
16、关于 ep_option 选项,用于指定数据将要发送的目的站点,仅适用于 MPP 环境

2.2、使用DMFLDR简要 

例子所示,USERID 和 CONTROL 是启动 dmfldr 必须要指定的参数,且 USERID 必

须是第一个参数,CONTROL 必须是第二个参数;除了在启动命令行中直接指定 dmfldr 参数值外,

用户还可以通过设置控制文件中的OPTIONS 选项来指定 dmfldr 参数值,也可以在 dmfldr.ini 配置

文件中指定 dmfldr 参数值

dmfldr USERID=SYSDBA/SYSDBA CONTROL='c:\fldr.ctl'

3、 DMFLDR导入数据实战

3.1、在控制文件中指定数据文件

场景1、装载的文件分隔符【|】

1):在达梦数据库创建相应字段的表结构,用于装载存储数据

create table dm_load_data_1 (id int,id_name varchar(10));

2):查询需要装载的文件,存放路径为/dmdata1/fldr/fldr01.txt


dm8 使用dmfldr装载外部数据_第2张图片

3):编辑控制文件,存放路径为/dmdata1/fldr/fldr01.ctl

LOAD DATA
INFILE ' /dmdata1/fldr/fldr01.txt '     
INTO TABLE   dm_load_data_1
FIELDS ' | '
(
id ,    
id_name
)
4) 使用 dmfldr 进行数据载入:dmfldr 默认情况下mode='in',注意:字符集是否一样
./dmfldr userid=SYSDBA/[email protected]:32141 control=\'/dmdata1/fldr/fldr02.ctl\' CHARACTER_CODE=\'UTF-8\'
dm8 使用dmfldr装载外部数据_第3张图片
5) 在达梦数据库查询数据:数据已经导入成功
dm8 使用dmfldr装载外部数据_第4张图片

场景2、装载的文件分隔符【,】

1):在达梦数据库创建相应字段的表结构,用于装载存储数据

create table dm_load_data_2 (xh int,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10) );

2):查询需要装载的文件,存放路径为/dmdata1/fldr/fldr02.txt


dm8 使用dmfldr装载外部数据_第5张图片

 3):编辑控制文件,存放路径为/dmdata1/fldr/fldr02.ctl

LOAD DATA
INFILE '/dmdata1/fldr/fldr02.txt'
INTO TABLE dm_load_data_2
FIELDS ','
(
xh,
c1,
c2,
c3,
c4,
c5
)

 4) 使用 dmfldr 进行数据载入:dmfldr 默认情况下mode='in'

./dmfldr userid=SYSDBA/[email protected]:32141 control=\'/dmdata1/fldr/fldr02.ctl\' CHARACTER_CODE=\'UTF-8\'

dmfldr V8
控制文件:

加载行数:全部

每次提交服务器行数:50000

跳过行数:0

允许错误数:100

是否直接加载:Yes

是否插入自增列:No

数据是否已按照聚集索引排序:No

字符集:UTF-8

数据文件共1个:
/dmdata1/fldr/fldr02.txt

错误文件:fldr.bad

目标表:DM_LOAD_DATA_2

列名                                                                                                                           包装数据类型   终止
XH                                                                                                                               CHARACTER            ,
C1                                                                                                                               CHARACTER            ,
C2                                                                                                                               CHARACTER            ,
C3                                                                                                                               CHARACTER            ,
C4                                                                                                                               CHARACTER            ,
C5                                                                                                                               CHARACTER            ,

行缓冲区数量: 4
任务线程数量: 4

8行记录已提交

目标表:DM_LOAD_DATA_2
load success.
8 行加载成功。
0 行由于数据格式错误被丢弃。
1 行由于数据错误没有加载。

跳过的逻辑记录总数:0
读取的逻辑记录总数:9
拒绝的逻辑记录总数:1

7.486(ms)已使用

 5) 在达梦数据库查询数据:数据已经导入成功

dm8 使用dmfldr装载外部数据_第6张图片

 场景3、装载的文件分隔符【“|”   “,”  “制表符”】

1):在达梦数据库创建相应字段的表结构,用于装载存储数据

create table dm_load_data_3 (xh int,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10) );

2):查询需要装载的文件,存放路径为/dmdata1/fldr/fldr03.txt

dm8 使用dmfldr装载外部数据_第7张图片

  

3):编辑控制文件,存放路径为/dmdata1/fldr/fldr02.ctl

LOAD DATA
INFILE '/dmdata1/fldr/fldr03.txt'
INTO TABLE dm_load_data_3
FIELDS ','
(
xh TERMINATED BY '|',
c1 TERMINATED BY ',',
c2 TERMINATED BY '|',
c3 TERMINATED BY ',',
c4 TERMINATED BY '|',
c5
)

 4) 使用 dmfldr 进行数据载入:dmfldr 默认情况下mode='in'

./dmfldr userid=SYSDBA/[email protected]:32141 control=\'/dmdata1/fldr/fldr03.ctl\' CHARACTER_CODE=\'UTF-8\'

dm8 使用dmfldr装载外部数据_第8张图片

 5) 在达梦数据库查询数据:数据已经导入成功  

dm8 使用dmfldr装载外部数据_第9张图片

 3.2、使用 DATA 参数指定数据文件

  也可以使用 DATA 参数指定 dmfldr 的数据文件。用户可以在命令行中直接指定 DATA
参数,也可以在 dmfldr.ini 配置文件中指定 DATA 参数。如果控制文件中数据文件路径
指定为‘* ’,那么会使用命令行或 dmfldr.ini 配置文件中指定的 DATA 参数来替换
‘* ’,优先使用命令行中指定的 DATA 参数进行替换。

1):在达梦数据库创建相应字段的表结构,用于装载存储数据

create table dm_load_data_3 (xh int,c1 varchar(10),c2 varchar(10),c3 varchar(10),c4 varchar(10),c5 varchar(10) );

2):查询需要装载的文件,存放路径为/dmdata1/fldr/fldr04.txt

dm8 使用dmfldr装载外部数据_第10张图片

  

3):编辑控制文件,存放路径为/dmdata1/fldr/fldr04.ctl

LOAD DATA
INFILE *
INTO TABLE dm_load_data_3
FIELDS ','
(
xh TERMINATED BY '|',
c1 TERMINATED BY ',',
c2 TERMINATED BY '|',
c3 TERMINATED BY ',',
c4 TERMINATED BY '|',
c5
)

 4) 使用 dmfldr 进行数据载入:dmfldr 默认情况下mode='in'

./dmfldr userid=SYSDBA/[email protected]:32141 control=\'/dmdata1/fldr/fldr04.ctl\' data=\'/dmdata1/fldr/fldr04.txt\' CHARACTER_CODE=\'UTF-8\'
dm8 使用dmfldr装载外部数据_第11张图片

 5) 在达梦数据库查询数据:数据已经导入成功  

dm8 使用dmfldr装载外部数据_第12张图片

3.3、导入总结

  dm8  dmfldr导入数据,可以在控制文件中指定文件位置也可以在参数中指定,同时分隔多样化的情况下也可以很轻松的进行配置,提升了导入数据库的效率

4、 DMFLDR导出数据实战

可以把DMFLDR导出看着是导入的逆向过程,默认情况下,DMFLDR的mode='in',即可以省略,但是我们在导出数据的时候,肯定不能省略mode='out'

1)、编辑控制文件,存放路径为/dmdata1/fldr/fldr05.ctl

LOAD DATA

INFILE '/dmdata1/fldr/fldr04.txt'

INTO TABLE dm_load_data_3

FIELDS '|'

2) 使用 dmfldr 进行数据载出:dmfldr 载出模式mode='out'

 ./dmfldr userid=SYSDBA/[email protected]:32141  control=\'/dmdata1/fldr/fldr04.ctl\'  mode=\'out\' CHARACTER_CODE=\'UTF-8\'

3) 查询导出的文件

dm8 使用dmfldr装载外部数据_第13张图片

5、总结

  达梦dmfldr实现了数据库与外部数据之间的传输,在实际应用场景有着很重要的适用场景,特别是数据分析领域中,往往导入或者导出数据,极大的增强了达梦在各项场景中的适用性。

-------------------------------//到此结束//---------------------------

更多内容,请访问达梦社区地址:https:eco.dameng.com

你可能感兴趣的:(oracle,数据库,java)