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

E-MapReduce:Iceberg カタログ

最終更新日:Nov 28, 2025

Iceberg カタログは、StarRocks がバージョン 2.4 からサポートしている外部カタログです。

背景情報

Iceberg カタログを使用すると、次のことが可能になります:

  • テーブルを手動で作成することなく、Iceberg カタログを介して Iceberg のデータを直接クエリできます。

  • INSERT INTO または非同期マテリアライズドビュー (v2.5 以降で利用可能) を使用して、Iceberg から StarRocks にデータを処理、モデリング、インポートできます。

  • StarRocks から Iceberg のデータベースとテーブルを作成または削除できます。また、INSERT INTO を使用して、StarRocks テーブルから Parquet 形式の Iceberg テーブルにデータを書き込むこともできます (v3.1 以降で利用可能)。

Iceberg のデータに適切にアクセスするには、StarRocks クラスターが Iceberg クラスターのストレージシステムとメタデータサービスにアクセスできる必要があります。StarRocks は現在、以下のストレージシステムとメタデータサービスをサポートしています:

  • Hadoop 分散ファイルシステム (HDFS) または Alibaba Cloud Object Storage Service (OSS)。

  • メタデータサービス。現在サポートされているメタデータサービスには、Hive Metastore (HMS) および Data Lake Formation (DLF) 1.0 (レガシー) が含まれます。

注意事項

StarRocks から Iceberg データをクエリする場合は、次の点にご注意ください。

ファイル形式

圧縮形式

Iceberg テーブルバージョン

Parquet

SNAPPY、LZ4、ZSTD、GZIP、および NO_COMPRESSION

  • v1 テーブル:サポートされています。

  • v2 テーブル:ポジション削除は StarRocks v3.1 からサポートされています。等価削除は v3.1.10+、v3.2.5+、および v3.3 からサポートされています。

ORC

ZLIB、SNAPPY、LZO、LZ4、ZSTD、および NO_COMPRESSION

  • v1 テーブル:サポートされています。

  • v2 テーブル:ポジション削除は StarRocks v3.0 からサポートされています。等価削除は v3.1.8+、v3.2.3+、および v3.3 からサポートされています。

Iceberg カタログの作成

構文

CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
    "type" = "iceberg",
    MetastoreParams
)

パラメーター

パラメーターは、Iceberg が使用するメタデータサービスによって異なります。

HMS の使用

  • catalog_name:Iceberg カタログの名前。このパラメーターは必須です。名前は以下の要件を満たす必要があります:

    • 英字 (a-z または A-Z)、数字 (0-9)、またはアンダースコア (_) で構成され、先頭は英字である必要があります。

    • 全長は 64 文字を超えることはできません。

    • カタログ名では大文字と小文字が区別されます。

  • comment:Iceberg カタログの説明。このパラメーターはオプションです。

  • type:データソースのタイプ。これを iceberg に設定します。

  • MetastoreParams:StarRocks が Iceberg クラスターのメタデータサービスにアクセスするためのパラメーター。

    プロパティ

    説明

    iceberg.catalog.type

    Iceberg のカタログのタイプ。値は hive である必要があります。

    hive.metastore.uris

    Hive Metastore の URI。フォーマットは thrift://<ip_address_of_hive_metastore>:<port> です。デフォルトのポートは 9083 です。

DLF 1.0 (レガシー) の使用

  • catalog_name:Iceberg カタログの名前。このパラメーターは必須です。名前は以下の要件を満たす必要があります:

    • 英字 (a-z または A-Z)、数字 (0-9)、またはアンダースコア (_) で構成され、先頭は英字である必要があります。

    • 全長は 64 文字を超えることはできません。

    • カタログ名では大文字と小文字が区別されます。

  • comment:Iceberg カタログの説明。このパラメーターはオプションです。

  • type:データソースのタイプ。これを iceberg に設定します。

  • MetastoreParams:StarRocks が Iceberg クラスターのメタデータサービスにアクセスするためのパラメーター。

    プロパティ

    説明

    iceberg.catalog.type

    Iceberg のカタログのタイプ。値は dlf である必要があります。

    dlf.catalog.id

    DLF 内の既存のデータカタログの ID。dlf.catalog.id パラメーターを設定しない場合、システムはデフォルトの DLF カタログを使用します。

DLF の使用

重要

DLF を使用する場合、設定済みの Resource Access Management (RAM) ユーザーを使用して StarRocks Manager で操作を実行する必要があります。詳細については、「DLF カタログの使用」をご参照ください。

  • catalog_name:Iceberg カタログの名前。このパラメーターは必須です。名前は以下の要件を満たす必要があります:

    • 先頭は英字で、英字 (a-z または A-Z)、数字 (0-9)、およびアンダースコア (_) のみを含むことができます。

    • 長さは 64 文字を超えることはできません。

  • comment:Iceberg カタログの説明。このパラメーターはオプションです。

  • type:データソースのタイプ。これを iceberg に設定します。

  • CatalogParams:StarRocks が Iceberg クラスターのメタデータにアクセスするためのパラメーター。パラメーター設定は、Iceberg クラスターが使用するメタデータのタイプによって異なります。

    パラメーター

    必須

    説明

    <catalog_name>

    はい

    DLF データカタログの名前。例:dlf_catalog

    type

    はい

    カタログのタイプ。Iceberg データソースの場合、固定値 iceberg を入力します。

    uri

    はい

    DLF の REST API アドレス。フォーマットは http://<VPC_Endpoint>/iceberg です。<VPC_Endpoint> は、指定されたリージョンにおける DLF の VPC エンドポイントです。具体的な値については、「サービスエンドポイント」をご参照ください。
    例:http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg

    iceberg.catalog.type

    はい

    Iceberg カタログのタイプ。DLF シナリオの場合、固定値 dlf_rest を入力します。

    warehouse

    はい

    Iceberg カタログの名前。Data Lake Formation コンソールデータカタログ ページから取得できます。

    rest.signing-region

    はい

    DLF サービスのリージョン ID。例:cn-hangzhou

次の例では、iceberg_catalog_hms という名前の Iceberg カタログを作成します。

HMS の使用

CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
    "type" = "iceberg",
    "iceberg.catalog.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

DLF 1.0 (レガシー) の使用

CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
    "type" = "iceberg",
    "iceberg.catalog.type" = "dlf",
    "dlf.catalog.id" = "sr_dlf"
);

DLF の使用

CREATE EXTERNAL CATALOG iceberg_catalog
properties
( 
    "type" = "iceberg",
    "iceberg.catalog.type" = "dlf_rest",
    "uri" = "http://cn-hangzhou-vpc.dlf.aliyuncs.com/iceberg",
    "warehouse" = "iceberg_test",
    "rest.signing-region" = "cn-hangzhou"
);

Iceberg カタログの表示

SHOW CATALOGS を実行して、現在の StarRocks クラスター内のすべてのカタログをクエリできます。

SHOW CATALOGS;

また、SHOW CREATE CATALOG を実行して、外部カタログの作成文を表示することもできます。たとえば、次のコマンドを実行して、Iceberg カタログ iceberg_catalog_hms の作成文を表示します。

SHOW CREATE CATALOG iceberg_catalog_hms;

Iceberg データベースの作成

StarRocks の内部カタログと同様に、Iceberg カタログに対する CREATE DATABASE 権限がある場合、CREATE DATABASE を使用してそのカタログにデータベースを作成できます。この機能は v3.1 から利用可能です。

説明

GRANT 文と REVOKE 文を使用して、ユーザーとロールの権限を付与および取り消すことができます。

構文

対象の Iceberg カタログに切り替えてから、次の文を実行して Iceberg データベースを作成します。

CREATE DATABASE <database_name>
[PROPERTIES ("location" = "<prefix>://<path_to_database>/<database_name.db>/")]

パラメーター

location パラメーターは、データベースのファイルパスを指定します。HDFS と Alibaba Cloud OSS をサポートしています:

  • ストレージシステムとして HDFS を使用する場合、Prefixhdfs に設定します。

  • ストレージシステムとして Alibaba Cloud OSS を使用する場合、Prefixoss に設定します。

説明

location パラメーターを指定しない場合、StarRocks は現在の Iceberg カタログのデフォルトパスにデータベースを作成します。

Iceberg カタログとデータベースの切り替え

次の方法で、対象の Iceberg カタログとデータベースに切り替えることができます:

  • まず、SET CATALOG を使用して現在のセッションの Iceberg カタログを指定し、次に USE を使用してデータベースを指定します。

    -- 現在のセッションのアクティブなカタログを切り替えます。
    SET CATALOG <catalog_name>;
    
    -- 現在のセッションのアクティブなデータベースを指定します。
    USE <db_name>;
  • USE を実行して、セッションを対象の Iceberg カタログ内の特定のデータベースに直接切り替えます。

    USE <catalog_name>.<db_name>;

Iceberg データベースの削除

StarRocks の内部データベースと同様に、Iceberg データベースに対する DROP 権限がある場合、DROP DATABASE を使用してそれを削除できます。この機能は v3.1 から利用可能で、空のデータベースの削除のみをサポートしています。

説明

GRANT 文と REVOKE 文を使用して、ユーザーとロールの権限を付与および取り消すことができます。

データベースの削除操作では、HDFS または OSS 上の対応するファイルパスは削除されません。対象の Iceberg カタログに切り替えてから、次の文を実行して Iceberg データベースを削除します。

DROP DATABASE <database_name>;

Iceberg カタログの削除

DROP CATALOG を実行して、外部カタログを削除できます。たとえば、次のコマンドを実行して iceberg_catalog_hms を削除します。

DROP Catalog iceberg_catalog_hms;

Iceberg テーブルの作成

StarRocks の内部データベースと同様に、Iceberg データベースに対する CREATE TABLE 権限がある場合、CREATE TABLE または CREATE TABLE AS SELECT (CTAS) を使用してそのデータベースにテーブルを作成できます。この機能は v3.1 から利用可能です。対象の Iceberg カタログとデータベースに切り替えてから、次の構文を実行して Iceberg テーブルを作成します。

構文

CREATE TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...
partition_column_definition1,partition_column_definition2...])
[partition_desc]
[PROPERTIES ("key" = "value", ...)]
[AS SELECT query]

パラメーター

  • column_definition

    column_definition の構文は次のとおりです。

    col_name col_type [COMMENT 'comment']

    パラメーターは次の表で説明されています。

    パラメーター

    説明

    col_name

    列の名前。

    col_type

    列のデータの型。

    • 現在サポートされているデータの型は、TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、DATE、DATETIME、CHAR、VARCHAR[(length)]、ARRAY、MAP、および STRUCT です。

    • LARGEINT、HLL、および BITMAP 型はサポートされていません。

    説明

    すべての非パーティションキー列のデフォルト値は NULL です。パーティションキー列は列リストの最後に宣言する必要があり、NULL にすることはできません。

  • partition_desc

    partition_desc の構文は次のとおりです。

    PARTITION BY (par_col1[, par_col2...])

    現在、StarRocks は ID 変換のみをサポートしています。これは、一意のパーティション値ごとにパーティションが作成されることを意味します。

    説明

    パーティションキー列は列リストの最後に宣言する必要があります。FLOAT、DOUBLE、DECIMAL、または DATETIME 以外のデータの型をサポートしています。NULL 値はサポートされていません。

  • PROPERTIES

    PROPERTIES 句で、"key"="value" 形式で Iceberg テーブルのプロパティを宣言できます。詳細については、Iceberg テーブルのプロパティをご参照ください。次の表に、いくつかの一般的なプロパティを示します。

    プロパティ

    説明

    location

    Iceberg テーブルのファイルパス。メタデータサービスとして HMS を使用する場合、location パラメーターを指定する必要はありません。

    file_format

    Iceberg テーブルのファイル形式。現在、Parquet 形式のみがサポートされています。デフォルト:parquet

    compression_codec

    Iceberg テーブルの圧縮形式。サポートされている形式は SNAPPY、GZIP、ZSTD、および LZ4 です。デフォルト値:gzip。このプロパティはバージョン 3.2.3 以降非推奨になりました。このバージョン以降、Iceberg テーブルへの書き込みの圧縮アルゴリズムは、connector_sink_compression_codec セッション変数によって一元的に制御されます。

  • idscore 列を含む非パーティションテーブル unpartition_tbl を作成します。

    CREATE TABLE unpartition_tbl
    (
        id int,
        score double
    );
  • actionid、および dt 列を含むパーティションテーブル partition_tbl_1 を作成し、iddt をパーティションキー列として定義します。

    CREATE TABLE partition_tbl_1
    (
        action varchar(20),
        id int NOT NULL,
        dt date NOT NULL
    )
    PARTITION BY (id,dt);
  • ソーステーブル partition_tbl_1 からデータをクエリし、クエリ結果に基づいてパーティションテーブル partition_tbl_2 を作成します。iddtpartition_tbl_2 のパーティションキー列として定義します。

    CREATE TABLE partition_tbl_2
    PARTITION BY (id, dt)
    AS SELECT * from partition_tbl_1;

Iceberg テーブルスキーマの表示

次の方法で Iceberg テーブルのスキーマを表示できます。

  • テーブルスキーマを表示します。

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>;
  • CREATE コマンドからテーブルスキーマとテーブルファイルのストレージ場所を表示します。

    SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>;

Iceberg テーブルへのデータ挿入

StarRocks の内部テーブルと同様に、Iceberg テーブルに対する INSERT 権限がある場合、INSERT を使用して StarRocks テーブルからその Iceberg テーブルにデータを書き込むことができます。現在、Parquet 形式の Iceberg テーブルにのみデータを書き込むことができます。この機能は v3.1 から利用可能です。

説明

GRANT 文と REVOKE 文を使用して、ユーザーとロールの権限を付与および取り消すことができます。

対象の Iceberg カタログとデータベースに切り替えてから、次の構文を実行して StarRocks テーブルから Parquet 形式の Iceberg テーブルにデータを書き込みます。

構文

INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

-- 指定されたパーティションにデータを書き込みます。
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }
説明

パーティションキー列は NULL にすることはできません。したがって、データロード中にパーティションキー列に値があることを確認する必要があります。

パラメーター

パラメーター

説明

INTO

対象テーブルにデータを追加します。

OVERWRITE

対象テーブルのデータを上書きします。

column_name

インポートの対象列。1 つ以上の列を指定できます。複数の列を指定する場合は、カンマ (,) で区切る必要があります。指定された列は対象テーブルに存在する必要があり、パーティションキー列を含める必要があります。指定された列名はソーステーブルの列名と異なっていてもかまいませんが、その順序は検索文の結果の列の順序と一致する必要があります。このパラメーターを指定しない場合、データはデフォルトで対象テーブルのすべての列にインポートされます。ソーステーブルの非パーティションキー列が対象列のリストに含まれていない場合、デフォルト値 NULL が書き込まれます。検索文の結果列のデータの型が対応する対象列のデータの型と一致しない場合、暗黙的な変換が試みられます。変換に失敗した場合、INSERT INTO 文は構文解析エラーを報告します。

expression

対応する列に値を割り当てるために使用される式。

DEFAULT

対応する列にデフォルト値を割り当てます。

query

クエリ文。クエリの結果が対象テーブルにロードされます。クエリ文は、StarRocks がサポートする任意の SQL クエリ構文をサポートします。

PARTITION

データロードの対象パーティション。対象テーブルのすべてのパーティションキー列を指定する必要があります。指定されたパーティションキー列の順序は、テーブル作成時に定義された順序と異なっていてもかまいません。パーティションを指定する場合、column_name を使用してデータロードの対象列を指定することはできません。

以下の書き込み文は、デフォルトの Parquet 形式を例として使用しています。

  • partition_tbl_1 テーブルに次の 3 行のデータを挿入します。

    INSERT INTO partition_tbl_1
    VALUES
        ("buy", 1, "2023-09-01"),
        ("sell", 2, "2023-09-02"),
        ("buy", 3, "2023-09-03");
  • 単純な計算を含む SELECT クエリの結果データを、指定された列の順序で partition_tbl_1 テーブルに挿入します。

    INSERT INTO partition_tbl_1 (id, action, dt) SELECT 1+1, 'buy', '2023-09-03';
  • partition_tbl_1 テーブル自体からデータを読み取る SELECT クエリの結果データを挿入します。

    INSERT INTO partition_tbl_1 SELECT 'buy', 1, date_add(dt, INTERVAL 2 DAY) FROM partition_tbl_1
    WHERE id=1;
  • SELECT クエリの結果データを、partition_tbl_2 テーブルの dt='2023-09-01' かつ id=1 のパーティションに挿入します。

    • 方法 1

      INSERT INTO partition_tbl_2 SELECT 'order', 1, '2023-09-01';
    • 方法 2

      INSERT INTO partition_tbl_2 partition(dt='2023-09-01',id=1) SELECT 'order';
  • partition_tbl_1 テーブルの dt='2023-09-01' かつ id=1 のパーティションで、action 列のすべての値を close で上書きします:

    • 方法 1

      INSERT OVERWRITE partition_tbl_1 SELECT 'close', 1, '2023-09-01';
    • 方法 2

      INSERT OVERWRITE partition_tbl_1 partition(dt='2023-09-01',id=1) SELECT 'close';

Iceberg テーブルからのデータクエリ

  1. SHOW DATABASES を実行して、指定されたカタログに属する Iceberg クラスター内のデータベースを表示します。

    SHOW DATABASES FROM <catalog_name>;
  2. 対象の Iceberg カタログとデータベースに切り替えます。

  3. SELECT を実行して、対象データベース内の対象テーブルをクエリします。

    SELECT count(*) FROM <table_name> LIMIT 10;

Iceberg テーブルの削除

StarRocks の内部テーブルと同様に、Iceberg テーブルに対する DROP 権限がある場合、DROP TABLE を使用してそれを削除できます。この機能は v3.1 から利用可能です。

説明

GRANT 文と REVOKE 文を使用して、ユーザーとロールの権限を付与および取り消すことができます。

テーブルの削除操作では、HDFS または OSS 上の対応するファイルパスとデータは削除されません。FORCE キーワードを追加して実行される強制削除は、HDFS または OSS 上のデータを削除しますが、対応するファイルパスは削除しません。対象の Iceberg カタログとデータベースに切り替えてから、次の文を実行して Iceberg テーブルを削除します。

DROP TABLE <table_name> FORCE;

関連ドキュメント

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