外部表,是指不存在于数据库中的表,一般我们可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问,达梦数据库中,使用create external table创建外部表。本文是笔者在DCP学习过程中对外部表创建的额外探索理解,文中如有错误,欢迎指正。
(1)配置数据文件
(2)配置控制文件
(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’);
本质上来讲,这是一种通过定义控制文件目录来创建外部表的方法,前提是对控制文件目录的定义,通过控制文件目录定位控制文件,完成外部表创建。相对应的,在图形化管理工具,同样可以使用数据文件直接创建外部表,如下图所示,【创建方式】选择【控制文件目录】,选择目录名,输入文件名。
create external table test.ext1(id int, name varchar(20)) datafile ‘/dm8/ext/EXT0.ctl’
结果:创建表成功,浏览数据失败。报错[-7082]:外部表数据错误。
原因:控制文件中,数据文件只有文件名,缺少路径信息。
解决:修改配置文件,使用绝对路径配置数据文件。
相对应的,在图形化管理工具,同样可以使用控制文件直接创建外部表,如下图所示,【创建方式】选择【控制文件】,控制文件中的数据文件路径使用绝对路径。
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 ‘,’。
类似通过控制文件目录方式创建,这种方式前提是对数据文件目录的定义,通过数据文件目录定位数据文件,再对数据读取进行约定,完成外部表创建。
create external table test.ext5(id int, name varchar(20))
from default directory extdir location(‘EXT0.txt’) parms(fields delimited by ‘,’);
相对应的,在图形化管理工具,同样可以使用数据文件直接创建外部表,如下图所示,【创建方式】选择【数据文件】,在【参数列表】输入fields delimited by ‘,’。
相比来看,事实上如果仅进行单表创建的话,直接使用数据文件创建是最为方便的,省略了控制文件的创建维护,以及文件目录的定义。
使用控制文件和控制文件目录创建外部表,细分了执行过程,虽然过程略微复杂,但是当文件或表较多时,明显更便于管理创建过程。
文章
阅读量
获赞