达梦使用dmfldr和外部表导入txt数据(windows环境)

一、数据准备

1.1 建表

复制代码
CREATE TABLE "SYSDBA"."test"
(
"c1" VARCHAR(1000) NOT NULL,
"c2" VARCHAR(1000),
"c3" VARCHAR(1000),
"c4" VARCHAR(1000),
"c5" VARCHAR(1000),
"c6" VARCHAR(1000),
"c7" VARCHAR(1000),
"c8" VARCHAR(1000),
"c9" VARCHAR(1000),
"c10" VARCHAR(1000),
"c11" VARCHAR(1000),
"c12" VARCHAR(1000),
"c13" VARCHAR(1000),
"c14" VARCHAR(1000),
"c15" VARCHAR(1000),
NOT CLUSTER PRIMARY KEY("c1")) STORAGE(ON "MAIN", CLUSTERBTR) ;

1.2 test.txt数据内容

复制代码
c1c2c3c4c5c6c7c8c9c10c11c12c13c14c15@$%^
001测试1MT03ST01001AT01\N0010001001\N\N\N\N@$%^
001测试2MT01ST01002AT010020020\N\N\N\N\N\N@$%^
001测试3MT01ST01003AT010030021\N\N\N\N\N\N@$%^

二、分别使用以下2种方式导入数据

2.1 dmfldr方式

2.1.1编写控制文件load.ctl

复制代码
OPTIONS (
    skip=1
    rows=50000
    errors=100
	CHARACTER_CODE='UTF-8' --指定字符编码
	NULL_STR='\N'    -- 使用这种方式替换\N 为空
)
LOAD DATA
INFILE 'D:\Desktop\nongxin\test.txt' STR '@$%^
'   --指定行分隔符,直接复制分隔符即可,注意换行,否则第一列会包含换行
BADFILE 'D:\Desktop\nongxin\test.bad' 
replace INTO TABLE "test"     --如果每次导入数据情况,使用replace
FIELDS TERMINATED BY X '1B'       --指定列分隔符ESC的十六进制表示
--TRAILING NULLCOLS
(
	c1   ,
	c2  ,
	c3  ,
	c4  ,
	c5  ,
	c6  ,
	c7  ,
	c8  ,
	c9  ,
	c10  ,
	c11  ,-- "replace(:msgid,'\\N','')", -- 也可以使用这种方式替换\N 为空
	c12  ,
	c13  ,
	c14  ,
	c15    TERMINATED BY '@$%^'
)

2.1.2 cmd进入达梦安装目录bin目录,使用快速装载命令导入数据:

复制代码
E:\dmdbms\bin>dmfldr.exe userid=SYSDBA/密码:端口 control='D:\Desktop\nongxin\load.ctl'

2.1.3 查询表

2.2 外部表方式

2.2.1 创建目录和表

复制代码
#创建目录
 CREATE OR REPLACE DIRECTORY "EXTDIR" AS 'D:\Desktop\nongxin';
#建表
 drop   TABLE ext_test;
 CREATE EXTERNAL TABLE ext_test
(
    c1 VARCHAR(20),
    c2 VARCHAR(100),
    c3 VARCHAR(20),
    c4 VARCHAR(20),
    c5 VARCHAR(50),
    c6 VARCHAR(20),
    c7 VARCHAR(100),
    c8 VARCHAR(20),
    c9 VARCHAR(10),
    c10 VARCHAR(100),
    c11 VARCHAR(50),
    c12 VARCHAR(100),
    c13 VARCHAR(50),
    c14 VARCHAR(50),
    c15 VARCHAR(100)
) 
from DEFAULT DIRECTORY EXTDIR LOCATION ('load.ctl') ; 

2.2.2 编写控制文件(与dmfldr的区别在于INFILE中控制文件的路劲不需要填写)

复制代码
OPTIONS (
    skip=1
    rows=50000
    errors=100
	CHARACTER_CODE='UTF-8' --指定字符编码
	NULL_STR='\N'    -- 使用这种方式替换\N 为空
)
LOAD DATA
INFILE 'test.txt' STR '@$%^
'   --指定行分隔符,直接复制分隔符即可,注意换行,否则第一列会包含换行
BADFILE 'test.bad' 
replace INTO TABLE "test"     --如果每次导入数据情况,使用replace
FIELDS TERMINATED BY X '1B'       --指定列分隔符ESC的十六进制表示
--TRAILING NULLCOLS
(
	c1   ,
	c2  ,
	c3  ,
	c4  ,
	c5  ,
	c6  ,
	c7  ,
	c8  ,
	c9  ,
	c10  ,
	c11  ,-- "replace(:msgid,'\\N','')", -- 也可以使用这种方式替换\N 为空
	c12  ,
	c13  ,
	c14  ,
	c15    TERMINATED BY '@$%^'
)

2.2.3 查询外部表结果

复制代码
 select * from ext_test ;

三、注意事项

相关推荐
Decay__15 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
学长毕设17 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
HideF17 小时前
Linux
linux·服务器·网络
zzu123zsw18 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
小徐不徐说19 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
Ruiery19 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
源码集结号19 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统
论文复现现场19 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
乌恩大侠20 小时前
从 AI-RAN 到 AI Agent:基于 NVIDIA Nemotron 构建 5G/6G 智能网络故障诊断系统
服务器·人工智能·5g·o-ru·ai-ran·电信大模型
啃瓜子的松鼠20 小时前
泛微OAe9-后端二开异步调用
java