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

E-MapReduce:Iceberg コネクター

最終更新日:Aug 22, 2026

Iceberg は、データレイク向けのオープンテーブルフォーマットです。Iceberg コネクターを使用して、Iceberg 形式のデータファイルをクエリできます。

背景情報

Iceberg の詳細については、「Iceberg」をご参照ください。

Alibaba Cloud E-MapReduce (EMR) の Iceberg コネクターは、オープンソースコミュニティの Iceberg コネクターが提供する機能と互換性があります。さらに、EMR の Iceberg コネクターは、詳細な最適化に基づいて次の機能を提供します:
  • 動的フィルタリング
  • Iceberg V2 テーブルに対する読み取り操作
  • Iceberg フィルタープッシュダウン

前提条件

Presto サービスがデプロイされた Hadoop クラスター、または Presto クラスターが作成されている必要があります。詳細については、「クラスターの作成」をご参照ください。

制限事項

EMR V3.38.0 以降の Hadoop クラスターまたは Presto クラスターのみが Iceberg コネクターをサポートします。

Iceberg コネクターの設定

Iceberg コネクターの設定を変更します。詳細については、「コネクターの設定」をご参照ください。

デフォルト設定

EMR コンソールで、Presto サービスの Configure ページに移動します。Service Configuration セクションで、[iceberg.properties] タブをクリックします。Thrift プロトコルを使用して Hive メタストアに接続するための URI を指定する hive.metastore.uri パラメーターがあります。実際の要件に合わせてパラメーター値を変更します。デフォルトの形式は thrift://emr-header-1.cluster-24****:9083 です。

パラメーター

EMR コンソールで、Presto サービスページに移動し、Configure タブをクリックします。Service Configuration セクションで、[iceberg.properties] タブをクリックし、次に Custom Configuration をクリックします。次の設定項目を追加できます。

設定項目説明
iceberg.file-formatIceberg テーブルのデータが格納されるファイル形式。有効な値:
  • ORC。これがデフォルト値です。
  • PARQUET。
iceberg.compression-codecファイルの書き込み時に使用する圧縮コーデック。有効な値:
  • GZIP。これがデフォルト値です。
  • ZSTD。
  • LZ4。
  • SNAPPY。
  • NONE。
iceberg.max-partitions-per-writer各ライターが処理できる最大パーティション数。デフォルト値:100。

例:Iceberg テーブルのデータクエリ

Presto の基本的な SQL 構文を使用して、Iceberg テーブルのデータをクエリできます。

  1. クラスターのマスターノードに SSH でログインします。詳細については、「クラスターへのログイン」をご参照ください。
  2. 次のコマンドを実行して、Presto クライアントに接続します:
    presto --server emr-header-1:9090 --catalog iceberg --schema default
    次の情報が返された場合、Presto クライアントが接続されています:
    presto:default>
  3. 次のコマンドを実行して、iceberg_test という名前のテーブルを作成します:
    create table iceberg_test(id int);
  4. 次のコマンドを実行して、iceberg_test テーブルにデータを挿入します:
    insert into iceberg_test values(1),(2);
  5. 次のコマンドを実行して、iceberg_test テーブルのデータをクエリします:
    select * from iceberg_test;
    次の情報が返されます:
     id
    ----
     1
     2

SQL ステートメント

Iceberg コネクターは、Iceberg テーブルからのデータの読み取りまたは書き込み、およびテーブルメタデータの読み取りまたは書き込みに使用できます。基本的な SQL ステートメントに加えて、Iceberg コネクターは次の表で説明する SQL ステートメントもサポートしています。
SQL ステートメント説明
INSERT詳細については、Presto の公式ドキュメントの 「INSERT」 をご参照ください。
DELETEこのトピックの 「パーティション単位のデータ削除」 セクションをご参照ください。

詳細については、Presto の公式ドキュメントの 「DELETE」 をご参照ください。

スキーマとテーブルの管理このトピックの 「テーブルのパーティション分割」 セクションをご参照ください。

詳細については、Presto の公式ドキュメントの 「スキーマとテーブルの管理」 をご参照ください。

マテリアライズドビューの管理このトピックの 「マテリアライズドビューの管理」 セクションをご参照ください。

詳細については、Presto の公式ドキュメントの 「マテリアライズドビューの管理」 をご参照ください。

ビューの管理詳細については、Presto の公式ドキュメントの 「ビューの管理」 をご参照ください。

テーブルのパーティション分割

Iceberg コネクターは、次の表で説明する関数を使用してテーブルをパーティション分割できます。
関数説明
year(ts)年単位でテーブルをパーティション分割します。この関数は、ts の値と 1970 年 1 月 1 日との差を年数で返します。
month(ts)月単位でテーブルをパーティション分割します。この関数は、ts の値と 1970 年 1 月 1 日との差を月数で返します。
day(ts)日単位でテーブルをパーティション分割します。この関数は、ts の値と 1970 年 1 月 1 日との差を日数で返します。
hour(ts)時間単位でテーブルをパーティション分割します。この関数は、ts の値に基づいてタイムスタンプを返します。ts の値の分と秒の部分は無視されます。
bucket(x, nbuckets)データにハッシュパーティショニングを実行し、指定された数のバケットにデータを割り当てます。この関数は x の整数ハッシュ値を返します。x の整数ハッシュ値は [0, nbuckets - 1) の範囲内です。
truncate(s, nchars)s の最初の nchars 文字を返します。
例:order_date の値に含まれる月、account_number のハッシュ値 (バケット数:10)、および country に基づいて、customer_orders という名前のテーブルをパーティション分割します。
CREATE TABLE iceberg.testdb.customer_orders (
    order_id BIGINT,
    order_date DATE,
    account_number BIGINT,
    customer VARCHAR,
    country VARCHAR)
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country'])

パーティション単位のデータ削除

パーティションテーブルの場合、DELETE ステートメントに WHERE 句を含めてパーティションをフィルタリングすると、Iceberg コネクターはフィルター条件に一致するパーティションを削除します。たとえば、次のステートメントを実行して、customer_orders テーブルから country = 'US' のフィルター条件に一致するすべてのパーティションを削除します:
DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US'
Iceberg コネクターを使用して、パーティション単位でのみデータを削除できます。たとえば、次のステートメントは、ステートメントの WHERE 句がパーティション内の特定の行をフィルタリングするために使用されているため、実行に失敗します:
DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods'

スナップショットへのロールバック

Iceberg テーブルではスナップショットがサポートされています。

Iceberg コネクターは、各 Iceberg テーブルにシステムスナップショットテーブルを提供します。各 Iceberg テーブルのスナップショットは、BIGINT データ型のスナップショット ID によって識別されます。たとえば、次のステートメントを実行して、customer_orders テーブルの最新のスナップショット ID をクエリできます:
SELECT snapshot_id FROM iceberg.testdb."customer_orders$snapshots" ORDER BY committed_at DESC LIMIT 1
次のステートメントを実行して、指定されたスナップショット ID に基づいてテーブルの状態をスナップショットの状態にロールバックできます:
CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****)

システムテーブルのパーティションのクエリ

Iceberg コネクターを使用して、システムテーブルのパーティションをクエリできます。たとえば、次のステートメントを実行して、customer_orders テーブルのパーティションをクエリできます。パーティションに関する情報には、各パーティションキー列の最大値と最小値が含まれます。
SELECT * FROM iceberg.testdb."customer_orders$partitions"

Iceberg テーブルのプロパティ

次の表に、Iceberg テーブルのプロパティを示します。
プロパティ説明
formatIceberg テーブルのデータを格納するファイル形式を指定します。有効な値:
  • ORC。これがデフォルト値です。
  • PARQUET。
partitioningパーティションキー列を指定します。

たとえば、テーブルにパーティションキー列 c1 と c2 が含まれている場合、このプロパティは ARRAY['c1', 'c2'] に設定されます。

locationテーブルを格納するファイルシステムの URI を指定します。
次のサンプルステートメントでは、format プロパティは PARQUET に、partitioning プロパティは ARRAY['c1', 'c2'] に、location プロパティは /var/my_tables/test_table に設定されています:
CREATE TABLE test_table (
    c1 integer,
    c2 date,
    c3 double)
WITH (
    format = 'PARQUET',
    partitioning = ARRAY['c1', 'c2'],
    location = '/var/my_tables/test_table')

マテリアライズドビューの管理

Iceberg コネクターはマテリアライズドビューをサポートしています。各マテリアライズドビューは、ビュー定義と Iceberg テーブルで構成されます。テーブル名はマテリアライズドビューのプロパティとして格納され、データは Iceberg テーブルに格納されます。

次の表に、マテリアライズドビューで実行できるステートメントを示します。
ステートメント説明
CREATE MATERIALIZED VIEWマテリアライズドビューを作成します。
Iceberg テーブルのプロパティを使用して、Iceberg テーブルのストレージ形式を決定できます。たとえば、WITH 句で format を ORC に、partitioning を ARRAY['event_date'] に設定して、Iceberg テーブルのデータを ORC ファイルに格納し、テーブルを日単位でパーティション分割します。
WITH ( format = 'ORC', partitioning = ARRAY['event_date'] )
REFRESH MATERIALIZED VIEWマテリアライズドビューのデータを更新します。
ステートメントを実行すると、Iceberg テーブルのデータが削除され、マテリアライズドビューで定義されたクエリの実行結果がマテリアライズドビューに挿入されます。
重要 削除操作と挿入操作の間には、短い時間差があります。マテリアライズドビューが空の場合、挿入操作が失敗すると、マテリアライズドビューは空のままになります。

また、ステートメントを実行して、マテリアライズドビューの定義と Iceberg テーブルを削除することもできます。