注册
不同外部表创建方式中相关参数的配置
培训园地/ 文章详情 /

不同外部表创建方式中相关参数的配置

Rocco 2023/07/12 756 0 0

外部表,是指不存在于数据库中的表,一般我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问,达梦数据库中,使用create external table创建外部表。本文是笔者在DCP学习过程中对外部表创建的额外探索理解,文中如有错误,欢迎指正。

1.一般创建方式

(1)配置数据文件
图片1.png
(2)配置控制文件
图片2.png
(3)定义文件目录

create directory extdir as ‘/dm8/ext’;

(4)创建外部表

create external table test.ext(id int, name varchar(20)) from default directory extdir location(‘EXT0.ctl’);

本质上来讲,这是一种通过定义控制文件目录来创建外部表的方法,前提是对控制文件目录的定义,通过控制文件目录定位控制文件,完成外部表创建。相对应的,在图形化管理工具,同样可以使用数据文件直接创建外部表,如下图所示,【创建方式】选择【控制文件目录】,选择目录名,输入文件名。
图片4.png

2.其他创建方式的参数配置要求

2.1不创建默认目录,直接使用控制文件创建外部表

create external table test.ext1(id int, name varchar(20)) datafile ‘/dm8/ext/EXT0.ctl’

结果:创建表成功,浏览数据失败。报错[-7082]:外部表数据错误。
图片5.png
原因:控制文件中,数据文件只有文件名,缺少路径信息。
解决:修改配置文件,使用绝对路径配置数据文件。
图片6.png
相对应的,在图形化管理工具,同样可以使用控制文件直接创建外部表,如下图所示,【创建方式】选择【控制文件】,控制文件中的数据文件路径使用绝对路径。
图片7.png

2.2不使用配置文件,直接用数据文件创建外部表

create external table test.ext2(id int, name varchar(20))
from datafile ‘/dm8/ext/EXT0.txt’

结果:创建表成功,浏览数据失败。报错[-7082]:外部表数据错误。
原因:创建语句只约定了数据文件,但没有指出数据如何被读取。
解决:在创建语句中添加参数分隔规则。

create external table test.ext2(id int, name varchar(20))
from datafile ‘/dm8/ext/EXT0.txt’ parms(fields delimited by ‘,’);

相对应的,在图形化管理工具,同样可以使用数据文件直接创建外部表,如下图所示,【创建方式】选择【数据文件】,在【参数列表】输入fields delimited by ‘,’
图片8.png

2.3通过数据文件文件目录创建外部表

类似通过控制文件目录方式创建,这种方式前提是对数据文件目录的定义,通过数据文件目录定位数据文件,再对数据读取进行约定,完成外部表创建。

create external table test.ext5(id int, name varchar(20))
from default directory extdir location(‘EXT0.txt’) parms(fields delimited by ‘,’);

相对应的,在图形化管理工具,同样可以使用数据文件直接创建外部表,如下图所示,【创建方式】选择【数据文件】,在【参数列表】输入fields delimited by ‘,’。
图片9.png

3.小结

相比来看,事实上如果仅进行单表创建的话,直接使用数据文件创建是最为方便的,省略了控制文件的创建维护,以及文件目录的定义。
使用控制文件和控制文件目录创建外部表,细分了执行过程,虽然过程略微复杂,但是当文件或表较多时,明显更便于管理创建过程。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服