命令介绍

CREATE FOREIGN TABLE:创建外部表。

说明 当前版本仅支持创建外部表对接MaxCompute。

命令格式

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

参数说明

  • SERVER:连接外部数据源(MaxCompute)的服务器。Hologres已在底层创建,名为odps_server,无需用户再创建,直接使用调用即可。相关创建原理可以参见PostgreSQL FDW
  • OPTIONS需要指定project_name和table_name,其中project_name是MaxCompute的project名,table_name是要查询的MaxCompute表名。
  • 外部表的字段类型必须与MaxCompute的字段类型一一对应。

使用示例

  1. 直接查询外部表

    新建外部表后,可以直接查询外部表,即可快速查询到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;

    关于直接查询MaxCompute数据可以参见MaxCompute数据直接查询

  2. 导入查询

    同时也支持将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数据导入查询,可参见MaxCompute数据导入分析

附录1:MaxCompute与交互式分析的数据类型映射

MaxCompute数据类型与交互式分析(Hologres)数据类型对照表如下:

MaxCompute数据类型 交互式分析数据类型 支持性
string, varchar text 支持
bigint int8 支持
int int4/int 支持
smallint 使用参数set hg_enable_convert_type_for_foreign_table = true 手动定义成int8 支持
tinyint 不支持
float float4/real 支持
double float/float8 支持
datetime timestamptz 支持
decimal numeric 支持
char 不支持 不支持
binary 不支持 不支持

交互式分析当前版本支持的数据类型可以参见数据类型

说明
  1. MaxCompute DATETIME是日期时间类型,使用东八区时间作为系统标准时间。范围从0000年1月1日到9999年12月31日,精确到毫秒 。
  2. 交互式分析支持的是PostgreSQL的timestamptz,带时区,范围从4713BC 到294276AD ,且精确到微秒。
  3. 当MaxCompute表中含有交互式分析不支持的类型的时候, 如果不访问交互式分析不支持字段,其它字段可以正常查询。

附录2:批量创建外部表数据类型的映射关系

使用IMPORT FOREIGN SCHEMA命令语句批量创建外部表时,MaxCompute数据类型与交互式分析数据类型的映射关系为:

MaxCompute数据类型 交互式分析数据类型 支持性
string, varchar text 支持
bigint int8 支持
int int4/int 支持
smallint int2 不支持
tinyint 不支持 不支持
float float4/real 支持
double float/float8 支持
datetime timestamptz 支持
decimal numeric 支持
char 不支持 不支持
binary 不支持 不支持