达梦数据库 创建外部表 [-7082]:外部表数据错误.
外部表,是指不存在于数据库中的表。通过向达梦提供描述外部表的元数据,可以把一个操作系统文件当成一个只读的数据库表,就像这些数据存储在一个普通数据库表中一样来进行访问。外部表的数据存储在操作系统中,是操作系统文件,建立外部表的时候,不会产生段,页簇等存储结构,只有与表相关的定义放在数据字典中。在数据库中不能对外部表的内容进行修改,不能对外部表建立主键,索引,外键。不需要将外部表的数据载入到数据库中来
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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)