Iceberg catalog
この例では、StarRocks Basics クイックスタートで紹介されている Local Climatological Data (LCD) データセットを使用しています。データをロードして、自分で例を試すことができます。
Iceberg catalog は、StarRocks が v2.4 以降でサポートする外部 catalog の一種です。Iceberg catalog を使用すると、以下のことが可能です。
- Iceberg に保存されたデータを直接クエリし、手動でテーブルを作成する必要がありません。
- Iceberg に保存されたデータを処理し、StarRocks にデータをロードするために INSERT INTO または非同期マテリアライズドビュー(v2.5 以降でサポート)を使用します。
- 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 は HDFS クラスターおよび Hive metastore にアクセスするために FE および BE または CN プロセスのユーザー名を使用します。また、各 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",
[SecurityParams],
MetastoreParams,
StorageCredentialParams,
MetadataRelatedParams
)
パラメーター
catalog_name
Iceberg catalog の名前です。命名規則は次のとおりです。
- 名前には文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。文字で始める必要があります。
- 名前は大文字と小文字を区別し、長さは 1023 文字を超えることはできません。
comment
Iceberg catalog の説明です。このパラメーターはオプションです。
type
データソースのタイプです。値を iceberg に設定します。
SecurityParams
StarRock sがカタログへのデータアクセスを管理する方法に関するパラメータ。
Iceberg REST カタログのデータアクセス管理の詳細な手順については、Iceberg REST カタログのセキュリティ設定を参照してください。
catalog.access.control
データアクセス制御ポリシー。有効な値:
native(デフォルト): StarRocks 組み込みのデータアクセス制御システムを使用します。allowall: すべてのデータアクセスチェックをカタログ自体に委譲します。ranger: データアクセスチェックを Apache Ranger に委譲します。
MetastoreParams
StarRocks がデータソースのメタストアと統合する方法に関する一連のパラメーターです。メタストアタイプに一致するタブを選択してください。
- Hive metastore
- AWS Glue
- REST
- JDBC
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 へのアクセス認証パラメーター を参照してください。
REST
S3 テーブル用の Iceberg REST catalog の作成に関する詳細な手順については、 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およびJWT。この項目がOAUTH2に設定されている場合、tokenまたはcredentialのいずれかが必要です。この項目がJWTに設定されている場合、ユーザーはJWTメソッドを使用して StarRocks クラスターにログインする必要があります。tokenまたはcredentialを省略することも可能です。その場合、StarRocks はログイン済みユーザーの JWT を使用して Catalog にアクセスします。
-
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。
-
iceberg.catalog.rest.view-endpoints-enabled- 必須: いいえ
- 説明: ビュー関連の操作をサポートするためにビューエンドポイントを有効にするかどうか。
falseに設定すると、getViewなどのビュー操作が無効になります。デフォルト:true。
次の例は、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)
次の例は、Cloudflare R2 Data Catalog をメタストアとして使用する Iceberg catalog r2 を作成します。
CREATE EXTERNAL CATALOG r2
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<r2_catalog_uri>",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.token" = "<r2_api_token>",
"iceberg.catalog.warehouse" = "<r2_warehouse_name>"
);
SET CATALOG r2;
CREATE DATABASE testdb;
SHOW DATABASES FROM r2;
+--------------------+
| Database |
+--------------------+
| information_schema |
| testdb |
+--------------------+
2 rows in set (0.66 sec)
<r2_warehouse_name>,<r2_api_token>, および <r2_catalog_uri> の値は、 Cloudflare ダッシュボードの詳細 から取得します。
JDBC
データソースのメタストアとして JDBC を選択した場合、MetastoreParams を次のように構成します。
"iceberg.catalog.type" = "jdbc",
"iceberg.catalog.uri" = "<jdbc_uri>",
"iceberg.catalog.warehouse" = "<warehouse_location>"
次の表は、MetastoreParams で構成する必要があるパラメーターを説明しています。
-
iceberg.catalog.type- 必須:はい
- 説明:Icebergクラスタで使用するメタストアのタイプ。値を
jdbcに設定します。
-
iceberg.catalog.uri- 必須:はい
- 説明:データベースのURI。フォーマット:
jdbc:[mysql\|postgresql]://<DB_IP_address>:<DB_PORT>/<DB_NAME>。
-
iceberg.catalog.warehouse- 必須:はい
- 説明:Iceberg カタログの Warehouse の場所または識別子。例:
s3://my_bucket/warehouse_location。
説明: データベースのユーザー名。
-
iceberg.catalog.jdbc.user- 必須:いいえ
- 説明:データベースのユーザー名。
-
iceberg.catalog.jdbc.password- 必須:いいえ
- 説明:データベースのパスワード。
-
iceberg.catalog.jdbc.init-catalog-tables- 必須:いいえ
- 説明:
iceberg.catalog.uriで指定されたデータベースにメタデータを格納するためのテーブルiceberg_namespace_propertiesおよびiceberg_tablesを作成するかどうか。デフォルト値はfalseです。iceberg.catalog.uriで指定されたデータベースにこれらの 2 つのテーブルがまだ作成されていない場合はtrueを指定してください。
次の例は、Iceberg catalog iceberg_jdbc を作成し、メタストアとして JDBC を使用します。
CREATE EXTERNAL CATALOG iceberg_jdbc
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "jdbc",
"iceberg.catalog.warehouse" = "s3://my_bucket/warehouse_location",
"iceberg.catalog.uri" = "jdbc:mysql://ip:port/db_name",
"iceberg.catalog.jdbc.user" = "username",
"iceberg.catalog.jdbc.password" = "password",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
);
MySQL やその他のカスタム JDBC ドライバを使用する場合、対応する JAR ファイルを fe/lib ディレクトリおよび be/lib/jni-packages ディレクトリに配置する必要があります。
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>" -
REST カタログで Vended Credential(v4.0以降でサポート)を選択するには、
StorageCredentialParamsを次のように構成します。"aws.s3.region" = "<aws_s3_region>"
AWS S3 用の StorageCredentialParams:
aws.s3.use_instance_profile
- 必須: はい
- 説明: インスタンスプロファイルベースの認証方法と想定ロールベースの認証方法を有効にするかどうかを指定します。 有効な値:
trueおよびfalse。 デフォルト値:false。