CREATE FOREIGN TABLE语句用于创建外部表。本文为您介绍CREATE FOREIGN TABLE的用法。

使用限制

Hologres仅支持创建MaxCompute外部表。

语法

CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
  { column_name data_type }
  [, ... ]
  ] )
SERVER odps_server
[ OPTIONS ( option 'value' [, ... ] ) ]
参数说明如下表所示。
参数 描述
SERVER 连接MaxCompute外部数据源的服务器。

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

OPTIONS 您需要指定project_nametable_name
  • project_name为MaxCompute的项目名称。
  • 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>');
    
    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数据类型 是否支持映射
  • STRING
  • VARCHAR
TEXT 支持
BIGINT INT8 支持
INT
  • INT4
  • INT
支持
SMALLINT
  • INT2
  • INT8
说明 执行 set hg_enable_convert_type_for_foreign_table = true定义数据类型为INT8。
不支持
TINYINT 不支持
FLOAT
  • FLOAT4
  • REAL
支持
DOUBLE
  • FLOAT
  • FLOAT8
支持
BOOLEAN BOOL 支持
DATETIME TIMESTAMPTZ 支持
DECIMAL NUMERIC 支持
CHAR 不支持
BINARY 不支持
说明
  • DATETIME使用东八区时间作为系统的标准时间。取值范围为0000年1月1日9999年12月31日,精确到毫秒。
  • TIMESTAMPTZ包含时区,取值范围为4713BC294276AD,精确到微秒。
  • 当MaxCompute数据表中含有Hologres不支持的类型字段时,如果Hologres不访问该字段,则可以正常查询所支持的类型字段。