CREATE FOREIGN TABLE

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

使用限制

仅Hologres V1.3及以上版本支持MaxCompute的三层模型模式(即在原先的Project和Table之间增加了一层Schema的概念),更多描述请参见Schema操作。如果您想在Hologres中使用MaxCompute的三层模型的项目创建外部表,且您的Hologres版本较低,请您使用自助升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?

语法

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type }
  [, ... ]
  ] )
SERVER odps_server
[ OPTIONS ( option 'value' [, ... ] ) ]

参数说明如下表所示。

参数

描述

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外部表数据,详情请参见基于Foreign Table加速查询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导入

MaxCompute与Hologres的数据类型映射

创建MaxCompute外部表时,MaxCompute与Hologres的数据类型映射请参见MaxCompute与Hologres的数据类型映射

说明
  • DATETIME使用东八区时间作为系统的标准时间。取值范围为0000年1月1日9999年12月31日,精确到毫秒。

  • TIMESTAMPTZ包含时区,取值范围为4713BC294276AD,精确到微秒。

  • 当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。