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

Hologres:外部テーブルによる MaxCompute クエリの高速化

最終更新日:Aug 21, 2026

Hologres は外部テーブルを使用して、MaxCompute データへのクエリを高速化します。この方法では、MaxCompute 内のデータに直接アクセスして分析できるため、クエリ効率が向上し、データ処理ワークフローが簡素化されます。

権限

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

データ型マッピング

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

方法

方法

ユースケース

主な特徴

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

少数のテーブルの高速化、列のサブセットのクエリ、またはテーブル構造が安定している場合に最適です。

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

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

スキーマまたはデータベースレベルで、すべてのテーブルをマッピングする場合に使用します。

スキーマ全体のテーブル構造を自動的に同期します。

Auto Load を使用した MaxCompute データクエリの高速化

多数のテーブル、または構造の変更が頻繁に発生するテーブル (列の追加、削除、変更など) に使用します。

ソーステーブルの変更を自動的に検出し、オンデマンドロードとフルロードの両方をサポートします。

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

CREATE FOREIGN TABLE ステートメントを使用して、MaxCompute の外部テーブルを作成します。このステートメントでは、テーブル名のカスタマイズ、特定の列の選択、コメントの定義が可能です。このセクションでは、CREATE FOREIGN TABLE を使用して、非パーティション化テーブルとパーティションテーブルの MaxCompute データをクエリする方法の例を示します。

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

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

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

    サンプルテーブルの 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;
  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 には、odps_project_name#odps_schema_name の形式で MaxCompute プロジェクト名とスキーマ名を指定します。

    • MaxCompute プロジェクトで 2層モデルを使用している場合、project_name は MaxCompute プロジェクト名です。

    3層モデルの詳細については、「スキーマ操作」をご参照ください。

    table_name

    クエリする MaxCompute テーブルの名前。

  3. 外部テーブルを作成した後、Hologres でクエリを実行して、MaxCompute からデータを取得します。次にステートメントの例を示します。

    SELECT * FROM customer LIMIT 10;
    重要

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

例 2:パーティションテーブルのクエリ

  1. MaxCompute でパーティションテーブルを準備し、データをインポートします。この例では、MaxCompute のパブリックデータセット BIGDATA_PUBLIC_DATASET.finance の ods_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 '株価収益率',
      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株当たり利益',
      bvps STRING COMMENT '1株当たり純資産',
      pb STRING COMMENT '株価純資産倍率',
      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';
  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 '株価収益率';
    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 '株主数';
  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 を使用したクエリの高速化

IMPORT FOREIGN SCHEMA ステートメントを使用して、複数の MaxCompute 外部テーブルを作成します。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。

Auto Load を使用したクエリの高速化

多数の外部テーブルを高速化する必要がある場合、または MaxCompute のソーステーブルのスキーマが頻繁に変更される場合 (列の削除、並べ替え、データ型の変更など)、Auto Load 機能を使用できます。この機能は、オンデマンドロードまたはフルロードで MaxCompute からデータを自動的にロードします。外部テーブルの構造を手動で変更する必要がなくなり、クエリ効率が向上します。詳細については、「外部テーブルのAuto Load」をご参照ください。