外表设计(Beta)

外部表设计

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_fdwglue_fdwhive_fdwodps_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_namedata_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类型