このトピックでは、Hologres から MaxCompute Delta テーブルにアクセスする方法について説明します。
はじめに
Hologres V3.0.22 以降では、MaxCompute Delta テーブルからデータを読み取ることができます。Delta テーブルは、MaxCompute でサポートされている増分データテーブルです。数分でのデータインポートをサポートし、基盤となるレイヤーで AliORC ファイル形式を使用し、UPSERT セマンティクスをサポートし、Change Data Capture(CDC)形式で増分データの読み取りと書き込みを可能にします。詳細については、「Delta テーブルの概要」をご参照ください。
前提条件
Hologres インスタンスが購入済みであること。詳細については、「Hologres インスタンスを購入する」をご参照ください。
MaxCompute がアクティブ化されており、MaxCompute プロジェクトが作成されていること。MaxCompute のアクティブ化方法の詳細については、「MaxCompute をアクティブ化する」をご参照ください。
MaxCompute プロジェクトおよびテーブルにアクセスするための権限が付与されていること。詳細については、「コマンドを使用してユーザー権限を管理する」をご参照ください。
使用上の注意
Hologres では、MaxCompute Delta テーブルの最新のスナップショットのみを読み取ることができます。
Hologres から MaxCompute Delta テーブルにデータを書き戻すことはできません。
MaxCompute Delta テーブルにアクセスするには、GUC パラメーターを設定する必要があります。MaxCompute Delta テーブルのクエリに使用する SQL 文と共に、セッションレベルで次のコマンドを実行することをお勧めします。
SET hg_experimental_external_catalog_routing = 'odps:common_table';
MaxCompute Delta テーブルを使用する
MaxCompute 側で Delta テーブルを作成する
次のいずれかの方法を使用してテーブルを作成します。
[DataWorks] コンソールで MaxCompute データソースを追加します。次に、テーブルを作成します。詳細については、「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 側で Delta テーブルにデータを書き込む
次のいずれかの方法を使用して、MaxCompute 側で Delta テーブルにデータを書き込みます。
INSERT INTO 文または INSERT OVERWRITE 文を実行して、データをバッチで書き込みます。詳細については、「テーブルまたは静的パーティションにデータを挿入または上書きする(INSERT INTO および INSERT OVERWRITE)」をご参照ください。
Flink を使用して、ほぼリアルタイムでデータを書き込みます。詳細については、「Flink を使用して Delta テーブルにデータを書き込む」をご参照ください。
データをバッチで書き込む 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 側で外部データソースマッピングを作成します。
CREATE EXTERNAL DATABASE 文を使用して、指定した MaxCompute プロジェクト内のすべてのテーブルをマッピングします。詳細については、「CREATE EXTERNAL DATABASE」をご参照ください。
外部テーブルを作成して、特定のスキーマまたはテーブルをマッピングします。詳細については、「IMPORT FOREIGN SCHEMA」および「CREATE FOREIGN TABLE」をご参照ください。
CREATE EXTERNAL DATABASE 文の例:
CREATE EXTERNAL DATABASE ext_database_mc WITH
metastore_type 'maxcompute'
mc_project 'mc_3_layer_project'
comment 'mc three layer project';外部データベース内のすべてのスキーマをクエリします。
SELECT * FROM hologres.hg_external_schemas('ext_database_mc');外部データベース内のすべてのテーブルをデフォルトモードでクエリします。
SELECT * FROM hologres.hg_external_tables('ext_database_mc', 'default');
Hologres 側で Delta テーブルからデータをクエリする
Hologres 側で Delta テーブルからデータをクエリするには、次の SQL 文を実行します。
SET hg_experimental_external_catalog_routing = 'odps:common_table';
SELECT * FROM ext_database_mc.mc_schema_name.mf_dt;