当前位置: 首页 > news >正文

dmfldr快速装载工具使用

文章目录

  • 1概述
  • 2使用解析
    • 2.1dmfldr命令行参数
    • 2.2dmfldr控制文件
  • 3使用案例
    • 3.1导入.txt文件
    • 3.2导入.csv文件
    • 3.3导出为.txt文件
    • 3.4DM管理工具导入、导出数据

1概述

通过物理和逻辑备份还原我们可以将达梦数据库中的数据从一个库中导出并导入到另一个数据库中,在不少情况下我们需要将一个有特定分隔符的文本文件,如txt、Excel文件中的数据导入到数据库的某个表中,就可以使用dmfldr工具来实现,当然也可以使用DM管理工具在图形化界面下进行操作。
dmfldr可以处理数据量较大的文本文件,在配置dmfldr控制文件后,dmfldr根据指定的内容进行数据解析并发送到服务端导入到表中,也可以按照控制文件配置内容导出某张表的内容并保存到文件中。dmfldr结构示意图如下:
在这里插入图片描述

2使用解析

在数据库的安装目录的“bin”子目录下可找到dmfldr执行文件,dmfldr的使用必须指定必要的参数,否则工具会报错“无效的参数个数”并退出。dmfldr指定参数的格式为:

dmfldr keyword=value [keyword=value ...]

不指定参数报错:
在这里插入图片描述

2.1dmfldr命令行参数

执行“dmfldr help”可以看到基本的使用参数和其含义:

version: 03134284368-20250728-285229-20149 Pack24
格式: ./dmfldr   KEYWORD=value例程: ./dmfldr   SYSDBA/SYSDBA CONTROL='/opt/data/fldr.ctl'USERID 必须是命令行中的第一个参数
字符串类型参数必须以引号封闭关键字              说明(默认值)
--------------------------------------------------------------------------------
USERID              用户名/口令格式: {<username>[/<password>] | /}[@<connect_identifier>][<option>] [<os_auth>]参数:<connect_identifier> ::= [<svc_name> | host[:port] | <unixsocket_file>]<option> ::= #{<extend_option>=<value>[,<extend_option>=<value>]...}<os_auth> ::= AS { SYSDBA | SYSSSO | SYSAUDITOR | USERS | AUTO }示例: SYSDBA/SYSDBA@192.168.1.64:5236注意: option参数的{}是为了封装参数之用,书写时需要保留
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    读入文件缓冲区的大小 (10MB),有效值范围1~2048
LOG_SIZE            日志信息缓冲区的大小 (1MB),有效值范围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                 使用自定义查询语句,仅导出模式有效
SQLFILE             自定义查询语句所在文件,仅导出模式有效
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数据最大大小(10MB)
LOG_LEVEL           记录错误数据信息级别(3), 0: 不记录 1: 只记录到log文件 2: 只记录到bad文件 3: 记录到log和bad文件 4: 错误仅输出到屏幕
FLDR_INI            配置文件路径,字符串类型
RECONN              自动重连次数(0)
RECONN_TIME         自动重连等待时间(5), 单位(s), 有效值范围(1~10000)
WIDTH               设置列数据宽度
SEDF                被替换的字符列表
SEDT                用于替换的字符列表
ESCAPE              转义符
EXPORT_MODE         MPP/DPC环境, 使用sql语句时的导出模式(0), 0: 普通模式 1: 快速模式, LOCAL方式连接
BAD_FILE_MODE       错误数据文件模式(0), 0: 普通模式 1: 纯数据模式
COMPATIBLE_MODE     兼容模式(0), 0: 不做兼容 1: 兼容DB2 2: 兼容MYSQL
PRIORITY_ENCLOSE    DB2模式下, enclose优先级最高
OUT_FILE_ROWS       导出模式下, 每个文件数据最大行数(0)
HELP                打印帮助信息

其中USERID是启动dmfldr必须要指定的参数,且USERID必须是第一个参数;MODE是载入模式,表示进行文件导入还是导出文件;CONTROL是指定控制文件的参数;TABLE是指定数据库中的表名;DATA是用来指定要处理的文件名。
一般来说指定这几个参数其实就够了,其他详细大导出导出配置我们可以在dmfldr控制文件里面进行配置。

2.2dmfldr控制文件

除了在启动命令行中直接指定dmfldr参数值外,用户还可以通过CONTROL参数设置控制文件中的OPTIONS选项来指定dmfldr参数值,也可以在dmfldr.ini配置文件中指定dmfldr参数值。
dmfldr参数值的优先选择顺序为:优先为命令行参数,其次为控制文件中指定的参数值,最后为dmfldr.ini配置文件中指定的参数值。如果装载表和数据文件参数在多处进行了指定,优先使用控制文件中的值。
dmfldr控制文件的语法如下所示:

[OPTIONS(
<id>=<value>
……)]
LOAD [DATA]
INFILE < <file_option>|<directory_option> >
[BADFILE <path_name>]
[APPEND|REPLACE|INSERT]
<into_table_clause>
<id> ::=参数
<value> ::=<file_option> ::= [LIST] <path_name> [<row_term_option>] [,<path_name>
[<row_term_option>]]
<directory_option> ::= DIRECTORY <path_name> [<row_term_option>]
<path_name> ::=文件地址
<row_term_option> ::=STR [X] <delimiter>
<into_table_clause> ::= <into_table_single>{<into_table_single>}
<into_table_single> ::=INTO TABLE [<schema>.]<tablename>[EP <ep_option>][WHEN <field_conditions>][FIELDS [TERMINATED BY] [X] <delimiter>][<enclosed_option>][TRAILING NULLCOLS][<coldef_option>]
<schema> ::=模式名
<tablename> ::=表名
<ep_option> ::=(<ep_list>)
<ep_list> ::=整型数字列表,以逗号分隔
<field_conditions> ::= <field_condition>{ AND <field_condition>}
<field_condition> ::= [(] <cmp_exp><cmp_ops><cmp_data>[)]
<cmp_exp> ::= <colid> | (p1:p2)
<cmp_ops> ::= = | <> | !=
<cmp_data> ::= [X] '<字符串常量>' | BLANKS | WHITESPACE
<delimiter> ::= '<字符串常量>'
<coldef_option> ::= (<col_def>{ ,<col_def>})
<col_def> ::= <col_id> [FILLER][<property_option>][<dtype_option>][<fmt_option>][<term_option>][<enclosed_option>][<constant_option>][<fun_option>]
<col_id> ::= 列名
<property_option> ::= <position_option> | NULL
<position_option> ::= position(p1:p2) | position(p1) | position(*)
<dtype_option> ::= DATE | CHAR| FLOAT
<fmt_option> ::= FORMAT '<日期格式>|<浮点数格式>'  
<term_option> ::= TERMINATED [BY] <wx_option>
<wx_option> ::= WHITESPACE|[X] <delimiter>
<enclosed_option> ::= [OPTIONALLY] ENCLOSE [BY] [X] <delimiter>
<constant_option> ::= CONSTANT "<常量>"
<fun_option> ::= "<函数>"

具体的参数含义可以查看官方文档:
https://eco.dameng.com/document/dm/zh-cn/pm/actual-combat-dmfldr.html
例如下面的控制文件用来导入两个文件到两张数据表中:(#是注释,配置文件中应该删除)

OPTIONS
(SKIP = 0 # 用来设置跳过数据文件起始的逻辑行数,默认的跳过行数为 0 行ROWS = 50000 # 设置每次提交的行数。默认的提交行数为 50000 行。DIRECT = TRUE # 自增列设置,如果SET_IDENTITY为 FALSE(缺省为FALSE),则 dmfldr 将忽略数据文件中对应自增列的值,服务器将根据自增列定义和表中已有数据自动生成自增列的值插入每一行的对应列,否则将使用导入文件中的值INDEX_OPTION = 2 # 代表服务器在快速装载过程中不刷新二级索引数据,只在装载完成时重建所有二级索引。如果在数据载入前,目标表中没有数据或数据量较小,建议 INDEX_OPTION 置为2
)
LOAD DATA # 一个LOAD DATA用来指定一次装载
INFILE '/opt/data/test1.txt' STR X '0A' # 指定数据文件和换行符
BADFILE '/opt/data/test1.bad' # 错误数据输出文件路径
INTO TABLE test1 # 目标表名
FIELDS '|' # 列分隔符为竖线 |
(
F1, # 第1列(自动映射表字段)
F2 DATE FORMAT 'YYYY-MM-DD', # 第2列为日期类型,指定格式如2023-01-01
F3 NULL, # 第3列允许NULL值(空字段自动转NULL)
F4 TERMINATED BY WHITESPACE ENCLOSE BY '(', # 列结束符为空格并且指定封闭符为(),若数据列设置了封闭符,则将跳过封闭符取出数据
F5 CONSTANT "test", # 第5列为常量值"test"
F6 "trim()" # 第6列应用trim函数去除首尾空格
)LOAD DATA
INFILE '/opt/data/test2.txt' STR X '0A'
BADFILE '/opt/data/test2.bad'
INTO TABLE test2
FIELDS '|'
(
C1 TERMINATED BY ' ', # 第1列以空格结束
C2, # 第2列(自动映射)
C3 "sysdate", # 第3列使用系统当前时间
C4 "substr(:C2,1,2)" # 第4列取C2列的前2个字符
)

3使用案例

dmfldr在处理数据文件中换行符时windows默认为0x0D0A(\r\n),非 windows默认为0x0A(\n),用户应该根据现有的数据文件中的换行符做相应的调整。对应选项为<row_term_option>。
本章节中除了第3小节演示的系统环境是Windows,其他章节使用的是Linux操作系统。

3.1导入.txt文件

创建一个.txt文件用来进行导入演示:

vi /temp/dmfldr_in.txt

导入要用到的文件都要进行授权chown -R dmdba:dinstall /temp
文件内容如下:

"C1","C2","C3"
"1","测试数据1","2025-09-14"
"2","测试数据2","2025-09-14"
"3","测试数据3","2025-09-14"
"4","测试数据4","2025-09-14"
"5","测试数据5","2025-09-14"

一共39行,然后创建dmfldr控制文件:

vi /temp/dmfldr_ctrl.ctrl

内容如下:

OPTIONS
(SKIP = 1ROWS = 50000DIRECT = TRUEINDEX_OPTION = 2
)LOAD DATA
INFILE '/temp/dmfldr_in.txt' STR X '0A'
BADFILE '/temp/dmfldr_in.bad'
INTO TABLE TEST.TEST_DMFLDR
FIELDS ','
(
C1 ENCLOSE BY '"',
C2 ENCLOSE BY '"',
C3 DATE FORMAT 'YYYY-MM-DD' ENCLOSE BY '"'
)

现在需要将/temp/dmfldr_in.txt文件导入到TEST.TEST_DMFLDR表中,该表的表结构如下:

CREATE TABLE "TEST"."TEST_DMFLDR"
(
"C1" INT NOT NULL,
"C2" VARCHAR2(200),
"C3" DATE,
NOT CLUSTER PRIMARY KEY("C1")) STORAGE(ON "test", CLUSTERBTR) ;

使用以下命令进行导入:

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmfldr userid=SYSDBA/'"密码"'@localhost:5236 control=\'dmfldr_ctrl.ctrl\'

在这里插入图片描述

查看TEST.TEST_DMFLDR表可以看到数据都成功导入了:
在这里插入图片描述

3.2导入.csv文件

如果导入的文件是Excel类型的文件则需要先装换位csv再进行导入。用cat命令看一下分隔符:
在这里插入图片描述

因为Windows和Linux使用的默认编码不一致,Windows默认使用GBK或者UTF-8 BOM编码,Linux默认使用UTF-8,需要在Windows进行转码,可以用记事本打开这个csv文件另存为UTF-8编码的文件:
在这里插入图片描述

然后重新上传就可以看到正常显示中文了:
在这里插入图片描述

创建dmfldr控制文件:

vi /temp/dmfldr_csv.ctrl

内容如下:也是导入到TEST.TEST_DMFLDR表,导入前已经将该表清空

OPTIONS
(SKIP = 1ROWS = 50000DIRECT = TRUEINDEX_OPTION = 2
)LOAD DATA
INFILE '/temp/测试dmfldr.csv' STR X '0A'
BADFILE '/temp/测试dmfldr.bad'
INTO TABLE TEST.TEST_DMFLDR
FIELDS ','
(
C1,
C2,
C3 DATE FORMAT 'YYYY-MM-DD'
)

使用以下命令进行导入:

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmfldr userid=SYSDBA/'"密码"'@localhost:5236 control=\'/temp/dmfldr_csv.ctrl\'

在这里插入图片描述

查看TEST.TEST_DMFLDR表可以看到数据都成功导入了:
在这里插入图片描述

3.3导出为.txt文件

dmfldr除了可以将文本文件导入数据库的表中,也可以将数据库中某张表的数据导出到文本文件中,执行以下命令可将TEST.TEST_DMFLD表中的数据导出为.txt文件,导出的时候默认以“|”进行分隔:

su - dmdba
cd /home/dmdba/dmdbms/bin
./dmfldr userid=SYSDBA/'"密码"'@localhost:5236 MODE=\'OUT\'  TABLE=TEST.TEST_DMFLDR   DATA=\'/temp/TEST_DMFLDR.txt\'

在这里插入图片描述

如果要自定义分隔符,可以指定控制文件:

./dmfldr userid=SYSDBA/'"密码"'@localhost:5236 MODE=\'OUT\'  TABLE=TEST.TEST_DMFLDR  control=\'/temp/dmfldr_out_ctrl.ctrl\'
# DATA=\'/temp/TEST_DMFLDR.txt\' 不指定了,在控制文件指定

dmfldr_out_ctrl.ctrl文件里面的内容与前面导入txt时候编写的是差不多的只是改一下输出文件,内容如下:

OPTIONS
(SKIP = 0ROWS = 50000DIRECT = TRUEINDEX_OPTION = 2
)LOAD DATA
INFILE '/temp/TEST_DMFLDR.txt' STR X '0A'
BADFILE '/temp/TEST_DMFLDR.bad'
INTO TABLE TEST.TEST_DMFLDR
FIELDS ','
(
C1 ENCLOSE BY '"',
C2 ENCLOSE BY '"',
C3 DATE FORMAT 'YYYY-MM-DD' ENCLOSE BY '"'
)

这样就可以实现导出的字段每列使用逗号分隔并被英文双引号进行包围:
在这里插入图片描述

3.4DM管理工具导入、导出数据

如果你有DM管理工具的话可以在图形化界面进行操作。
涉及的表为TEST.TEST_DMFLDR,表结构如下:

CREATE TABLE "TEST"."TEST_DMFLDR"
(
"C1" INT NOT NULL,
"C2" VARCHAR2(200),
"C3" DATE,
NOT CLUSTER PRIMARY KEY("C1")) STORAGE(ON "test", CLUSTERBTR) ;

方法一:导入的数据如果数据量不大的话可以直接在查询结果界面直接导入数据:
select * from TEST.TEST_DMFLDR;
查出结果后点击右下角的“编辑数据”的锁头样式的按钮:
在这里插入图片描述

然后复制你要导入的数据(要按该表对应的数据列顺序进行复制),然后在查询结果窗口右击,选择“粘贴”,粘贴上去后点击右下角的“保存修改”按钮进行修改。
在这里插入图片描述
在这里插入图片描述

最后不要忘记提交事务,接着再查这张表就可以看到对应的数据了:
在这里插入图片描述

方法二:在DM管理工具连接该实例后,在模式目录下找到该表,右击此表,在弹出的菜单中选择“导入表数据(F)”然后选择需要导入的文件:
在这里插入图片描述

设置基本的文件信息,如列名、导入的表单等信息:
在这里插入图片描述

配置列信息:
在这里插入图片描述
在这里插入图片描述

执行导入,查看导入的状态:
在这里插入图片描述

然后我们就可以从该表中查到导入的数据了:
在这里插入图片描述

使用DM管理工具也可以导出某个表的数据,我们可以直接在查询结果右击导出当前查询结果为文件,也可以模式下找到该表,然后右击此表选择“导出表数据(X)”,我们可以选择导出的具体文件格式,比如选择txt类型:
在这里插入图片描述

指定分隔符设置:
在这里插入图片描述

还可以编辑更详细的导出策略:
在这里插入图片描述

指定导出的文件信息,如文件目录、文件名:
在这里插入图片描述

导出成功后就可以查看到以下内容:
在这里插入图片描述

TEST_DMFLDR.txt文件的内容如下:
在这里插入图片描述

通过dmfldr快速装载工具可以显示将有规律的文本文件(CSV、TXT文件)中的数据导入到数据库的表中进行数据分析,也可以将表中的数据按一定的分隔符导出为可读的文本文件。实现这些只需要按说明进行控制文件内容的编写即可,如果数据量小或者导出需求比较简单的话,可以使用DM管理工具进行操作。

http://www.dtcms.com/a/445649.html

相关文章:

  • 网站建设技术思维导图wordpress页面结构
  • 兰亭妙微QT软件开发与UI设计协同:如何避免设计与实现脱节?
  • Qt3D--箭头示例
  • 自助建子站龙口网络
  • 【QT常用技术讲解】opencv实现指定分辨率打开摄像头
  • ICT 数字测试原理 7 - -VCL 测试环境
  • stp mode mstp 概念及题目
  • ASP4644芯片低功耗设计思路解析
  • Qt 开发修炼指南:从入门到通透的实战心法
  • 怎么格式化idea中的vue文件
  • MATLAB计算标准化加权平均降水量(Weighted Average Precipitation,SWAP)
  • Leetcode 3702. Longest Subsequence With Non-Zero Bitwise XOR
  • 通辽网站公司福州微信网站建设
  • 网页制作的网站建设wordpress 闪图不
  • 访客申请表添加业主信息字段 - 部署说明
  • Faster RCNN - RPN作用原理
  • 响应式公司网站高端大气公司名称
  • C++之模板进阶:非类型参typename的作用,特化设计与分离编译
  • 树莓派上市后的开源抉择:价格、纯度与生态
  • 顺丰科技java面经准备
  • 数据库的ALTER权限失效
  • 业绩连降两年,大幅减员缩降成本,极米科技赴港IPO挑战仍不少
  • 南昌做网站价格安康市网约车平台
  • 【Linux】Shell编程(二):grep - 文本搜索利器
  • Redis为啥是单线程的
  • 做网站挣钱的人东莞网站建设方案维护
  • g3云网站地方新闻门户网站源码
  • SD:在一个 Ubuntu 系统安装 stable diffusion Web UI
  • WebSocket网络编程(TCP/UDP)
  • 经典架构解读