南大通用 GBase 8s 中的外部表创建与应用

原文链接: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技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

相关推荐
oscar9991 分钟前
Spring AI 之工具调用
数据库·人工智能·spring
·心猿意码·7 分钟前
MySQL中SELECT查询的执行顺序
数据库·mysql
风景_fengjing1 小时前
ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
服务器·数据库·oracle
HGW6891 小时前
基于MyBatis插件实现动态表名解决多环境单一数据库问题
数据库·mybatis
SEO-狼术1 小时前
ComponentOne Studio Enterprise 2025
数据库
睡觉待开机1 小时前
2. 库的操作
数据库·oracle·dba
才华是浅浅的耐心2 小时前
Facebook用户信息爬虫技术分析与实现详解
数据库·爬虫·python·facebook
Python之栈2 小时前
Python 隐藏法宝:双下划线 _ _Dunder_ _
数据库·windows·microsoft
heart000_111 小时前
MySQL事务与锁机制详解:确保数据一致性的关键【MySQL系列】
数据库·mysql
一眼青苔12 小时前
MySQL 如何判断某个表中是否存在某个字段
数据库·mysql