CREATE FOREIGN TABLE语句用于创建外部表,当前支持创建MaxCompute、OSS、DLF、Hologres类型的外部表。本文为您介绍CREATE FOREIGN TABLE的用法。

使用限制

仅Hologres V1.3及以上版本支持MaxCompute的三层模型模式(即在原先的Project和Table之间增加了一层Schema的概念),更多描述请参见MaxCompute Schema。如果您想在Hologres中使用MaxCompute的三层模型的项目创建外部表,且您的Hologres版本较低,请您提交工单升级实例。

语法

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type }
  [, ... ]
  ] )
SERVER odps_server
[ OPTIONS ( option 'value' [, ... ] ) ]
参数说明如下表所示。
说明 下表参数说明为创建MaxCompute类型外部表时所需要配置的参数,创建OSS、DLF、Hologres类型的外部表详情请参见创建DLF外部表创建Hologres外部表
参数 描述
SERVER 连接外部数据源的服务器。

您可以直接调用Hologres底层已创建的名为odps_server的外部表服务器。详细原理请参见Postgres FDW

OPTIONS 您需要指定project_nametable_name。如果您MaxCompute的Project是三层模型模式,您仍使用两层模型的写法调用,则会报错,报错样例如下。
failed to import foreign schema:Table not found - table_xxx
  • MaxCompute两层模型:
    • project_name为MaxCompute的项目名称。
    • table_name为需要查询的MaxCompute表名称。
  • MaxCompute三层模型:
    • project_name为MaxCompute的项目名称和Schema名称,格式为odps_project_name#odps_schema_name
    • table_name为需要查询的MaxCompute表名称。
说明 Hologres创建的外部表的字段类型必须与MaxCompute的字段类型一一对应。

示例

  • 直接查询外部表数据。
    Hologres新建外部表后,您可以直接查询MaxCompute外部表数据。示例SQL语句如下。
    --两层模型模式
    CREATE FOREIGN TABLE src_pt(
      id text, 
      pt text) 
    SERVER odps_server 
    OPTIONS(project_name '<odps_project>', table_name '<odps_table>');
    
    --三层模型模式
    CREATE FOREIGN TABLE src_pt(
      id text,
      pt text)
    SERVER odps_server
    OPTIONS(project_name '<odps_project>#<odps_schema>', table_name '<odps_table>');
    
    SELECT * FROM src_pt;

    在Hologres中直接查询MaxCompute外部表数据,详情请参见通过创建外部表加速查询MaxCompute数据

  • 导入外部表并查询数据。
    您可以导入MaxCompute的数据至Hologres,再进行查询。示例语句如下。
    CREATE FOREIGN TABLE src_pt_odps(
      id text,
      pt text) 
    SERVER odps_server 
    OPTIONS (project_name'<odps_project>', table_name'<odps_table>');
    
    BEGIN;
    CREATE TABLE src_pt(
     id text, 
      pt text);
    COMMIT;
    
    INSERT INTO src_pt SELECT * FROM src_pt_odps;

    导入MaxCompute数据至Hologres后,再进行查询,详情请参见使用SQL导入MaxCompute的数据至Hologres

MaxCompute与Hologres的数据类型映射

创建MaxCompute外部表时,MaxCompute与Hologres的数据类型映射请参见MaxCompute与Hologres的数据类型映射
说明
  • DATETIME使用东八区时间作为系统的标准时间。取值范围为0000年1月1日9999年12月31日,精确到毫秒。
  • TIMESTAMPTZ包含时区,取值范围为4713BC294276AD,精确到微秒。
  • 当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。