外部表是指不存在于数据库中的表。
通过向达梦数据库定义描述外部表的元数据,可以把一个操作系统文件当成一个只读的数据库表,对外部表将像普通定义的表一样访问。
外部表的数据存储在操作系统文件中,建立外部表的时候,不会产生段,页簇等存储结构,只有与表相关的定义放在数据字典中。在数据库中不能对外部表的内容进行修改,不能对外部表建立主键,索引,外键。不需要将外部表的数据载入到数据库中来,通过SQL解码器来访问外部表。
外部表创建和访问主要步骤如下:
1.创建相关操作系统目录和外部文件;
2.在数据库中定义外部表目录;
3.根据需要定义控制文件(可选);
4.在数据库中创建外部表定义;
5.通过数据库访问外部表。
举例:
根据/opt/emp.txt文件,创建外部表TEST.EMP
[root@study ~]# cd /opt/
[root@study opt]# cat emp.txt
1,a,2019-01-01
2,b,2018-08-08
3,c,1998-10-10
4,d,1988-11-11
1.不用控制文件
创建目录
SQL> create directory ddmpdir as '/opt';
图形化界面创建外部表
命令行方式:
SQL> create external table TEST.EMP(ID INT,NAME VARCHAR(10),SDATE DATE) from datafile default directory ddmpdir location('emp.txt')parms(fields delimited by ',');
操作已执行
已用时间: 5.204(毫秒). 执行号:5901.
SQL> select * from TEST.EMP;
行号 ID NAME SDATE
---------- ----------- ---- ----------
1 1 a 2019-01-01
2 2 b 2018-08-08
3 3 c 1998-10-10
4 4 d 1988-11-11
已用时间: 5.892(毫秒). 执行号:5902.
2.用控制文件
控制文件
[root@study opt]# cat emp.ctl
LOAD DATA
INFILE 'emp.txt'
INTO TABLE TEST.EMP
FIELDS ','
创建目录
SQL> create directory empdir as '/opt';
图形化创建表
命令行方式创建表
SQL> create external table TEST.EMP(ID INT,NAME VARCHAR(10),SDATE DATE) from default directory empdir location('emp.ctl');
操作已执行
已用时间: 3.684(毫秒). 执行号:5602.
插入成功
SQL> select * from TEST.EMP;
行号 ID NAME SDATE
---------- ----------- ---- ----------
1 1 a 2019-01-01
2 2 b 2018-08-08
3 3 c 1998-10-10
4 4 d 1988-11-11
已用时间: 18.343(毫秒). 执行号:5603
注意检查:
1.建表的时候注意varchar的值
2.目录权限问题
3.目录是否正确
4.不用控制文件创建外部表的时候,要注意添加分隔符号的参数列表,命令行方式from后面有个datafile default