原文链接:www.gbase.cn/community/p...
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
本文将详细介绍 GBase 8s 中外部表的创建方法、应用场景以及一些实用的操作示例,希望能帮助数据库用户和开发人员更好地理解和使用这一功能,提升数据处理效率。
概述
"外部表"(External Table)通常是指一种特殊类型的表,可以理解为数据库表与数据文件的交互表,它允许数据库管理员访问存储在数据库之外的数据文件。外部表主要用于读取操作,外部表本身并不支持直接的插入、删除或更新操作。
创建外部表语法
创建外部表的基本语法图如下:

列定义语法图如下:

创建外部表
在 GBase 8s 中,创建外部表的基本语法如下:
sql
create external table ext_01(id int,col1 varchar(100)) using (datafiles('DISK:\tmp\file.txt'),format "delimited",delimiter "|");
- DATAFILES:用于指定数据文件位置,支持多种格式如txt、unl、dat等。
- FORMAT:定义如何读取外部文件的数据,delimited(分隔符格式)、Fixed(固定宽度格式)。
- DELIMITER:指定分隔符格式,|、&、@等。
除以上常用参数,还有REJECTFILE、DBMONEY等,可按需使用。
* file.txt文件数据变化时,外部表ext_01同步数据变化。
* 无法直接向ext_01插入、修改、更新数据,支持insert select向外部表导入数据表数据。
* 每次执行向外部表导入数据表数据时,进行覆盖导入而不是追加。
示例1:create external table......
sql
--数据准备
CREATE TABLE Users (
id INT AUTO_INCREMENT,
age INT NOT NULL,
name VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO Users (id, age, name) VALUES (1, 25, '张三');
INSERT INTO Users (id, age, name) VALUES (2, 30, '李四');
INSERT INTO Users (id, age, name) VALUES (3, 22, '王五');
--创建外部表exttab
> create external table exttab
(id int,
col1 varchar(100))
using (
datafiles('DISK:file.txt'),
format "delimited",
delimiter "|");
Table created.
Elapsed time: 0.033 sec
--向file.txt卸载数据
insert into extab select id,name from users;
--查看extab数据
> select * from ext_01;
ID 2
COL1 李四
ID 3
COL1 王五
ID 1
COL1 张三
3 row(s) retrieved.
--查看file.txt文件数据
[root@centos78 server]# cat file.txt
2|李四|
3|王五|
1|张三|
示例2:select into external table
sql
--创建外部表并导入users表数据
> select * from users into external tab0001_ext using(datafiles('DISK:/tmp/file.unl'),format "delimited",delimiter "|");
3 row(s) retrieved into table.
Elapsed time: 0.045 sec
--查看外部表数据
> select * from tab0001_ext;
id 2
age 30
name 李四
id 3
age 22
name 王五
id 1
age 25
name 张三
3 row(s) retrieved.
Elapsed time: 0.052 sec
--查看导出的文件数据
[root@centos78 server]# cat /tmp/file.unl
2|30|李四|
3|22|王五|
1|25|张三|
示例3:基于已有表创建外部表,SAMEAS 。
- 固定格式的文件不能使用 SAMEAS 子句。
- 新定义的表继承源表的所有的列名称及其数据类型。
- 数据库表中列上的检查约束不会为外部表继承,但NOT NULL 约束会被外部表继承。
sql
> CREATE TABLE Employees (
deptid INT PRIMARY KEY,
deptno VARCHAR(20) NOT NULL,
deptname VARCHAR(100) NOT NULL,
empname VARCHAR(100) NOT NULL,
CONSTRAINT chk_empname CHECK (empname IS NOT NULL)
);
--基于源表Employees 创建外部表
> create external table ext_tab
sameas Employees
using (
datafiles('DISK:/tmp/file2.txt'),
format "delimited",
delimiter "|");> > > > >
Table created.
Elapsed time: 0.035 sec
> desc ext_tab;
Column name Type Nulls
DEPTID INTEGER no
DEPTNO VARCHAR(20,0) no
DEPTNAME VARCHAR(100,0) no
EMPNAME VARCHAR(100,0) no
Elapsed time: 0.161 sec
外部表的优势
1. 高效的数据交互: 外部表能够实现数据库与外部数据文件之间的快速交互,提高了数据处理的效率,减少了数据传输的时间和成本。
2. 节省存储空间: 与将外部数据直接导入到数据库中相比,外部表不需要在数据库中存储数据副本,从而节省了存储空间,降低了存储成本。
3. 灵活性高: 外部表支持多种数据文件格式和读取方式,用户可以根据实际需求灵活地选择合适的数据文件格式和分隔符,满足不同的应用场景。
4. 易于管理和维护: 通过外部表,用户可以方便地管理和维护外部数据文件,无需直接操作数据库,降低了管理难度和维护成本。
以上外部表创建的简单介绍,感谢您对 GBase 8s 的关注和支持,如果您在使用过程中遇到任何问题或需要进一步的帮助,欢迎随时与我们联系。
原文链接:www.gbase.cn/community/p...
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。