目录
一、环境信息
二、概念
三、注意点
四、支持数据源和数据格式
五、实操
1、创建外部表
(1)语法树
(2)示例
2、查看外部表
(1)语法树
(2)示例
3、查看外部表详细
(1)语法树
(2)示例
4、查看外部表定义
(1)语法树
(2)示例
5、删除外部表
(1)语法树
(2)示例
一、环境信息
名称 | 值 |
CPU | Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz |
操作系统 | CentOS Linux release 7.9.2009 (Core) |
内存 | 4G |
逻辑核数 | 4 |
GCDW版本 | 9.8.0.6.17 |
集群节点1IP | 192.168.142.10 |
二、概念
外部表与数据库内部表相区别,该表数据存储在数据库以外,数据库内仅有该表的表结构。 用户可创建外部表,指定外部表的表结构、外部表的数据源以及数据文件的格式。 GCDW 数据库系统通过外部表的定义识别外部表信息,能够从所定义的数据源按照定义的数据格式读取数据或者写入数据,且写入数据仅支持追加写。
三、注意点
1. 目前仅支持创建、删除外部表。
2. 不支持 alter 修改外部表。
3. 外部表不支持 create table ...like 语句和 create table ...as select 语句。
4. 不支持基于外部表创建视图。
5. 不支持自增列、脱敏列、加密列、tablespace属性。
四、支持数据源和数据格式
名称 | 描述 |
支持数据源 | HDFS |
S3 | |
HTTP | |
FTP | |
SFTP |
名称 | 描述 |
支持数据文件格式 | orc |
parquet | |
avro | |
txt | |
csv | |
json |
五、实操
1、创建外部表
(1)语法树
CREATE [LOAD] [READ|WRITE] EXTERNAL TABLE [IF NOT EXISTS] [database_name.]table_name(column_definition[,column_definition],...)
LOCATION 'location_url'
INFORMAT [options]
OUTFORMAT [options]
名称 | 描述 |
LOAD | 可选参数,加LOAD关键字表示采用加载方式查询外部表,不加LOAD关键字表示采用文件切分方式查询外部表。 1.加载方式查询外部表说明:select 外部表时,先将外部表数据加载入库,同时会在库内表最后添加一列bigint类型fileid列,用来标识一行数据属于哪个文件,加载完成后再做库内查询。如果查询时该外部表已经被加载在库内了,就检查更新库内表,load增量或者delete后load,使库内数据与外部表数据一致后,再进行查询。加载阶段表上有互斥锁。这种方式适用于外部表文件格式为不包含元数据的文本文件(csv、txt等)的场景。 2.文件切分方式查询外部表说明:select外部表时,先获取外部表文件列表,按最小单位切分得到文件块列表,下发不同的节点读取,获取元数据信息构建BSI(DC的统计信息),然后再从数据文件读取数据到文件块级缓存和DC级缓存(此阶段锁为文件块锁或者DC锁),最后从DC缓存中读取查询数据并返回。这种方式适用于外部表文件格式包含元数据的数据文件,如orc、parquet等场景。 |
READ|WRITE | 该参数为可选参数,外部表具有读写标志,默认为 read 外部表,即只读外部表;也可定义为 write 外部表,即该外部表可读、可写。 |
IF NOT EXISTS | 该参数为可选参数,用户可以使用关键字 IF NOT EXISTS 创建表,如果表已经存在,系统将报告 WARNING 信息 |
database_name | 该参数为可选参数,指定数据库后,在此数据库下创建表。如果没有显示指定database_name 参数,创建的表隶属于 USE database_name 后的数据库中的表。 |
column_definition | column_name data_type [NOT NULL|NULL] [DEFAULT default_value] 列的类型为8a/GCDW支持的类型,如数值型、字符型、日期时间型。不支持TEXT、LONGTEXT、BLOB、LONTBLOB、BINARY、VARBINARY类型。 |
LOCATION | 指定数据源的位置。只读数据源可指定为路径或者具体的文件。指定路径时,将读取该路径下的全部文件。可写外部源只能指定为路径,否则建表时报错。对于外部表location相同情况下,通过可写外部表成功写入的数据,其他外部表可以查看到该数据内容。 示例: LOCATION 's3vs://AWSAccessKeyId:AWSSecretKey@bucket.s3-aws-region.amazonaws.com/region/key' LOCATION 'hdp://gbase@127.0.0.1:50070/data/' LOCATION 'http://gbase:gbase@127.0.0.1/data/a.tbl' LOCATION 'ftp://gbase:gbase@127.0.0.1/data/a.tbl' LOCATION 'sftp://gbase:gbase@127.0.0.1/data/a.tbl' |
INFORMAT | 参数含义同普通表加载的参数含义 指定读外部表的配置信息。 |
OUTFORMAT | 参数含义同普通表加载的参数含义 指定写外部表的配置信息,创建只读外部表也必须具有OUTFORMAT关键字。 |
(2)示例
gbase> CREATE WRITE EXTERNAL TABLE ssbm_external.customer(-> "C_CUSTKEY" int(11) DEFAULT NULL,-> "C_NAME" varchar(25) NOT NULL,-> "C_ADDRESS" varchar(40) NOT NULL,-> "C_CITY" varchar(10) NOT NULL,-> "C_NATION" varchar(15) NOT NULL,-> "C_REGION" varchar(12) NOT NULL,-> "C_PHONE" varchar(15) NOT NULL,-> "C_MKTSEGMENT" varchar(10) NOT NULL-> ) LOCATION 'sftp://gbase:gbase@192.168.142.10//home/gbase/G8aFile/customer/*' -> INFORMAT DATA_FORMAT 3 FIELDS TERMINATED BY '|' OUTFORMAT FIELDS TERMINATED BY '|';
Query OK, 0 rows affected (Elapsed: 00:00:00.36)
2、查看外部表
(1)语法树
show tables;
(2)示例
gbase> show tables;
+-------------------------+
| Tables_in_ssbm_external |
+-------------------------+
| customer |
| customer_copy |
+-------------------------+
2 rows in set (Elapsed: 00:00:00.01)
3、查看外部表详细
(1)语法树
show full tables;
(2)示例
gbase> show full tables;
+-------------------------+----------------+
| Tables_in_ssbm_external | Table_type |
+-------------------------+----------------+
| customer | EXTERNAL TABLE |
| customer_copy | EXTERNAL TABLE |
+-------------------------+----------------+
2 rows in set (Elapsed: 00:00:00.01)
4、查看外部表定义
(1)语法树
show create table DB.TABLE_NAME;
(2)示例
gbase> show create table ssbm_external.customer;
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| customer | CREATE WRITE EXTERNAL TABLE "customer" ("C_CUSTKEY" int(11) DEFAULT NULL,"C_NAME" varchar(25) NOT NULL,"C_ADDRESS" varchar(40) NOT NULL,"C_CITY" varchar(10) NOT NULL,"C_NATION" varchar(15) NOT NULL,"C_REGION" varchar(12) NOT NULL,"C_PHONE" varchar(15) NOT NULL,"C_MKTSEGMENT" varchar(10) NOT NULL
) LOCATION 'sftp://gbase:gbase@192.168.142.10//home/gbase/G8aFile/customer/*'INFORMAT CHARSET 'utf8' DATA_FORMAT 3 FILE_FORMAT UNDEFINED FIELDS TERMINATED BY '|'OUTFORMAT FIELDS TERMINATED BY '|' ESCAPED BY '\\' LINES STARTING BY '' WRITEMODE BY NORMAL ENGINE=EXPRESS DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' |
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (Elapsed: 00:00:00.00)
5、删除外部表
(1)语法树
DROP TABLE DB.TABLE_NAME;
(2)示例
gbase> DROP TABLE ssbm_external.customer;
Query OK, 0 rows affected (Elapsed: 00:00:00.26)