すべてのプロダクト
Search
ドキュメントセンター

Hologres:外部テーブルを使用した MaxCompute データのクエリ高速化

最終更新日:Feb 04, 2026

Hologres は、外部テーブルを作成して MaxCompute データのクエリを高速化することをサポートしています。このメソッドを使用すると、Hologres 環境から MaxCompute に保存されているデータに直接アクセスして分析できるため、クエリ効率が向上し、データ処理フローが簡素化されます。

権限

MaxCompute データのクエリを高速化するには、ユーザーに MaxCompute プロジェクトとテーブルにアクセスするための権限を付与する必要があります。詳細については、「コマンドを使用したユーザー権限の管理」をご参照ください。

データ型のマッピング

MaxCompute と Hologres のデータ型は、1 対 1 でマッピングされます。テーブルを作成する際は、「MaxCompute と Hologres 間のデータ型マッピング」をご参照ください。

ソリューションと選択

ソリューション

利用シーン

技術的特徴

CREATE FOREIGN TABLE を使用した MaxCompute データのクエリ高速化

少数のテーブルの高速化、特定の列のクエリ、スキーマが安定しているテーブルの使用。

手動でテーブルを作成し、列とコメントを柔軟に定義。

IMPORT FOREIGN SCHEMA を使用した MaxCompute データのクエリ高速化

スキーマまたは DB レベルでのテーブルの一括マッピング。

スキーマ全体でテーブルスキーマを自動的に同期。

オートロードを使用した MaxCompute データのクエリ高速化

テーブル数が多く、スキーマの変更 (列の追加、削除、変更) が頻繁に行われる場合。

ソーステーブルの変更を自動的に検出。オンデマンドまたはフルロードをサポート。

CREATE FOREIGN TABLE を使用したクエリの高速化

CREATE FOREIGN TABLE を使用すると、MaxCompute 外部テーブルを柔軟に作成できます。テーブル名のカスタマイズ、列の選択、コメントの定義が可能です。このセクションでは、CREATE FOREIGN TABLE を使用して、Hologres から非パーティションおよびパーティション化された MaxCompute テーブルのデータをクエリする方法を説明します。

HoloWeb を使用して視覚的にテーブルを作成することもできます。詳細については、「HoloWeb を使用した MaxCompute 外部テーブルの作成」をご参照ください。

例 1:非パーティション MaxCompute テーブルのデータのクエリ

  1. MaxCompute で、非パーティションテーブルを作成し、データをインポートします。この例では、サンプルデータとして MaxCompute パブリックデータセット BIGDATA_PUBLIC_DATASET.tpcds_10tcustomer テーブルを使用します。

    このテーブルの DDL 文を表示するにはクリック

    -- MaxCompute パブリックデータセット内のテーブルの DDL
    CREATE TABLE IF NOT EXISTS public_data.customer(
      c_customer_sk BIGINT,
      c_customer_id STRING,
      c_current_cdemo_sk BIGINT,
      c_current_hdemo_sk BIGINT,
      c_current_addr_sk BIGINT,
      c_first_shipto_date_sk BIGINT,
      c_first_sales_date_sk BIGINT,
      c_salutation STRING,
      c_first_name STRING,
      c_last_name STRING,
      c_preferred_cust_flag STRING,
      c_birth_day BIGINT,
      c_birth_month BIGINT,
      c_birth_year BIGINT,
      c_birth_country STRING,
      c_login STRING,
      c_email_address STRING,
      c_last_review_date_sk STRING);

    次のコマンドを実行して、サンプルテーブルのデータを表示します。

    -- MaxCompute でテーブルをクエリしてデータを確認
    SET odps.namespace.schema=true;
    SELECT * FROM BIGDATA_PUBLIC_DATASET.tpcds_10t.customer;

    次のサンプルデータが返されます:image

  2. 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 テーブルの名前。

  3. 外部テーブルが作成されたら、Hologres で直接クエリを実行して MaxCompute データを取得できます。以下はサンプル文です。

    SELECT * FROM customer LIMIT 10;
    重要

    クエリエラーが発生した場合は、実行に使用したアカウントに MaxCompute テーブルに対する Select 権限およびその他の必要な権限があることを確認してください。詳細については、「権限」をご参照ください。

例 2:パーティション化された MaxCompute テーブルのデータのクエリ

  1. MaxCompute で、パーティションテーブルを作成し、データをインポートします。この例では、サンプルデータとして MaxCompute パブリックデータセット BIGDATA_PUBLIC_DATASET.financeods_enterprise_share_trade_h テーブルを使用します。

    このテーブルの DDL 文を表示するにはクリック

    -- パブリックデータセット内のテーブルの DDL
    CREATE TABLE IF NOT EXISTS public_data.ods_enterprise_share_trade_h(
      code STRING COMMENT 'コード',
      name STRING COMMENT '名前',
      industry STRING COMMENT '業種',
      area STRING COMMENT 'エリア',
      pe STRING COMMENT 'PER (株価収益率)',
      outstanding STRING COMMENT '発行済株式',
      totals STRING COMMENT '総株式 (万株)',
      totalassets STRING COMMENT '総資産 (万単位)',
      liquidassets STRING COMMENT '流動資産',
      fixedassets STRING COMMENT '固定資産',
      reserved STRING COMMENT '準備金',
      reservedpershare STRING COMMENT '1株当たり準備金',
      eps STRING COMMENT '1株当たり利益 (EPS)',
      bvps STRING COMMENT '1株当たり純資産 (BPS)',
      pb STRING COMMENT 'PBR (株価純資産倍率)',
      timetomarket STRING COMMENT '上場日',
      undp STRING COMMENT '未分配利益',
      perundp STRING COMMENT '1株当たり未分配利益',
      rev STRING COMMENT '収益 前年同期比 (%)',
      profit STRING COMMENT '利益 前年同期比 (%)',
      gpr STRING COMMENT '売上総利益率 (%)',
      npr STRING COMMENT '純利益率 (%)',
      holders_num STRING COMMENT '株主数') 
      PARTITIONED BY (ds STRING) STORED AS ALIORC TBLPROPERTIES ('comment'='データインポート日');

    次のコマンドを実行して、サンプルテーブルのデータを表示します。

    -- MaxCompute の特定のパーティションのデータをクエリ
    SET odps.namespace.schema=true;
    SELECT * FROM BIGDATA_PUBLIC_DATASET.finance.ods_enterprise_share_trade_h WHERE ds = '20170113';

    次のサンプルデータが返されます:image

  2. 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 '株主数';
  3. 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 テーブルのスキーマ変更には、列の削除、列の順序の変更、列のデータ型の変更などの操作が含まれます。外部テーブルのスキーマを手動で変更する必要がないため、クエリ効率が向上します。詳細については、「外部テーブルのオートロード」をご参照ください。