多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

DMFLDR快速装载

DMFLDR快速装载 一、工具概述1.1 核心功能DMFLDRDM Fast Loader是DM数据库提供的命令行快速数据装载工具位于DM安装目录的 bin 子目录下核心功能为数据导入和数据导出数据导入为将文本文件如CSV、TXT等格式批量快速载入到DM数据库表中数据导出则将数据库表中的内容按照指定格式导出为文本文件。DMFLDR由客户端和服务器端模块两部分组成数据导入时客户端分析控制文件与数据文件将数据打包发送给服务器端模块完成装载。数据导出时客户端将命令传给服务端服务端打包数据回传客户端写入数据文件。1.2 核心参数必选参数为USERID和CONTROL前者指定数据库连接信息例如SYSDBA/SYSDBA127.0.0.1:5236后者指定控制文件路径定义数据格式和目标表等例如/home/dmdba/test.ctl其余可选参数如下参数说明默认值MODE操作模式导入IN或导出OUTINDIRECT是否使用快速方式Direct Path装载TRUESKIP跳过数据文件前 N 行通常用于忽略表头0ROWS提交频次即每批次提交的行数50000ERRORS允许的最大错误行数超过则终止任务100LOG日志文件保存路径fldr.logBADFILE错误数据记录文件记录被拒绝的行的路径fldr.badCHARACTER_CODE输入/输出文件的字符编码GBK提示MODE取IN表示导入取OUT表示导出。DIRECT为TRUE时采用直接路径装载可提高性能但可能受部分约束限制。LOG和BADFILE若未指定绝对路径则默认生成在当前工作目录下。DMFLDR支持三种参数指定方式优先级从高到低为控制文件中的 OPTIONS 选项命令行中直接指定的参数dmfldr.ini 配置文件中的参数。1.3 快速配置方式1控制文件配置通过编写控制文件.ctl集中定义所有装载参数和数据格式./dmfldrUSERIDSYSDBA/SYSDBACONTROL\/home/dmdba/test.ctl\2命令行直接指定无需控制文件直接在命令行中指定参数数据导出./dmfldrUSERIDSYSDBA/SYSDBAMODEOUTTABLEtest1DATA\/dm/test1.txt\;数据导入./dmfldrUSERIDSYSDBA/SYSDBAMODEINTABLEtest1DATA\/dm/test1.txt\3配置文件统一管理通过 dmfldr.ini 配置文件统一管理常用参数适合批量任务场景。二、行列分隔符的设计与应用2.1 基本概念DMFLDR通过控制文件中的列分隔符FIELD_SEPERATOR和行分隔符ROW_SEPERATOR来解析数据文件其中列分隔符分隔同一行中不同字段的符号缺省值为“|”行分隔符分隔不同数据行的符号缺省值为回车符。列与列之间由列分隔符隔开行与行之间由行分隔符隔开。2.2 分隔符设计其余可选参数如下常见分隔符包括使用默认的管道符“|”使用逗号“”使用十六进制格式“x”选项指定特殊分隔符当字段数据本身包含分隔符符号时可以使用封闭符ENCLOSE 进行处理例如FIELDS ‘,’ OPTIONALLY ENCLOSED BY ’ 另外当数据文件中某列为空时可使用 CONSTANT 关键字指定默认值需要跳过表头行则使用 SKIP 参数具体如下场景推荐分隔符说明普通文本数据|管道符默认分隔符不易与数据内容冲突CSV格式数据,逗号标准CSV格式兼容性好数据含逗号|或\t制表符避免与数据内容冲突不可见字符X 01十六进制适用于特殊系统间数据交换字段含分隔符配合ENCLOSED BY使用封闭符保护字段内容三、综合操作示例3.1 数据导入首先在数据库中创建目标表执行以下sql语句CREATE TABLE USER_INFO(user_id INT PRIMARY KEY, username VARCHAR(50), gender CHAR(1), birth_date DATE, address VARCHAR(200), phone_number VARCHAR(20));准备数据文件 user_data.txt这里以管道分隔符为例1|张三|M|1990-01-15|北京市朝阳区|138123456782|李四|F|1992-03-22|上海市浦东新区|139876543213|王五|M|1988-07-30|广州市天河区|13711223344编写控制文件 user.ctl内容如下OPTIONS(SKIP0ROWS50000DIRECTTRUE INDEX_OPTION1)LOAD DATA INFILE/dm/dmdba/user_data.txtBADFILE/dm/dmdba/user.badINTO TABLE USER_INFO FIELDS|(user_id, username, gender, birth_date DATE FORMATyyyy-mm-dd, address, phone_number)最后执行命令进行数据导入./dmfldrUSERIDSYSDBA/*****localhost:5236CONTROL\/dm/dmdba/user.ctl\log\/dm/dmdba/user.log\查询该表显示数据成功导入3.2 数据导出编写控制文件out.ctl内容如下OPTIONS(DIRECTTRUE INDEX_OPTION2)LOAD DATA INFILE/dm/dmdba/out_data.txtINTO TABLE USER_INFO FIELDS|(user_id, username, gender, birth_date, address, phone_number)然后执行命令./dmfldrUSERIDSYSDBA/Zh010922CONTROL\/dm/dmdba/out.ctl\MODE\OUT\进行数据导出最后查看输出文件显示数据成功导出https://eco.dameng.com
返回列表