CREATE FOREIGN TABLE (SQL on other GaussDB(DWS))
功能描述
在当前数据库创建一个协同分析的外表,用来访问存储在协同分析其他集群数据库中的表。
该外表是只读的,只能用于查询操作,可直接使用SELECT语句查询其数据。
语法格式
1 2 3 4 5 6 7 |
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [ { column_name type_name | LIKE source_table } [, ...] ] ) SERVER server_name OPTIONS ( { option_name ' value ' } [, ...] ) [ READ ONLY ] [ DISTRIBUTE BY {ROUNDROBIN} ] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]; |
参数说明
- IF NOT EXISTS
如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。
- table_name
外表的表名。
取值范围:字符串,要符合标识符的命名规范。
- column_name
外表中的字段名。可以选择多个字段名,中间用“,”隔开。
取值范围:字符串,要符合标识符的命名规范。
不允许在列上创建约束,也不允许创建索引。
- type_name
字段的数据类型。
不允许使用序列当作类型和使用自定义类型。
- SERVER server_name
server名称。允许用户自定义名称。
取值范围:字符串,要符合标识符的命名规范,并且该server必须存在。
- OPTIONS ( { option_name ' value ' } [, ...] )
用于指定外表数据的各类参数,参数类型如下所示。
- table_name:对应关联集群的表名,如果省略此option则认为该值和外表名字一样。
- schema_name:对应关联集群的schema,如果省略此option则认为该值和外表所在的schema一样。
- encoding:对应关联集群的编码,如果省略此option则使用关联集群的数据库编码。
- dataencoding:用于实现GDS互联互通时两个latin1库中GBK数据和UTF8数据的同步。该参数仅8.2.0及以上集群版本支持。
当设置该参数时,encoding表示远端集群数据的真实编码,dataencoding表示为本地执行端的集群数据的真实编码。
假如本地执行端和远端两个数据库分别为latin1_local_db和latin1_remote_db,latin1_remote_db中存储着GBK的数据,当把latin1_remote_db中GBK的数据以UTF8的编码迁移到latin1_local_db时,需要在本地端的集群设置外表的dataencoding为UTF8,encoding为GBK。
- gds_compress
GDS互联互通为了降低网络传输带宽,提供了压缩参数,默认不压缩,当前仅支持设置值为snappy。该参数仅8.2.0及以上集群版本支持。
使用该功能时需要保证本地集群,远端集群,GDS的版本至少在同一版本。
gds_compress与file_type配合使用,当file_type的参数为interconn时,gds需要升级到8.2.0及以上版本,否则会出现ERROR: un-support format报错。
- READ ONLY
显示表是外表为只读。
- DISTRIBUTE BY ROUNDROBIN
显示指定外表为ROUNDROBIN分布方式。
- TO { GROUP groupname | NODE ( nodename [, ... ] ) }
TO GROUP目前不支持使用。TO NODE主要供内部扩容工具使用,一般用户不应使用。
示例
- 创建名称为server_remote的外部服务器,对应的foreign data wrapper为GC_FDW。
1
CREATE SERVER server_remote FOREIGN DATA WRAPPER GC_FDW OPTIONS (address '10.10.0.100:25000,10.10.0.101:25000',dbname 'test', username 'test', password '{password}');
- 在可选项options里面写入了关联集群CN对应的IP地址及端口号。这里推荐使用填写一个LVS的地址或者多个CN的地址。
- 创建名称为region的外表:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
CREATE FOREIGN TABLE region ( R_REGIONKEY INT4, R_NAME TEXT, R_COMMENT TEXT ) SERVER server_remote OPTIONS ( schema_name 'test', table_name 'region', encoding 'gbk' );
- 查看创建的外表region:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
\d+ region Foreign table "public.region" Column | Type | Modifiers | FDW Options | Storage | Stats target | Description -------------+---------+-----------+-------------+----------+--------------+------------- r_regionkey | integer | | | plain | | r_name | text | | | extended | | r_comment | text | | | extended | | Server: server_remote FDW Options: (schema_name 'test', table_name 'region', encoding 'gbk') FDW permission: read only Has OIDs: no Distribute By: ROUND ROBIN Location Nodes: ALL DATANODES