外部表设计
ProtonBase 外部表提供了一种灵活、高效的方式来集成和处理外部数据。它可以简化数据管理、实现实时数据访问、促进数据共享协作,并优化存储成本。通过外表,可以将ProtonBase与外部数据源无缝连接,扩展了数据库的应用场景和价值。
外表主要场景
-
数据集成与迁移
-
通过外表可以将外部数据源(如文件、其他数据库)映射为ProtonBase中的表
-
无需将数据导入到ProtonBase,就可以直接查询和操作外部数据
-
简化了数据集成和迁移的过程,减少了数据转换和同步的工作量
-
-
大数据处理
-
外表可以映射到分布式文件系统(如HDFS)上的大型数据集
-
通过外表,可以使用SQL查询处理和分析海量数据
-
利用ProtonBase的查询优化和并行处理能力,提高大数据处理的效率
-
-
数据共享与协作
-
通过外表,不同的ProtonBase实例可以访问共享的外部数据源
-
多个团队或部门可以基于相同的数据集进行协作和分析
-
简化了数据共享的流程,提高了数据利用率
-
支持外部数据源类型
配置使用
安装扩展
不同的扩展定义了外部数据包装器(Foreign Data Wrapper),分别具备不同类型外部数据源的访问能力,当前支持包括面向文件系统(如阿里云OSS,AWS S3等对象存储)的file_fdw
,面向阿里云MaxCompute的odps_fdw
,面向AWS Glue的glue_fdw
,面向Hive元数据的hive_fdw
。
安装extension,仅需要安装一次,如果已经安装过,可以忽略。
CREATE EXTENSION IF NOT EXISTS <extension_name>;
创建外部服务器(Foreign Server)
使用CREATE SERVER命令创建一个外部服务器,外部服务器关联的,参考语法:
CREATE SERVER <server_name> FOREIGN DATA WRAPPER <fdw_name>
OPTIONS (option 'value' [,]);
-
server_name
为自定义的服务器名称 -
fdw_name
,当前支持的外部数据包装器包括file_fdw
,glue_fdw
,hive_fdw
,odps_fdw
四种。 -
OPTIONS中的
option
会根据外部数据包装器的不同,有不同的参数选项。
创建用户映射(User Mapping)
使用CREATE USER MAPPING命令为本地用户创建一个到外部服务器的映射,语法:
CREATE USER MAPPING FOR <local_user> SERVER <server_name>
OPTIONS (option 'value' [,]);
-
local_user
为本地数据库用户名 -
server_name
为前述步骤创建的外部服务器名称 -
OPTIONS中的
option
会根据外部数据源的不同,有不同的参数选项。
创建单张外表
使用CREATE FOREIGN TABLE命令创建一个外表:
语法
CREATE FOREIGN TABLE <table_name> (
<column_name> <data_type>,
...
)
SERVER <server_name>
OPTIONS (option 'value' [,]);
-
table_name
为外表名称 -
column_name
和data_type
指定外表的列名和数据类型,需要与外部文件的结构匹配,数据类型映射关系参考对应文档 -
server_name
为之前创建的外部服务器名称 -
OPTIONS中的
option
会根据外部数据存储特征的不同,有不同的参数选项。
批量创建和更新外表
使用IMPORT FOREIGN SCHEMA命令可以批量创建和更新外表,适用于有外部元数据管理的数据源,如MaxCompute、Glue等。
语法
IMPORT FOREIGN SCHEMA <foreign_schema>
[LIMIT TO(<table [,table]>)]
FROM SERVER <server_name>
INTO <local_schema>;
-
foreign_schema
外部数据源对应schema -
table
现在需要导入或者更新元数据的表的名字,如果不限制,则导入schema下所有的表,当表较多时,消耗时间更长。 -
server_name
为之前创建的外部服务器名称 -
local_schema
外表元数据保存在本地对应的schema
更多语法参考IMPORT FOREIGN SCHEMA
查询外表
创建外表后,可以像查询普通表一样查询外表,外表的数据来自于关联的外部文件,查询时会动态读取文件内容:
SELECT * FROM <table_name> LIMIT 10;
注意事项
-
确保ProtonBase对外部文件/数据库有读取权限
-
外部文件/数据库的修改不会自动同步到外表,需要重新创建外表或使用
IMPORT FOREIGN SCHEMA
命令刷新 -
对外表的写入操作(INSERT、UPDATE、DELETE)暂时不支持
-
外表的性能取决于外部文件的大小和访问速度,对于大型文件可能需要优化
-
不支持的类型映射:
- parquert的struct类型不能直接映射为JSONB,建议使用文本存储,然后再cast为JSONB类型