本文為您介紹通過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;