基于Common Table链路访问MaxCompute

HologresV3.0.38版本开始,支持MaxCompute加速链路全新升级,该链路称为Common Table链路。本文为您介绍如何通过Common Table链路访问MaxCompute。

功能介绍

Common Table链路通过C++ Native读取 MaxCompute中的数据,相比现在的SQE/HQE链路具备如下优势:

说明

已开通表示支持,未开通表示不支持。

对比项

SQE/HQE链路

Common Table链路

性能

非常强,相比SQE/HQE性能提升33%,相较于基于开放存储StorageAPI读性能提升200%以上。

动态脱敏表

需要二次设置规则。

可以继承MaxCompute中设置的脱敏规则,查询到的数据和使用MaxCompute查询结果一致。

Schema Evolution

不支持直读文件,性能稍差。

支持直读文件,性能强。

落盘加密表

  • 支持使用KMS KEY加密的表。

  • 不支持使用Default KEY加密的表。

  • 支持使用KMS KEY加密的表。

  • 支持使用Default KEY加密的表。

ACID 1.0 表

未开通

已开通

PK Delta Table

未开通

已开通

Append Delta Table

未开通

已开通

权限说明

  • 通过Common Table链路访问基于Foreign TableExternal Database方式创建的MaxCompute外部表,需要具备以下权限。为用户授予访问MaxCompute项目和表的权限,详情请参见通过命令管理用户权限

    为了对齐MaxCompute中查询数据的权限,自Hologres V4.0开始权限校验做了如下变更。

    MaxCompute外部表创建方式

    操作

    需具备的MaxCompute权限(V3.0、V3.1V3.2版本)

    需具备的MaxCompute权限(V4.0及以上版本)

    Foreign Table方式

    IMPORT FOREIGN SCHEMA批量创建MaxCompute外部表

    Describe、List

    Describe、List

    查询数据

    Describe、Select

    Select

    External Database方式

    查看External Table的元数据

    Describe

    Describe

    查询数据

    Describe、Select

    Select

  • Hologres当前仅支持读取MaxCompute Delta Table的最新快照。

  • 当前暂不支持从Hologres侧回写数据至MaxCompute Delta Table。

功能更新

功能说明

支持版本

支持查询 MaxCompute Append Delta Table

>= 3.0.40

>= 3.1.10

>=3.2.0

>=4.0.0

支持查询 MaxCompute DeltaTable 使用 spillRead,用于解决 未Spill 的文件过多时,查询报错

MaxCompute csdk open reader failed: storage/formats/orcfile/change_log_reader_util.cpp(255): InvalidArgument: ODPS-0010000:InvalidArgument:Need spill read but TmpDir or TmpCapability no specified.

>= 3.0.41

>= 3.1.10

>= 3.2.0

>= 4.0.0

支持读取带 Defaul Vaule 值的 MaxCompute 表

>=3.0.40

>= 3.1.10

>=3.2.0

>=4.0.0

支持 Auto Split Size ,可以根据实例规格,自动判断 Split Size,详细使用方案见下文

>=3.1.33

>=3.2.0

>=4.0.0

支持查询 TIMESTAMP_NTZ 类型

>= 3.0.41

>= 3.1.10

>=3.2.0

>=4.0.0

支持 Delta Table 的 Clustering Key、Primary Key 等属性的等值过滤下推,提升过滤效果和查询性能

>= 4.0.6

开启方式

您可以根据具体的使用场景选择合适的开启方式。

  • SESSION级别

    -- SESSION级别开启,需要和查询/DML一起执行
    SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';
  • 数据库级别

    -- 数据库级别开启
    ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';
  • 实例级别

    -- 实例级别开启
    ALTER ROLE ALL SET hg_experimental_external_catalog_routing = 'odps:common_table,dlf:hqe';

关闭方式

  • SESSION级别

    -- SESSION级别关闭,需要和查询/DML一起执行
    SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';
  • 数据库级别

    -- 数据库级别关闭
    ALTER DATABASE <database name> SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';
  • 实例级别

    -- 实例级别关闭
    ALTER ROLE ALL SET hg_experimental_external_catalog_routing = 'odps:holo_native,dlf:hqe';

查看当前的使用链路

  • 您可使用如下SQL查看,若返回结果显示odps:common_table,dlf:hqe,则表示当前使用的Common Table链路。

    SHOW hg_experimental_external_catalog_routing;
  • 对于历史查询可通过Query日志查看query_extinfo字段,若出现driver:CommonTable ,则表示使用的Commen Table链路。

Auto Split Size

Auto Split Size功能参数默认值为off,即默认为关闭,可以根据实际场景按需开启或关闭,具体设置方法如下:

开启Auto Split Size

V4.0及以上版本

  • SESSION级别开启

    -- session 级别开启
    SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';
  • 数据库级别开启

    -- 数据库级别开启
    ALTER DATABASE <database name> SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';
  • 实例级别开启

    -- 实例级别开启
    ALTER ROLE ALL SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'on';

V4.0以下版本

  • SESSION级别开启

    -- session 级别开启
    SET hg_experimental_enable_common_table_auto_split_size = 'on';
  • 数据库级别开启

    -- 数据库级别开启
    ALTER DATABASE <database name> SET hg_experimental_enable_common_table_auto_split_size = 'on';
  • 实例级别开启

    -- 实例级别开启
    ALTER ROLE ALL SET hg_experimental_enable_common_table_auto_split_size = 'on';

关闭Auto Split Size

V4.0及以上版本

  • SESSION级别关闭

    -- session 级别关闭
    SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';
  • 数据库级别关闭

    -- 数据库级别关闭
    ALTER DATABASE <database name> SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';
  • 实例级别关闭

    -- 实例级别关闭
    ALTER ROLE ALL SET hg_experimental_enable_maxcompute_sdk_auto_split_size = 'off';

V4.0以下版本

  • SESSION级别关闭

    -- session 级别关闭
    SET hg_experimental_enable_common_table_auto_split_size = 'off';
  • 数据库级别关闭

    -- 数据库级别关闭
    ALTER DATABASE <database name> SET hg_experimental_enable_common_table_auto_split_size = 'off';
  • 实例级别关闭

    -- 实例级别关闭
    ALTER ROLE ALL SET hg_experimental_enable_common_table_auto_split_size = 'off';