本文为您介绍通过Hologres如何访问MaxCompute Delta Table。
功能介绍
从Hologres v3.0.38版本开始,支持读取MaxCompute Delta Table。Delta Table是MaxCompute推出的增量数据表格式,支持分钟级数据导入,底层使用AliORC作为文件格式,支持UPSERT语义,并能够提供按照CDC(Change Data Capture)格式读写增量数据,详情请参见基本概念。
前提条件
- 已开通Hologres实例,详情请参见购买Hologres。 
- 已开通MaxCompute并创建项目,详情请参见开通MaxCompute。 
- 已为用户授予访问MaxCompute项目和表的权限,详情请参见通过命令管理用户权限。 
注意事项
- Hologres当前仅支持读取MaxCompute Delta Table的最新快照。 
- 暂不支持从Hologres侧回写MaxCompute Delta Table。 
- 访问MaxCompute Delta Table需要添加GUC ,建议Session级别开启,在查询MaxCompute Delta Table的SQL前一起执行: - SET hg_experimental_external_catalog_routing = 'odps:common_table';
使用说明
MaxCompute侧创建Delta Table
您可以通过以下方式完成表的创建:
- 通过使用DataWorks平台,绑定MaxCompute数据源后,再执行表的创建。 
- 通过本地客户端使用MaxCompute执行表的创建。 
SQL命令如下。
CREATE TABLE IF NOT EXISTS mf_dt (pk BIGINT NOT NULL PRIMARY KEY, 
                  val BIGINT NOT NULL) 
                  PARTITIONED BY (dd STRING, hh STRING) 
                  tblproperties ("transactional"="true");MaxCompute侧写入数据
MaxCompute目前支持使用以下两种方式进行数据写入:
- 使用INSERT INTO或INSERT OVERWRITE方式批式写入数据,详见插入或覆写数据(INSERT INTO | INSERT OVERWRITE)。 
- 使用Flink近实时写入,详见使用Flink写入数据到Delta Table。 
本文以批式写入数据为例,SQL命令如下。
-- 使用insert into向mf_dt表目标分区中追加数据
INSERT INTO TABLE mf_dt PARTITION(dd='01', hh='01') 
            VALUES (3, 30), (4, 4), (5, 5);
-- 向mf_dt表dd='01'和hh='01'的分区中插入测试数据
INSERT OVERWRITE TABLE mf_dt PARTITION (dd='01', hh='01') 
                 VALUES (1, 1), (2, 2), (3, 3);Hologres侧创建外部数据源映射
Hologres支持两种方式创建外部数据源映射:
- 基于External Database整库映射MaxCompute指定Project下的所有表,详见CREATE EXTERNAL DATABASE。 
- 通过Foreign Table的方式自定义需要映射的指定Schema和表,详见IMPORT FOREIGN SCHEMA和CREATE FOREIGN TABLE。 
本文以CREATE EXTERNAL DATABASE为例,SQL命令如下。
CREATE EXTERNAL DATABASE ext_database_mc WITH 
  metastore_type 'maxcompute'
  mc_project 'mc_3_layer_project' 
  comment 'mc three layer project';- 查询外部数据库中的所有Schema。 - SELECT * FROM hologres.hg_external_schemas('ext_database_mc');
- 查询外部数据库中default模式下的所有表。 - SELECT * FROM hologres.hg_external_tables('ext_database_mc', 'default');
Hologres侧查询Delta Table
查询MaxCompute中的Delta Table数据,SQL命令如下。
SET hg_experimental_external_catalog_routing = 'odps:common_table';
SELECT * FROM ext_database_mc.mc_schema_name.mf_dt;