达梦使用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 ;

三、注意事项

相关推荐
民乐团扒谱机5 分钟前
【读论文】基于波分复用和时分复用的单纤高精度双向时间传递系统
运维·服务器·网络
夜雪一千7 分钟前
服务器快慢怎么测?从命令行到脚本的完整指南
运维·服务器
风哥2号8 分钟前
华为高斯数据库恢复工具FGOGDU(FGEDU openGauss DUL)
数据库·opengauss·华为高斯
2601_962128649 分钟前
【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
java·架构·tomcat
要开心吖ZSH10 分钟前
腾讯 IM × TRTC 联动实战:后端如何撑起一次视频问诊(混流录制篇)
java·音视频·腾讯云·健康医疗·即时通讯·im
不会就选b11 分钟前
Linux之socket编程(三)
linux·运维·服务器
吴声子夜歌13 分钟前
Java——类、对象及方法(二)
java·开发语言
2401_8906034015 分钟前
Python入门语法(一)
java·开发语言·python
小蒜学长16 分钟前
springboot党建云课堂学习与管理系统(代码+数据库+LW)
java·数据库·spring boot·后端·学习
2601_9621803316 分钟前
FlinkCDC 实现 MySQL 数据变更实时同步
数据库·mysql