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

Hologres:EXTERNAL_FILES 関数

最終更新日:Feb 06, 2026

Hologres V4.1 以降では、外部テーブルを作成せずに Object Storage Service (OSS) に保存された構造化データファイルを直接クエリ・インポート・エクスポートできます。このトピックでは、前提条件、構文、パラメーター、使用例、および制限事項について説明します。

概要

EXTERNAL_FILES 関数を使用すると、外部テーブルを作成せずに OSS 内の構造化データファイルをクエリ・インポート・エクスポートできます。以下のシナリオに対応しています。

  • データのクエリ:OSS 内の CSV、Parquet、ORC ファイルをクエリします。

  • データのインポート:OSS から Hologres の内部テーブルへデータをインポートします。

  • データのエクスポート:Hologres テーブルから OSS へデータをエクスポートします。

前提条件

バージョン要件

ご利用の Hologres インスタンスは、V4.1 以降のバージョンである必要があります。それ以前のバージョンをご利用の場合は、スペックアップしてください。詳細については、「Instance upgrades」をご参照ください。

権限の構成

EXTERNAL_FILES を使用できるのは RAM ユーザーまたは Alibaba Cloud アカウントのみです。カスタムアカウントはサポートされていません。EXTERNAL_FILES を使用する前に、以下の手順を完了してください。EXTERNAL_FILES は RAM ロール経由で OSS にアクセスします。まず RAM ロールを作成し、Hologres サービスに付与します。その後、そのロールに OSS 権限を付与します。

ロールの作成

  • RAM Roles で RAM コンソールにログインします。[Roles] ページで、[Create Role] をクリックします。

  • ダイアログボックスで、[Trusted Entity Type] を [Cloud Service]、[Trusted Entity] を [Real-time Data Warehouse Hologres] に設定します。

  • ロール名を入力して、作成を完了します。

OSS アクセス権限の構成

RAM ロールに OSS 権限を付与します。

  • データの読み取りAliyunOSSReadOnlyAccess 権限を付与します。

  • データの書き込みAliyunOSSFullAccess 権限を付与します。

SQL ユーザーに GrantAssumeRole 権限を付与

SQL を実行するユーザーが Alibaba Cloud アカウントでない場合、あらかじめ GrantAssumeRole 権限を付与する必要があります。

  • RAM コンソールで権限ポリシーを作成します。[Policies] > [Create Policy] > [Script Editor] に移動し、以下の JSON を貼り付けます。Role_ARN は、EXTERNAL_FILES で使用する role_arn と同じ値に置き換えてください。Role ARN の確認方法については、「FAQ about RAM roles and STS tokens」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "hologram:GrantAssumeRole",
      "Resource": "<RoleARN>"
    }
  ]
}

次に、このポリシーをクエリを実行するユーザーにアタッチします。RAM ユーザーの場合は、[Users] > [Permissions] > [Add Permissions] に移動します。RAM ロールの場合は、[Roles] > [Permissions] > [Add Permissions] に移動します。

構文

データのクエリ

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

データのインポート

INSERT INTO target_table 
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

データのエクスポート

INSERT INTO EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) SELECT * FROM source_table;

パラメーター

共通パラメーター

パラメーター

説明

必須

path

ファイルパス。ディレクトリおよびファイルを指定できます。複数のパスをカンマ区切りで指定可能です。? ワイルドカード(任意の 1 文字に一致)および * ワイルドカード(0 文字以上の任意の文字列に一致)をサポートします。

はい

oss://bucket/dir/oss://bucket/dir/*.csv

format

ファイル形式。クエリ時は csvparquetorc をサポートします。エクスポート時は csv のみをサポートします。

はい

csv

oss_endpoint

OSS クラシックネットワークエンドポイント。詳細については、「Regions and endpoints」をご参照ください。

いいえ

oss-cn-hangzhou-internal.aliyuncs.com

role_arn

Alibaba Cloud RAM ロールの ARN。

いいえ

acs:ram::xxx:role/xxx

読み取りパラメーター

パラメーター名

説明

必須

schema_deduce_file_num

スキーマ推論時にスキャンするファイルの最大数。デフォルト値:5。

いいえ

10

schema_deduce_file_order

スキーマ推論時のファイルスキャン順序。デフォルト値:latest_first。

いいえ

latest_firstearliest_firstrandom

csv_skip_header

CSV ファイルの先頭行をテーブルヘッダーとしてスキップするかどうか。デフォルト値:false

いいえ

true

csv_delimiter

CSV ファイルの列区切り文字。デフォルト値:カンマ。

いいえ

|

書き込みパラメーター

パラメーター名

説明

必須

target_file_size_mb

各出力ファイルのサイズ(MB 単位)。デフォルト値:10。

いいえ

500

single_file

すべてのデータを単一ファイルに書き込むかどうか。デフォルト値:false

いいえ

true

使用例

例 1:CSV ファイルのクエリ

OSS 内の CSV ファイルをクエリし、スキーマを自動推論します。

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    csv_delimiter = ',',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

CSV ファイルをクエリし、スキーマを手動で指定します。

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (id int, name text, amount decimal(10,2));

例 2:Parquet ファイルのクエリ

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/parquet_data/',
    format = 'parquet',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

例 3:ORC ファイルのクエリ

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orc_data/',
    format = 'orc',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

例 4:Hologres テーブルへのデータインポート

-- 対象テーブルの作成
CREATE TABLE orders (
    order_id int,
    customer_name text,
    amount decimal(10,2),
    PRIMARY KEY(order_id)
);

-- OSS からのデータインポート
INSERT INTO orders 
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orders/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (order_id int, customer_name text, amount decimal(10,2));

例 5:OSS へのデータエクスポート

複数ファイルにデータをエクスポートします。

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    target_file_size_mb = '100'
) SELECT * FROM orders;

単一ファイルにデータをエクスポートします。

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    single_file = 'true'
) SELECT * FROM orders;

例 6:サーバーレスリソースグループの使用

SET hg_computing_resource = 'serverless';

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

スキーマ推論ルール

自動スキーマ推論

AS 句でスキーマを指定しない場合、Hologres は自動的にスキーマを推論します。

  • Parquet/ORC:ファイルメタデータから推論します。

  • ヘッダー付き CSV:先頭行(ヘッダー)とデータ内容から推論します。

  • ヘッダーなし CSV:すべてのファイルが同一のスキーマを持つ必要があります。

Hologres は schema_deduce_file_num で指定された数のファイルをスキャンし、すべてのスキーマの和集合を取得します。

スキーマ推論動作

シナリオ

動作

スキーマに存在するがファイルに存在しないカラム

NULL で埋める

ファイルのカラムがスキーマに存在しません。

カラムを無視

カラム型が一致しないが変換可能な場合

自動型変換

カラム型が一致せず変換不可能な場合

NULL を返す

型マッピング

EXTERNAL_FILES が ORC または Parquet ファイルを読み取る際、ファイル内の型を PostgreSQL 型にマッピングします。以下にマッピングを示します。サポートされていない型は各表の下に記載されています。

ORC 型マッピング

ORC 型

PostgreSQL 型

BOOLEAN

BOOLEAN

TINYINT / SMALLINT

SMALLINT

INT

INTEGER

BIGINT

BIGINT

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

DECIMAL(p, s)

STRING

TEXT

VARCHAR(n)

VARCHAR(n)

CHAR(n)

CHAR(n)

BINARY

BYTEA

DATE

DATE

TIMESTAMP

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP WITH LOCAL TIMEZONE

TIMESTAMP WITH TIME ZONE

LIST

配列 (pg_type[])

説明

ORC 型の UNIONSTRUCT、および MAP はサポートされていません。

Parquet 型マッピング

Parquet 物理型

Parquet 論理型

PostgreSQL 型

BOOLEAN

BOOLEAN

INT32

INTEGER

INT32

DATE

DATE

INT32

DECIMAL(p, s)

DECIMAL(p, s)

INT64

BIGINT

INT64

TIMESTAMP_MILLIS / MICROS

TIMESTAMP / TIMESTAMPTZ

INT64

DECIMAL(p, s)

DECIMAL(p, s)

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

BYTE_ARRAY

BYTEA

BYTE_ARRAY

STRING

TEXT

BYTE_ARRAY

JSON / BSON

JSONB

BYTE_ARRAY

ENUM

TEXT

FIXED_LEN_BYTE_ARRAY

DECIMAL(p, s)

DECIMAL(p, s)

FIXED_LEN_BYTE_ARRAY

UUID

UUID

LIST

LIST

配列 (pg_type[])

説明

Parquet 型の STRUCT および MAP はサポートされていません。

制限事項

  • エクスポートフォーマット:エクスポート時は CSV のみをサポートします。

  • 再帰検索:サブディレクトリは再帰的に検索されません。

  • サポート外の型:ORC 型の UNION、STRUCT、MAP。Parquet 型の STRUCT、MAP。

よくある質問

Q:データをエクスポートする際に権限エラーが発生しました。どうすればよいですか?

A:RAM ロールに AliyunOSSFullAccess 権限が付与されていることを確認してください。

Q:エクスポートされるファイルのサイズを制御するにはどうすればよいですか?

A:target_file_size_mb パラメーターを使用して各ファイルのサイズを設定します。より細かい制御が必要な場合は、hg_experimental_query_batch_size パラメーターを調整してください。