Iceberg catalog
この例では、StarRocks Basics クイックスタートで紹介されている Local Climatological Data (LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
Iceberg catalog は、StarRocks が v2.4 以降でサポートする外部 catalog の一種です。Iceberg catalog を使用すると、以下のことが可能です。
- Iceberg に保存されたデータを直接クエリし、手動でテーブルを作成する必要がありません。
- INSERT INTO または非同期マテリアライズドビュー(v2.5 以降でサポート)を使用して、Iceberg に保存されたデータを処理し、StarRocks にデータをロードします。
- StarRocks 上で Iceberg データベースやテーブルを作成または削除したり、StarRocks テーブルから Parquet 形式の Iceberg テーブルにデータをシンクする操作を INSERT INTO を使用して行います(この機能は 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,
MetadataRelatedParams
)
パラメータ
catalog_name
Iceberg catalog の名前。命名規則は次の通りです。
- 名前には文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。文字で始まる必要があります。
- 名前は大文字と小文字を区別し、長さは 1023 文字を超えてはなりません。
comment
Iceberg catalog の説明。このパラメータはオプションです。
type
データソースのタイプ。値を iceberg に設定します。
MetastoreParams
データソースのメタストアと StarRocks がどのように統合するかに関する一連のパラメータ。メタストアタイプに合ったタブを選択してください。
- Hive metastore
- AWS Glue
- REST
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.catalog_id- 必須: いいえ
- 説明: 使用する AWS Glue Data Catalog の ID。指定しない場合、現在の AWS アカウントのカタログが使用されます。別の AWS アカウントの Glue Data Catalog にアクセスする(クロスアカウントアクセス)必要がある場合は、このパラメータを指定する必要があります。
AWS Glue へのアクセス認証方法の選択方法および AWS IAM コンソールでのアクセス制御ポリシーの構成方法については、 AWS Glue へのアクセス認証パラメーター を参照してください。
REST
S3テーブル用のIceberg RESTカタログの作成方法の詳細については、AWS S3テーブル用のIceberg REST Catalog を参照してください。
メタストアとして REST を使用する場合、メタストアのタイプを REST ("iceberg.catalog.type" = "rest") として指定する必要があります。MetastoreParams を次のように設定します。
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<rest_server_api_endpoint>",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "<credential>",
"iceberg.catalog.warehouse" = "<identifier_or_path_to_warehouse>"
REST catalog 用の MetastoreParams:
-
iceberg.catalog.type- 必須: はい
- 説明: Iceberg クラスターで使用するメタストアのタイプ。値を
restに設定します。
-
iceberg.catalog.uri- 必須: はい
- 説明: REST サービスエンドポイントの URI。例:
https://api.tabular.io/ws。
-
iceberg.catalog.view-endpoints-supported- 必須: いいえ
- 説明: 以前のバージョンの REST サービスが
CatalogConfigでエンドポイントを返さない場合に、ビュー関連の操作をサポートするためにビューエンドポイントを使用するかどうか。このパラメータは初期のバージョンの REST サーバとの下位互換性のために使用される。デフォルト:false。
-
iceberg.catalog.security- 必須: いいえ
- 説明: 使用する認証プロトコルのタイプ。デフォルト:
NONE。有効な値:OAUTH2。OAUTH2認証プロトコルにはtokenまたはcredentialが必要です。
-
iceberg.catalog.oauth2.token- 必須: いいえ
- 説明: サーバーとのやり取りに使用されるベアラートークン。
OAUTH2認証プロトコルにはtokenまたはcredentialが必要です。例:AbCdEf123456。
-
iceberg.catalog.oauth2.credential- 必須: いいえ
- 説明: サーバーとの OAuth2 クライアント資格情報フローでトークンと交換するための資格情報。
OAUTH2認証プロトコルにはtokenまたはcredentialが必要です。例:AbCdEf123456。
-
iceberg.catalog.oauth2.scope- 必須: いいえ
- 説明: REST Catalog と通信する際に使用するスコープ。
credentialを使用する場合にのみ適用されます。
-
iceberg.catalog.oauth2.server-uri- 必須: いいえ
- 説明: OAuth2 サーバーからアクセストークンを取得するた めのエンドポイント。
-
iceberg.catalog.vended-credentials-enabled- 必須: いいえ
- 説明: ファイルシステムアクセスのために REST バックエンドによって提供される資格情報を使用するかどうか。デフォルト:
true。
-
iceberg.catalog.warehouse- 必須: いいえ
- 説明: Iceberg catalog のウェアハウスの場所または識別子。例:
s3://my_bucket/warehouse_locationまたはsandbox。
-
iceberg.catalog.rest.nested-namespace-enabled- 必須: いいえ
- 説明: 入れ子になった Namespace の下にあるオブジェクトのクエリをサポートするかどうか。デフォルト:
false。
次の例は、メタストアとして 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.oauth2.credential" = "t-5Ii8e3FIbT9m0:aaaa-3bbbbbbbbbbbbbbbbbbb",
"iceberg.catalog.warehouse" = "sandbox"
);
次の例は、メタストアとして Polaris を使用する Iceberg catalog smith_polaris を作成します。
CREATE EXTERNAL CATALOG smith_polaris
PROPERTIES (
"iceberg.catalog.uri" = "http://xxx.xx.xx.xxx:8181/api/catalog",
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.warehouse" = "starrocks_catalog",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL'
);
# `ns1.ns2.tpch_namespace` はネストされた名前空間です
create table smith_polaris.`ns1.ns2.tpch_namespace`.tbl (c1 string);
mysql> select * from smith_polaris.`ns1.ns2.tpch_namespace`.tbl;
+------+
| c1 |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.34 sec)
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。