Iceberg catalog
この例では、StarRocks Basics Quick Start で紹介されている Local Climatological Data(LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
Iceberg catalog は、StarRocks が v2.4 以降でサポートする外部 catalog の一種です。Iceberg catalog を使用すると、以下のことが可能です。
- Iceberg に保存されたデータを直接クエリし、手動でテーブルを作成する必要がありません。
- INSERT INTO または非同期マテリアライズドビュー(v2.5 以降でサポート)を使用して、Iceberg に保存されたデータを処理し、StarRocks にデータをロードします。
- StarRocks 上で Iceberg データベースやテーブルを作成または削除する操作を行ったり、StarRocks テーブルから Parquet 形式の Iceberg テーブルにデータをシンクすることができます。この機能は v3.1 以降でサポートされています。
Iceberg クラスターでの SQL ワークロードを成功させるためには、StarRocks クラスターが Iceberg クラスターのストレージシステムとメタストアにアクセスできる必要があります。StarRocks は以下のストレージシステムとメタストアをサポートしています。
-
分散ファイルシステム (HDFS) または AWS S3、Microsoft Azure Storage、Google GCS、またはその他の S3 互換ストレージシステム(例: MinIO)
-
メタストアとして Hive metastore、AWS Glue、または Tabular
- ストレージとして AWS S3 を選択した場合、メタストアとして HMS または AWS Glue を使用できます。他のストレージシステムを選択した場合、メタストアとしては HMS のみ使用できます。
- メタ ストアとして Tabular を選択した場合、Iceberg REST catalog を使用する必要があります。
使用上の注意
StarRocks を使用して Iceberg からデータをクエリする際には、以下の点に注意してください。
| ファイル形式 | 圧縮形式 | Iceberg テーブルバージョン |
|---|---|---|
| Parquet | SNAPPY, LZ4, ZSTD, GZIP, NO_COMPRESSION |
|
| ORC | ZLIB, SNAPPY, LZO, LZ4, ZSTD, NO_COMPRESSION |
|
統合準備
Iceberg catalog を作成する前に、StarRocks クラスターが Iceberg クラスターのストレージシステムとメタストアと統合できること を確認してください。
ストレージ
ストレージタイプに応じたタブを選択してください。
- AWS S3
- HDFS
Iceberg クラスターが AWS S3 をストレージとして使用する場合、または AWS Glue をメタストアとして使用する場合、適切な認証方法を選択し、StarRocks クラスターが関連する AWS クラウドリソースにアクセスできるように必要な準備を行ってください。
以下の認証方法が推奨されます。
- インスタンスプロファイル
- アサインされたロール
- IAM ユーザー
上記の3つの認証方法の中で、インスタンスプロファイルが最も広く使用されています。
詳細については、AWS IAM での認証準備を参照してください。
HDFS をストレージとして選択した場合、StarRocks クラスターを次のように構成してください。
-
(オプション)HDFS クラスターおよび Hive metastore にアクセスするためのユーザー名を設定します。デフォルトでは、StarRocks は FE および BE または CN プロセスのユ ーザー名を使用して HDFS クラスターおよび Hive metastore にアクセスします。また、各 FE の fe/conf/hadoop_env.sh ファイルの先頭と各 BE の be/conf/hadoop_env.sh ファイルまたは各 CN の cn/conf/hadoop_env.sh ファイルの先頭に
export HADOOP_USER_NAME="<user_name>"を追加してユーザー名を設定することもできます。これらのファイルでユーザー名を設定した後、各 FE および各 BE または CN を再起動してパラメータ設定を有効にします。StarRocks クラスターごとに1つのユーザー名のみを設定できます。 -
Iceberg データをクエリする際、StarRocks クラスターの FEs および BEs または CNs は HDFS クライアントを使用して HDFS クラスターにアクセスします。ほとんどの場合、その目的を達成するために StarRocks クラスターを構成する必要はなく、StarRocks はデフォルトの構成を使用して HDFS クライアントを起動します。次の状況でのみ StarRocks クラスターを構成する必要があります。
- HDFS クラスターに高可用性 (HA) が有効になっている場合: HDFS クラスターの hdfs-site.xml ファイルを各 FE の $FE_HOME/conf パスおよび各 BE の $BE_HOME/conf パスまたは各 CN の $CN_HOME/conf パスに追加します。
- HDFS クラスターに View File System (ViewFs) が有効になっている場合: HDFS クラスターの core-site.xml ファイルを各 FE の $FE_HOME/conf パスおよび各 BE の $BE_HOME/conf パスまたは各 CN の $CN_HOME/conf パスに追加します。
クエリを送信した際に不明なホストを示すエラーが返された場合、HDFS クラスターのノードのホスト名と IP アドレスのマッピングを /etc/hosts パスに追加する必要があります。
Kerberos 認証
HDFS クラスターまたは Hive metastore に Kerberos 認証が有効になっている場合、StarRocks クラスターを次のように構成してください。
- 各 FE および各 BE または CN で
kinit -kt keytab_path principalコマンドを実行して、Key Distribution Center (KDC) から Ticket Granting Ticket (TGT) を取得します。このコマンドを実行するには、HDFS クラスターおよび Hive metastore にアクセスする権限が必要です。このコマンドを使用して KDC にアクセスすることは時間に敏感です。したがって、このコマンドを定期的に実行するために cron を使用する必要があります。 - 各 FE の $FE_HOME/conf/fe.conf ファイルおよび各 BE の $BE_HOME/conf/be.conf ファイルまたは各 CN の $CN_HOME/conf/cn.conf ファイルに
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"を追加します。この例では、/etc/krb5.confは krb5.conf ファイルの保存パスです。必要に応じてパスを変更できます。
Iceberg catalog の作成
構文
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "iceberg",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams
)
パラメータ
catalog_name
Iceberg catalog の名前です。命名規則は次のとおりです。
- 名前には文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。名前は文字で始める必要があります。
- 名前は大文字と小文字を区別し、長さは 1023 文字を超えてはなりません。
comment
Iceberg catalog の説明です。このパラメータはオプションです。
type
データソースのタイプです。値を iceberg に設定します。
MetastoreParams
StarRocks がデータソースのメタストアと統合する方法に関する一連のパラメータです。メタストアタイプに応じたタブを選択してください。
- Hive metastore
- AWS Glue
- Tabular
Hive metastore
データソースのメタストアとして Hive metastore を選択した場合、MetastoreParams を次のように構成します。
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
Iceberg データをクエリする前に、Hive metastore ノードのホスト名と IP アドレスのマッピングを /etc/hosts パスに追加する必要があります。そうしないと、クエリを開始する際に StarRocks が Hive metastore にアクセスできない可能性があります。
次の表は、MetastoreParams で構成する必要があるパラメータを説明しています。
iceberg.catalog.type
必須: はい
説明: Iceberg クラスターで使用するメタストアのタイプです。値を hive に設定します。
hive.metastore.uris
必須: はい
説明: Hive metastore の URI です。形式: thrift://<metastore_IP_address>:<metastore_port>。
Hive metastore に高可用性 (HA) が有効になっている場合、複数のメタストア URI を指定し、カンマ (,) で区切ることができます。例: "thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>"。
AWS Glue
データソースのメタストアとして AWS Glue を選択した場合、これは AWS S3 をストレージとして選択した場合にのみサポートされます。次のいずれかのアクションを実行します。
-
インスタンスプロファイルベースの認証方法を選択するには、
MetastoreParamsを次のように構成します。"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
アサインされたロールベースの認証方法を選択するには、
MetastoreParamsを次のように構成します。"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "<iam_role_arn>",
"aws.glue.region" = "<aws_glue_region>" -
IAM ユーザーベースの認証方法を選択するには、
MetastoreParamsを次のように構成します。"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "<aws_s3_region>"
AWS Glue 用の MetastoreParams:
iceberg.catalog.type
必須: はい
説明: Iceberg クラスターで使用するメタストアのタイプです。値を glue に設定します。
aws.glue.use_instance_profile
必須: はい
説明: インスタンスプロファイルベースの認証方法およびアサインされたロールベースの認証方法を有効にするかどうかを指定します。 有効な値: true および false。 デフォルト値: false。
aws.glue.iam_role_arn
必須: いいえ 説明: AWS Glue Data Catalog に対する権限を持つ IAM ロールの ARN です。アサインされたロールベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.region
必須: はい
説明: AWS Glue Data Catalog が存在するリージョンです。例: us-west-1。
aws.glue.access_key
必須: いいえ 説明: AWS IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.secret_key
必須: いいえ 説明: AWS IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
AWS Glue へのアクセス認証方法の選択方法および AWS IAM コンソールでのアクセス制御ポリシーの構成方法については、AWS Glue へのアクセス認証パラメータを参照してください。
Tabular
メタストアとして Tabular を使用する場合、メタストアのタイプを REST ("iceberg.catalog.type" = "rest") として指定する必要があります。MetastoreParams を次のように構成します。
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<rest_server_api_endpoint>",
"iceberg.catalog.credential" = "<credential>",
"iceberg.catalog.warehouse" = "<identifier_or_path_to_warehouse>"
Tabular 用の MetastoreParams:
iceberg.catalog.type
必須: はい
説明: Iceberg クラスターで使用するメタストアのタイプです。値を rest に設定します。
iceberg.catalog.uri
必須: はい
説明: Tabular サービスエンドポイントの URI です。例: https://api.tabular.io/ws。
iceberg.catalog.credential
必須: はい 説明: Tabular サービスの認証情報です。
iceberg.catalog.warehouse
必須: いいえ
説明: Iceberg catalog のウェアハウスの場所または識別子です。例: s3://my_bucket/warehouse_location または sandbox。
次の例は、メタストアとして Tabular を使用する Iceberg catalog tabular を作成する例です。
CREATE EXTERNAL CATALOG tabular
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "https://api.tabular.io/ws",
"iceberg.catalog.credential" = "t-5Ii8e3FIbT9m0:aaaa-3bbbbbbbbbbbbbbbbbbb",
"iceberg.catalog.warehouse" = "sandbox"
);
StorageCredentialParams
StarRocks がストレージシステムと統合する方法に関する一連のパラメータです。このパラメータセットはオプションです。
次の点に注意してください。
-
ストレージとして HDFS を使用する場合、
StorageCredentialParamsを構成する必要はなく、このセクションをスキップできます。AWS S3、他の S3 互換ストレージシステム、Microsoft Azure Storage、または Google GCS をストレージとして使用する場合、StorageCredentialParamsを構成する必要があります。 -
メタストアとして Tabular を使用する場合、
StorageCredentialParamsを構成する必要はなく、このセクションをスキップできます。メタストアとして HMS または AWS Glue を使用する場合、StorageCredentialParamsを構成する必要があります。
ストレージタイプに応じたタブを選択してください。
- AWS S3
- HDFS
- MinIO
- Microsoft Azure Blob Storage
- Google GCS
AWS S3
Iceberg クラスターのストレージとして AWS S3 を選択した場合、次のいずれかのアクションを実行します。
-
インスタンスプロファイルベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>" -
アサインされたロールベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<iam_role_arn>",
"aws.s3.region" = "<aws_s3_region>" -
IAM ユーザーベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "<aws_s3_region>"
AWS S3 用の StorageCredentialParams:
aws.s3.use_instance_profile
必須: はい
説明: インスタンスプロファイルベースの認証方法およびアサインされたロールベースの認証方法を有効にするかどうかを指定します。 有効な値: true および false。 デフォルト値: false。
aws.s3.iam_role_arn
必須: いいえ 説明: AWS S3 バケットに対する権限を持つ IAM ロールの ARN です。アサインされたロールベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.region
必須: はい
説明: AWS S3 バケ ットが存在するリージョンです。例: us-west-1。
aws.s3.access_key
必須: いいえ 説明: IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.secret_key
必須: いいえ 説明: IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
AWS S3 へのアクセス認証方法の選択方法および AWS IAM コンソールでのアクセス制御ポリシーの構成方法については、AWS S3 へのアクセス認証パラメータを参照してください。
HDFS ストレージを使用する場合、ストレージ資格情報をスキップします。
S3 互換ストレージシステム
Iceberg catalog は v2.5 以降 で S3 互換ストレージシステムをサポートしています。
S3 互換ストレージシステム(例: MinIO)を Iceberg クラスターのストレージとして選択した場合、StorageCredentialParams を次のように構成して、統合を成功させます。
"aws.s3.enable_ssl" = "false",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
MinIO およびその他の S3 互換システム用の StorageCredentialParams:
aws.s3.enable_ssl
必須: はい
説明: SSL 接続を有効にするかどうかを指定します。
有効な値: true および false。 デフォルト値: true。
aws.s3.enable_path_style_access
必須: はい
説明: パススタイルアクセスを有効にするかどうかを指定します。
有効な値: true および false。 デフォルト値: false。 MinIO では、値を true に設定する必要があります。
パススタイル URL は次の形式を使用します: https://s3.<region_code>.amazonaws.com/<bucket_name>/<key_name>。 例: US West (Oregon) リージョンに DOC-EXAMPLE-BUCKET1 という名前のバケットを作成し、そのバケット内の alice.jpg オブジェクトにアクセスする場合、次のパススタイル URL を使用できます: https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/alice.jpg。
aws.s3.endpoint
必須: はい 説明: AWS S3 の代わりに S3 互換ストレージシステムに接続するために使用されるエンドポイントです。
aws.s3.access_key
必須: はい 説明: IAM ユーザーのアクセスキーです。
aws.s3.secret_key
必須: はい 説明: IAM ユーザーのシークレットキーです。
Microsoft Azure Storage
Iceberg catalog は v3.0 以降で Microsoft Azure Storage をサポートしています。
Azure Blob Storage
Iceberg クラスターのストレージとして Blob Storage を選択した場合、次のいずれかのアクションを実行します。
-
共有キー認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.shared_key" = "<storage_account_shared_key>" -
SAS トークン認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.container" = "<container_name>",
"azure.blob.sas_token" = "<storage_account_SAS_token>"
Microsoft Azure 用の StorageCredentialParams:
azure.blob.storage_account
必須: はい 説明: Blob Storage アカウントのユーザー名です。
azure.blob.shared_key
必須: はい 説明: Blob Storage アカウントの共有キーです。
azure.blob.account_name
必須: はい 説明: Blob Storage アカウントのユーザー名です。
azure.blob.container
必須: はい 説明: データを保存する Blob コンテナの名前です。
azure.blob.sas_token
必須: はい 説明: Blob Storage アカウントにアクセスするために使用される SAS トークンです。
Azure Data Lake Storage Gen1
Iceberg クラスターのストレージとして Data Lake Storage Gen1 を選択した場合、次のいずれかのアクションを実行します。
-
マネージドサービスアイデンティティ認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.adls1.use_managed_service_identity" = "true"
または:
-
サービスプリンシパル認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.adls1.oauth2_client_id" = "<application_client_id>",
"azure.adls1.oauth2_credential" = "<application_client_credential>",
"azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"
Azure Data Lake Storage Gen2
Iceberg クラスターのストレージとして Data Lake Storage Gen2 を選択した場合、次のいずれかのアクションを実行します。
-
マネージドアイデンティティ認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.adls2.oauth2_use_managed_identity" = "true",
"azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
"azure.adls2.oauth2_client_id" = "<service_client_id>"または:
-
共有キー認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<storage_account_shared_key>"または:
-
サービスプリンシパル認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"azure.adls2.oauth2_client_id" = "<service_client_id>",
"azure.adls2.oauth2_client_secret" = "<service_principal_client_secret>",
"azure.adls2.oauth2_client_endpoint" = "<service_principal_client_endpoint>"
Google GCS
Iceberg catalog は v3.0 以降で Google GCS をサポートしています。
Iceberg クラスターのストレージとして Google GCS を選択した場合、次のいずれかのアクションを実行します。
-
VM ベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"gcp.gcs.use_compute_engine_service_account" = "true" -
サービスア カウントベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
"gcp.gcs.service_account_private_key" = "<google_service_private_key>" -
インパーソネーションベースの認証方法を選択するには、
StorageCredentialParamsを次のように構成します。-
VM インスタンスにサービスアカウントをインパーソネートさせるには:
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>" -
サービスアカウント(仮にメタサービスアカウントと呼ぶ)が別のサービスアカウント(仮にデータサービスアカウントと呼ぶ)をインパーソネートするには:
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
"gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
"gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"
-
Google GCS 用の StorageCredentialParams:
gcp.gcs.service_account_email
デフォルト値: "" 例: "user@hello.iam.gserviceaccount.com" 説明: サービスアカウントの作成時に生成された JSON ファイル内のメールアドレス。
gcp.gcs.service_account_private_key_id
デフォルト値: "" 例: "61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea" 説明: サービスアカウントの作成時に生成された JSON ファイル内のプライベートキー ID。
gcp.gcs.service_account_private_key
デフォルト値: "" 例: "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n" 説明: サービスアカウントの作成時に生成された JSON ファイル内のプライベートキー。
gcp.gcs.impersonation_service_account
デフォルト値: "" 例: "hello" 説明: インパーソネートしたいサービスアカウント。
MetadataUpdateParams
StarRocks が Iceberg メタデータのキャッシュを更新する方法に関する一連のパラメータです。このパラメータセットはオプションです。
v3.3.3 以降、StarRocks は 定期的なメタデータ更新戦略 をサポートしています。ほとんどの場合、MetadataUpdateParams を無視し、そのポリシーパラメータを調整する必要はありません。これらのパラメータのデフォルト値は、すぐに使用できるパフォーマンスを提供します。システム変数 plan_mode を使用して Iceberg メタデータキャッシングプランを調整できます。
| パラメータ | デフォルト | 説明 |
|---|---|---|
| enable_iceberg_metadata_cache | true | Iceberg 関連のメタデータ(Table Cache、Partition Name Cache、Manifest 内の Data File Cache および Delete Data File Cache を含む)をキャッシュするかどうか。 |
| iceberg_manifest_cache_with_column_statistics | false | 列の統計情報をキャッシュするかどうか。 |
| iceberg_manifest_cache_max_num | 100000 | キャッシュできる Manifest ファイルの最大数。 |
| refresh_iceberg_manifest_min_length | 2 * 1024 * 1024 | Data File Cache の更新をトリガーする最小の Manifest ファイルの長さ。 |
例
次の例は、使用するメタストアのタイプに応じて iceberg_catalog_hms または iceberg_catalog_glue という名前の Iceberg catalog を作成し、Iceberg クラスターからデータをクエリする例です。ストレージタイプに応じたタブを選択してください。
- AWS S3
- HDFS
- MinIO
- Microsoft Azure Blob Storage
- Google GCS
AWS S3
インスタンスプロファイルベースの資格情報を選択した場合
-
Iceberg クラスターで Hive metastore を使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
); -
Amazon EMR Iceberg クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);
アサインされたロールベースの資格情報を選択した場合
-
Iceberg クラスターで Hive metastore を使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
"aws.s3.region" = "us-west-2"
); -
Amazon EMR Iceberg クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "arn:aws:iam::081976408565:role/test_glue_role",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
"aws.s3.region" = "us-west-2"
);
IAM ユーザーベースの資格情報を選択した場合
- Iceberg クラスターで Hive metastore を使用する場合、次のようなコマンド を実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_access_key>",
"aws.s3.region" = "us-west-2"
);
-
Amazon EMR Iceberg クラスターで AWS Glue を使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-2"
);
HDFS
HDFS をストレージとして使用する場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);
S3 互換ストレージシステム
MinIO を例として使用します。次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.enable_ssl" = "true",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
);
Microsoft Azure Storage
Azure Blob Storage
-
共有キー認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.shared_key" = "<blob_storage_account_shared_key>"
); -
SAS トークン認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.container" = "<blob_container_name>",
"azure.blob.sas_token" = "<blob_storage_account_SAS_token>"
);
Azure Data Lake Storage Gen1
-
マネージドサービスアイデンティティ認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.use_managed_service_identity" = "true"
); -
サービスプリンシパル認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.oauth2_client_id" = "<application_client_id>",
"azure.adls1.oauth2_credential" = "<application_client_credential>",
"azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"
);
Azure Data Lake Storage Gen2
-
マネージドアイデンティティ認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.oauth2_use_managed_identity" = "true",
"azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
"azure.adls2.oauth2_client_id" = "<service_client_id>"
); -
共有キー認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<shared_key>"
); -
サービスプリンシパル認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.oauth2_client_id" = "<service_client_id>",
"azure.adls2.oauth2_client_secret" = "<service_principal_client_secret>",
"azure.adls2.oauth2_client_endpoint" = "<service_principal_client_endpoint>"
);
Google GCS
-
VM ベ ースの認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.use_compute_engine_service_account" = "true"
); -
サービスアカウントベースの認証方法を選択した場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
"gcp.gcs.service_account_private_key" = "<google_service_private_key>"
); -
インパーソネーションベースの認証方法を選択した場合:
-
VM インスタンスにサービスアカウントをインパーソネートさせる場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"
); -
サービスアカウントが別のサービスアカウントをインパーソネートする場合、次のようなコマンドを実行します。
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
"gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
"gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"
);
-
catalog の使用
Iceberg catalog の表示
現在の StarRocks クラスター内のすべての catalog をクエリするには、SHOW CATALOGS を使用できます。
SHOW CATALOGS;
外部 catalog の作成ステートメントをクエリするには、SHOW CREATE CATALOG を使用できます。次の例では、iceberg_catalog_glue という名前の Iceberg catalog の作成ステートメントをクエリします。
SHOW CREATE CATALOG iceberg_catalog_glue;
Iceberg Catalog とその中のデータベースに切り替える
Iceberg catalog とその中のデータベースに切り替えるには、次のいずれかの方法を使用できます。
-
現在のセッションで Iceberg catalog を指定するには SET CATALOG を使用し、アクティブなデータベースを指定するには USE を使用します。
-- 現在のセッションで指定された catalog に切り替える:
SET CATALOG <catalog_name>
-- 現在のセッションでアクティブなデータベースを指定する:
USE <db_name> -
Iceberg catalog とその中のデータベースに直接切り替えるには USE を使用します。
USE <catalog_name>.<db_name>
Iceberg catalog の削除
外部 catalog を削除するには、DROP CATALOG を使用できます。
次の例では、iceberg_catalog_glue という名前の Iceberg catalog を削除します。
DROP Catalog iceberg_catalog_glue;
Iceberg テーブルのスキーマを表示する
Iceberg テーブルのスキーマを表示するには、次のいずれかの構文を使用できます。
-
スキーマを表示する
DESC[RIBE] <catalog_name>.<database_name>.<table_name> -
CREATE ステートメントからスキーマと場所を表示する
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>
Iceberg テーブルをクエリする
-
Iceberg クラスター内のデータベースを表示するには、SHOW DATABASES を使用します。
SHOW DATABASES FROM <catalog_name> -
指定されたデータベース内の宛先テーブルをクエリするには、SELECT を使用します。
SELECT count(*) FROM <table_name> LIMIT 10
Iceberg データベースの作成
StarRocks の内部 catalog と同様に、Iceberg catalog に対して CREATE DATABASE 権限を持っている場合、その Iceberg catalog 内でデータベースを作成するために CREATE DATABASE ステートメントを使用できます。この機能は v3.1 以降でサポートされています。
Iceberg catalog に切り替える し、その catalog 内で Iceberg データベースを作成するために次のステートメントを使用します。
CREATE DATABASE <database_name>
[PROPERTIES ("location" = "<prefix>://<path_to_database>/<database_name.db>/")]
location パラメータを使用して、データベースを作成するファイルパスを指定できます。HDFS とクラウドストレージの両方がサポートされています。location パラメータを指定しない場合、StarRocks は Iceberg catalog のデフォルトのファイルパスにデータベースを作成します。
使用するストレージシステムに基づいて prefix が異なります。
HDFS
Prefix 値: hdfs
Google GCS
Prefix 値: gs
Azure Blob Storage
Prefix 値:
- ストレージアカウントが HTTP 経由で のアクセスを許可する場合、
prefixはwasbです。 - ストレージアカウントが HTTPS 経由でのアクセスを許可する場合、
prefixはwasbsです。
Azure Data Lake Storage Gen1
Prefix 値: adl
Azure Data Lake Storage Gen2
Prefix 値:
- ストレージアカウントが HTTP 経由でのアクセスを許可する場合、
prefixはabfsです。 - ストレージアカウントが HTTPS 経由でのアクセスを許可する場合、
prefixはabfssです。
AWS S3 またはその他の S3 互換ストレージ(例: MinIO)
Prefix 値: s3