Hologres は、外部テーブルを作成して MaxCompute データのクエリを高速化することをサポートしています。このメソッドを使用すると、Hologres 環境から MaxCompute に保存されているデータに直接アクセスして分析できるため、クエリ効率が向上し、データ処理フローが簡素化されます。
権限
MaxCompute データのクエリを高速化するには、ユーザーに MaxCompute プロジェクトとテーブルにアクセスするための権限を付与する必要があります。詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。
データ型のマッピング
MaxCompute と Hologres のデータ型は、1 対 1 でマッピングされます。テーブルを作成する際は、「MaxCompute と Hologres 間のデータ型マッピング」をご参照ください。
ソリューションと選択
|
ソリューション |
利用シーン |
技術的特徴 |
|
少数のテーブルの高速化、特定の列のクエリ、スキーマが安定しているテーブルの使用。 |
手動でテーブルを作成し、列とコメントを柔軟に定義。 |
|
|
スキーマまたは DB レベルでのテーブルの一括マッピング。 |
スキーマ全体でテーブルスキーマを自動的に同期。 |
|
|
テーブル数が多く、スキーマの変更 (列の追加、削除、変更) が頻繁に行われる場合。 |
ソーステーブルの変更を自動的に検出。オンデマンドまたはフルロードをサポート。 |
CREATE FOREIGN TABLE を使用したクエリの高速化
CREATE FOREIGN TABLE を使用すると、MaxCompute 外部テーブルを柔軟に作成できます。テーブル名のカスタマイズ、列の選択、コメントの定義が可能です。このセクションでは、CREATE FOREIGN TABLE を使用して、Hologres から非パーティションおよびパーティション化された MaxCompute テーブルのデータをクエリする方法を説明します。
HoloWeb を使用して視覚的にテーブルを作成することもできます。詳細については、「HoloWeb を使用した MaxCompute 外部テーブルの作成」をご参照ください。
例 1:非パーティション MaxCompute テーブルのデータのクエリ
-
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 を MaxCompute プロジェクト名とスキーマ名に設定します。フォーマットは
odps_project_name.odps_schema_nameを使用します。
-
ご利用の MaxCompute プロジェクトが 2層モデルを使用している場合、project_name を MaxCompute プロジェクト名に設定します。
3層モデルの詳細については、「スキーマ操作」をご参照ください。
table_name
クエリ対象の MaxCompute テーブルの名前。
-
-
外部テーブルが作成されたら、Hologres で直接クエリを実行して MaxCompute データを取得できます。以下はサンプル文です。
SELECT * FROM customer LIMIT 10;重要クエリエラーが発生した場合は、実行に使用したアカウントに MaxCompute テーブルに対する Select 権限およびその他の必要な権限があることを確認してください。詳細については、「権限」をご参照ください。
例 2:パーティション化された MaxCompute テーブルのデータのクエリ
-
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 'PER (株価収益率)'; 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株当たり利益 (EPS)'; comment on column public.foreign_ods_enterprise_share_trade_h."bvps" is '1株当たり純資産 (BPS)'; comment on column public.foreign_ods_enterprise_share_trade_h."pb" is 'PBR (株価純資産倍率)'; 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 を使用したクエリの高速化
MaxCompute 外部テーブルをバッチで作成するには、IMPORT FOREIGN SCHEMA メソッドを使用できます。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。
オートロード を使用したクエリの高速化
インスタンス内の多数の外部テーブルを高速化する場合や、ソースの MaxCompute テーブルのスキーマが頻繁に変更される場合は、オートロード機能を使用できます。この機能は、クエリ対象の MaxCompute テーブルまたはすべての MaxCompute テーブルに対して、必要に応じて外部テーブルを自動的に作成します。MaxCompute テーブルのスキーマ変更には、列の削除、列の順序の変更、列のデータ型の変更などの操作が含まれます。外部テーブルのスキーマを手動で変更する必要がないため、クエリ効率が向上します。詳細については、「外部テーブルのオートロード」をご参照ください。