1:定义

外部表,是指不存在于数据库中的表。通过向达梦提供描述外部表的元数据,可以把一
个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来
进行访问。
外部表的数据存储在操作系统中,是操作系统文件,建立外部表的时候,不会产生段,
页簇等存储结构,只有与表相关的定义放在数据字典中。在数据库中不能对外部表的内容进
行修改,不能对外部表建立主键,索引,外键。不需要将外部表的数据载入到数据库中
来,通过 sql 解码器来访问外部表

2:如何建立外部表:

案例1:
1、数据文件

[dmdba@localhost opt]$ vi a.txt
[dmdba@localhost opt]$ cat a.txt
序号,内容
1,AAAA
2,BBBBB
3,DD
4,CCCC
5,FF
6,WERWRWRW
7,iiiii
8,nnnnn
9,SER
10,EWDEWRWRWRWRWEEEEEEEEEEEEEEEEEEEEEEEE
[dmdba@localhost opt]$ 

2:控制文件

[dmdba@localhost opt]$ vi a.ctl
[dmdba@dw01:/opt]$ cat a.ctl
LOAD DATA
INFILE 'a.txt'
INTO TABLE TEST.EXT
FIELDS ','

3:创建目录

SQL> create directory extdir as '/opt/'   ;
操作已执行

4:创建外部表

SQL> create external table test.ext(id int,name varchar(20)) from default direct                                                                                                  ory extdir location('a.ctl');
操作已执行
已用时间: 10.564(毫秒). 执行号:403.

5:验证结果:

SQL> select * from test.ext;
select * from test.ext;
[-7082]:外部表数据错误.
已用时间: 6.835(毫秒). 执行号:0.
SQL>

错误原因:

1: 表定义
表定义的test.ext(id int,name varchar(20)),varchar为20,但是a.txt中有一个记录明显超过20。

修改表定义:发现外部表的表定义无法修改

删除重建

SQL> drop table TEST.EXT;
操作已执行
已用时间: 128.774(毫秒). 执行号:708.
SQL> create external table test.ext(id int,name varchar(60)) from default directory extdir location('a.ctl');
操作已执行
已用时间: 39.210(毫秒). 执行号:709.
SQL>

2:a.txt表里面有表头 ,加载的时候需要去掉表头
修改控制文件, 加skip表头

[dmdba@dw01:/opt]$ vi a.ctl
[dmdba@dw01:/opt]$ cat a.ctl
options(
skip=1
)
LOAD DATA
INFILE 'a.txt'
INTO TABLE TEST.EXT
FIELDS ','
[dmdba@dw01:/opt]$


3:检查权限
a.txt 以及 a.ctl均在/opt路径下,赋予dmdba权限

[root@dw01:/opt]$ chown -R dmdba:dinstall /opt
[root@dw01:/opt]$ chmod -R 777 /opt

4:检查创建的目录是否错误:


SQL> create directory extdir as '/opt/'   ;

修改为/opt

SQL>  drop directory extdir;
SQL> create directory extdir as '/opt'   ;

SQL> select * from dba_directories;

行号     OWNER DIRECTORY_NAME DIRECTORY_PATH
---------- ----- -------------- --------------
1          SYS   EXTDIR         /opt

已用时间: 1.155(毫秒). 执行号:804.
SQL>

修改完毕后查询

SQL> select * from test.ext;

行号     ID          NAME
---------- ----------- -------------------------------------
1          1           AAAA
2          2           BBBBB
3          3           DD
4          4           CCCC
5          5           FF
6          6           WERWRWRW
7          7           iiiii
8          8           nnnnn
9          9           SER
10         10          EWDEWRWRWRWRWEEEEEEEEEEEEEEEEEEEEEEEE

10 rows got
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐