Hologres は外部テーブルを使用して、MaxCompute データへのクエリを高速化します。この方法では、MaxCompute 内のデータに直接アクセスして分析できるため、クエリ効率が向上し、データ処理ワークフローが簡素化されます。
権限
MaxCompute データへのクエリを高速化するには、MaxCompute のプロジェクトとテーブルにアクセスするために必要な権限をユーザーに付与する必要があります。詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。
データ型マッピング
MaxCompute のデータ型は、Hologres のデータ型に 1 対 1 でマッピングされます。テーブルを作成する際は、「MaxComputeとHologres間のデータ型マッピング」をご参照ください。
方法
|
方法 |
ユースケース |
主な特徴 |
|
少数のテーブルの高速化、列のサブセットのクエリ、またはテーブル構造が安定している場合に最適です。 |
列とコメントの定義を柔軟に設定して、手動でテーブルを作成します。 |
|
|
スキーマまたはデータベースレベルで、すべてのテーブルをマッピングする場合に使用します。 |
スキーマ全体のテーブル構造を自動的に同期します。 |
|
|
多数のテーブル、または構造の変更が頻繁に発生するテーブル (列の追加、削除、変更など) に使用します。 |
ソーステーブルの変更を自動的に検出し、オンデマンドロードとフルロードの両方をサポートします。 |
CREATE FOREIGN TABLE を使用したクエリの高速化
CREATE FOREIGN TABLE ステートメントを使用して、MaxCompute の外部テーブルを作成します。このステートメントでは、テーブル名のカスタマイズ、特定の列の選択、コメントの定義が可能です。このセクションでは、CREATE FOREIGN TABLE を使用して、非パーティション化テーブルとパーティションテーブルの MaxCompute データをクエリする方法の例を示します。
HoloWeb を使用して、視覚的にテーブルを作成することもできます。詳細については、「HoloWebでのMaxCompute外部テーブルの作成」をご参照ください。
例 1:非パーティション化テーブルのクエリ
-
MaxCompute で非パーティション化テーブルを作成し、データをインポートします。この例では、MaxCompute のパブリックデータセット
BIGDATA_PUBLIC_DATASET.tpcds_10tのcustomerテーブルをサンプルデータとして使用します。次のコマンドを実行して、サンプルテーブルのデータを表示します。
-- MaxCompute でテーブルをクエリして、データを確認します。 SET odps.namespace.schema=true; SELECT * FROM BIGDATA_PUBLIC_DATASET.tpcds_10t.customer; -
Hologres で、MaxCompute のソーステーブルに対応する外部テーブルを作成します。次にステートメントの例を示します。
SET hg_enable_convert_type_for_foreign_table = true; CREATE FOREIGN TABLE customer ( "c_customer_sk" int8, "c_customer_id" text, "c_current_cdemo_sk" int8, "c_current_hdemo_sk" int8, "c_current_addr_sk" int8, "c_first_shipto_date_sk" int8, "c_first_sales_date_sk" int8, "c_salutation" text, "c_first_name" text, "c_last_name" text, "c_preferred_cust_flag" text, "c_birth_day" int8, "c_birth_month" int8, "c_birth_year" int8, "c_birth_country" text, "c_login" text, "c_email_address" text, "c_last_review_date_sk" text) SERVER odps_server OPTIONS (project_name 'BIGDATA_PUBLIC_DATASET.tpcds_10t', table_name 'customer');パラメータを次の表で説明します。
パラメータ
説明
SERVER
外部サーバー。
Hologres で事前設定されている外部サーバー [odps_server] を使用できます。原理の詳細については、「Postgres FDW」をご参照ください。
project_name
-
MaxCompute プロジェクトで 3層モデルを使用している場合、project_name には、
odps_project_name#odps_schema_nameの形式で MaxCompute プロジェクト名とスキーマ名を指定します。
-
MaxCompute プロジェクトで 2層モデルを使用している場合、project_name は MaxCompute プロジェクト名です。
3層モデルの詳細については、「スキーマ操作」をご参照ください。
table_name
クエリする MaxCompute テーブルの名前。
-
-
外部テーブルを作成した後、Hologres でクエリを実行して、MaxCompute からデータを取得します。次にステートメントの例を示します。
SELECT * FROM customer LIMIT 10;重要クエリエラーが発生した場合は、クエリの実行に使用するアカウントが、MaxCompute テーブルの Select 権限など、必要な権限を持っていることを確認してください。詳細については、「権限」をご参照ください。
例 2:パーティションテーブルのクエリ
-
MaxCompute でパーティションテーブルを準備し、データをインポートします。この例では、MaxCompute のパブリックデータセット
BIGDATA_PUBLIC_DATASET.financeのods_enterprise_share_trade_hテーブルをサンプルデータとして使用します。次のコマンドを実行して、サンプルテーブルのデータを表示します。
-- MaxCompute で特定のパーティションからデータをクエリします。 SET odps.namespace.schema=true; SELECT * FROM BIGDATA_PUBLIC_DATASET.finance.ods_enterprise_share_trade_h WHERE ds = '20170113'; -
Hologres で、MaxCompute のパーティションテーブルに対応する外部テーブルを作成します。次にステートメントの例を示します。
CREATE FOREIGN TABLE public.foreign_ods_enterprise_share_trade_h ( "code" text, "name" text, "industry" text, "area" text, "pe" text, "outstanding" text, "totals" text, "totalassets" text, "liquidassets" text, "fixedassets" text, "reserved" text, "reservedpershare" text, "eps" text, "bvps" text, "pb" text, "timetomarket" text, "undp" text, "perundp" text, "rev" text, "profit" text, "gpr" text, "npr" text, "holders_num" text, "ds" text ) SERVER odps_server OPTIONS (project_name 'BIGDATA_PUBLIC_DATASET#finance', table_name 'ods_enterprise_share_trade_h'); comment on foreign table public.foreign_ods_enterprise_share_trade_h is '株式取引履歴情報'; comment on column public.foreign_ods_enterprise_share_trade_h."code" is '株式コード'; comment on column public.foreign_ods_enterprise_share_trade_h."name" is '名称'; comment on column public.foreign_ods_enterprise_share_trade_h."industry" is '業種'; comment on column public.foreign_ods_enterprise_share_trade_h."area" is '地域'; comment on column public.foreign_ods_enterprise_share_trade_h."pe" is '株価収益率'; comment on column public.foreign_ods_enterprise_share_trade_h."outstanding" is '発行済株式'; comment on column public.foreign_ods_enterprise_share_trade_h."totals" is '総株式数 (万株)'; comment on column public.foreign_ods_enterprise_share_trade_h."totalassets" is '総資産 (万)'; comment on column public.foreign_ods_enterprise_share_trade_h."liquidassets" is '流動資産'; comment on column public.foreign_ods_enterprise_share_trade_h."fixedassets" is '固定資産'; comment on column public.foreign_ods_enterprise_share_trade_h."reserved" is '準備金'; comment on column public.foreign_ods_enterprise_share_trade_h."reservedpershare" is '1株当たり準備金'; comment on column public.foreign_ods_enterprise_share_trade_h."eps" is '1株当たり利益'; comment on column public.foreign_ods_enterprise_share_trade_h."bvps" is '1株当たり純資産'; comment on column public.foreign_ods_enterprise_share_trade_h."pb" is '株価純資産倍率'; comment on column public.foreign_ods_enterprise_share_trade_h."timetomarket" is '上場時期'; comment on column public.foreign_ods_enterprise_share_trade_h."undp" is '未配分利益'; comment on column public.foreign_ods_enterprise_share_trade_h."perundp" is '1株当たり未配分利益'; comment on column public.foreign_ods_enterprise_share_trade_h."rev" is '前年比収益 (%)'; comment on column public.foreign_ods_enterprise_share_trade_h."profit" is '前年比利益 (%)'; comment on column public.foreign_ods_enterprise_share_trade_h."gpr" is '売上総利益率 (%)'; comment on column public.foreign_ods_enterprise_share_trade_h."npr" is '純利益率 (%)'; comment on column public.foreign_ods_enterprise_share_trade_h."holders_num" is '株主数'; -
Hologres で、MaxCompute のパーティションテーブルをクエリします。
-
最初の 10 行のデータをクエリします。次に SQL ステートメントの例を示します。
SELECT * FROM foreign_ods_enterprise_share_trade_h limit 10; -
特定のパーティション内のデータをクエリします。次に SQL ステートメントの例を示します。
SELECT * FROM foreign_ods_enterprise_share_trade_h WHERE ds = '20170113';
重要クエリエラーが発生した場合は、クエリの実行に使用するアカウントが、MaxCompute テーブルの Select 権限など、必要な権限を持っていることを確認してください。詳細については、「権限」をご参照ください。
-
IMPORT FOREIGN SCHEMA を使用したクエリの高速化
IMPORT FOREIGN SCHEMA ステートメントを使用して、複数の MaxCompute 外部テーブルを作成します。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
Auto Load を使用したクエリの高速化
多数の外部テーブルを高速化する必要がある場合、または MaxCompute のソーステーブルのスキーマが頻繁に変更される場合 (列の削除、並べ替え、データ型の変更など)、Auto Load 機能を使用できます。この機能は、オンデマンドロードまたはフルロードで MaxCompute からデータを自動的にロードします。外部テーブルの構造を手動で変更する必要がなくなり、クエリ効率が向上します。詳細については、「外部テーブルのAuto Load」をご参照ください。