Iceberg catalog
Iceberg catalog は、Apache Iceberg からデータを取り込まずにクエリを実行できる external catalog です。Iceberg クラスターでの SQL ワークロードを成功させるためには、CelerData クラスターが Iceberg クラスターのストレージシステムとメタストアにアクセスできる必要があります。CelerData は以下のストレージシステムとメタストアをサポートしています。
-
AWS S3 のようなオブジェクトストレージ
-
Hive metastore (HMS) や AWS Glue のようなメタストア
NOTE
ストレージとして AWS S3 を選択する場合、メタストアとして HMS または AWS Glue を使用できます。他のストレージシステムを選択する場合、メタストアとしては HMS のみを使用できます。
使用上の注意
-
CelerData がサポートする Iceberg のファイル形式は Parquet と ORC です。
- Parquet ファイルは、SNAPPY、LZ4、ZSTD、GZIP、NO_COMPRESSION の圧縮形式をサポートしています。
- ORC ファイルは、ZLIB、SNAPPY、LZO、LZ4、ZSTD、NO_COMPRESSION の圧縮形式をサポートしています。
-
Iceberg catalogs は、v1 テーブルに加えて、ORC 形式の v2 テーブルと Parquet 形式の v2 テーブルをサポートしています。
準備
Iceberg catalog を作成する前に、CelerData クラスターが Iceberg クラスターのストレージシステムとメタストアと統合できることを確認してください。
Hive metastore
Iceberg クラスターが Hive metastore をメタストアとして使用している場合、CelerData が Hive metastore のホストにアクセスできることを確認してください。
NOTE
通常、CelerData クラスターと Hive metastore の統合を有効にするために、以下のいずれかのアクションを実行できます。
- CelerData クラスターと Hive metastore を同じ VPC にデプロイする。
- CelerData クラスターの VPC と Hive metastore の VPC の間に VPC ピアリング接続を構成する。
次に、Hive metastore のセキュリティグループの設定を確認し、CelerData クラスターのセキュリティグループからのインバウンドトラフィックを許可するインバウ ンドルールが設定されていること、およびポート範囲がデフォルトポート 9083 をカバーしていることを確認してください。
AWS
Iceberg クラスターが AWS S3 をストレージとして使用している場合、または AWS Glue をメタストアとして使用している場合、適切な認証方法を選択し、IAM ロールまたはユーザーを作成し、指定された IAM ロールまたはユーザーに IAM ポリシーを追加するなど、必要な準備を行って、CelerData クラスターがこれらの AWS リソースにアクセスできるようにしてください。詳細については、Authenticate to AWS resources > Preparations を参照してください。
Microsoft Azure Storage
Iceberg クラスターが Azure をストレージとして使用している場合、適切な認証方法を選択し、ロールの割り当てを追加するなど、必要な準備を行ってください。詳細については、Authenticate to Azure cloud storage を参照してください。
Iceberg catalog の作成
構文
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "iceberg",
MetastoreParams,
StorageCredentialParams
)
パラメータ
catalog_name
Iceberg catalog の名前です。命名規則は以下の通りです。
- 名前には、文字、数字 (0-9)、およびアンダースコア (_) を含めることができます。名前は文字で始める必要があります。
- 名前は大文字と小文字を区別し、長さは 1023 文字を超えてはなりません。
comment
Iceberg catalog の説明です。このパラメータはオプションです。
type
データソースのタイプです。値を iceberg
に設定します。
MetastoreParams
CelerData がデータソースのメタストアと統合する方法に関する一連のパラメータです。
Hive metastore
データソースのメタストアとして Hive metastore を選択する場合、MetastoreParams
を次のように構成します。
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
以下の表は、MetastoreParams
で構成する必要があるパラメータを説明しています。
Parameter | Required | Description |
---|---|---|
iceberg.catalog.type | Yes | Iceberg クラスターで使用するメタストアのタイプです。値を hive に設定します。 |
hive.metastore.uris | Yes | 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>"
以下の表は、MetastoreParams
で構成する必要があるパラメータを説明しています。
Parameter | Required | Description |
---|---|---|
iceberg.catalog.type | Yes | Iceberg クラスターで使用するメタストアのタイプです。値を glue に設定します。 |
aws.glue.use_instance_profile | Yes | インスタンスプロファイルベースの認証方法とアサインされたロールベースの認証を有効にするかどうかを指定します。有効な値: true および false 。デフォルト値: false 。 |
aws.glue.iam_role_arn | No | AWS Glue Data Catalog に対する権限を持つ IAM ロールの ARN です。AWS Glue にアクセスするためにアサイ ンされたロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。 |
aws.glue.region | Yes | AWS Glue Data Catalog が存在するリージョンです。例: us-west-1 。 |
aws.glue.access_key | No | AWS IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。 |
aws.glue.secret_key | No | AWS IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。 |
AWS Glue にアクセスするための認証方法の選択方法と AWS IAM コンソールでのアクセス制御ポリシーの設定方法については、Authentication parameters for accessing AWS Glue を参照してください。
StorageCredentialParams
CelerData クラスターがオブジェクトストレージと統合する方法に関する一連のパラメータです。
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>"
以下の表は、StorageCredentialParams
で構成する必要があるパラメータを説明しています。
Parameter | Required | Description |
---|---|---|
aws.s3.use_instance_profile | Yes | インスタンスプロファイルベースの認証方法とアサインされたロールベースの認証方法を有効にするかどうかを指定します。有効な値: true および false 。デフォルト値: false 。 |
aws.s3.iam_role_arn | No | AWS S3 バケットに対する権限を持つ IAM ロールの ARN です。AWS S3 にアクセスするためにアサインされたロールベースの認証方法を使用する場合、このパラメータを指定する必要があります。 |
aws.s3.region | Yes | AWS S3 バケットが存在するリージョンです。例: us-west-1 。 |
aws.s3.access_key | No | IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。 |
aws.s3.secret_key | No | IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。 |
AWS S3 にアクセスするための認証方法の選択方法と AWS IAM コンソールでのアクセス制御ポリシーの設定方法については、Authentication parameters for accessing AWS S3 を参照してください。
Microsoft Azure Storage
このセクションでは、さまざまな Azure クラウドストレージサービスとさまざまな認証方法を使用して統合するために StorageCredentialParams
で構成する必要があるパラメータについて説明します。これらのパラメータの値を取得する方法については、Authenticate to Azure cloud storage を参照してください。
Azure Blob Storage
Blob Storage を Iceberg クラスターのストレージとして選択する場合、以下のいずれかのアクションを実行します。
-
共有キー認証方法を使用する場合、
StorageCredentialParams
を次のように構成します。"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.shared_key" = "<blob_storage_account_shared_key>"以下の表は、パラメータを説明しています。
Parameter Description azure.blob.storage_account Blob ストレージアカウントの名前です。 azure.blob.shared_key Blob ストレージアカウントの共有キー (アクセスキー) です。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを保存するために使用されるものでなければなりません。
-
SAS トークン認証方法を使用する場合、
StorageCredentialParams
を次のように構成します。"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.container" = "<container_name>",
"azure.blob.sas_token" = "<storage_account_SAS_token>"以下の表は、パラメータを説明しています。
Parameter Description azure.blob.storage_account Blob ストレージアカウントの名前です。 azure.blob.container Blob ストレージアカウント内のデータを保存する Blob コンテナの名前です。 azure.blob.sas_token Blob ストレージアカウントにアクセスするために使用される SAS トークンです。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを保存するために使用されるものでなければなりません。
Azure Data Lake Storage Gen2
Data Lake Storage Gen2 を Iceberg クラスターのストレージとして選択する場合、以下のいずれかのアクションを実行します。
-
マネージドアイデンティティ認証方法を使用する場合、
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>"以下の表は、パラメータを説明しています。
Parameter Description azure.adls2.oauth2_use_managed_identity マネージドアイデンティティ認証方法を有効にするかどうかを指定します。値を true
に設定します。azure.adls2.oauth2_tenant_id ADLS Gen2 ストレージアカウントのテナント ID です。 azure.adls2.oauth2_client_id デスティネーションクラスターのデータクレデンシャルで参照されるマネージドアイデンティティのクライアント ID です。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを保存するために使用されるものでなければならず、マネージドアイデンティティは CelerData クラスターのデプロイに使用され、ストレージアカウントに対す る必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられているものでなければなりません。
-
共有キー認証方法を使用する場合、
StorageCredentialParams
を次のように構成します。"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<storage_account_shared_key>"以下の表は、パラメータを説明しています。
Parameter Description azure.adls2.storage_account ADLS Gen2 ストレージアカウントの名前です。 azure.adls2.shared_key ADLS Gen2 ストレージアカウントの共有キー (アクセスキー) です。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを保存するために使用されるものでなければなりません。
-
サービスプリンシパル認証方法を使用する場合、
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>"以下の表は、パラメータを説明しています。
Parameter Description azure.adls2.oauth2_client_id サービスプリンシパルのアプリケーション (クライアント) ID です。 azure.adls2.oauth2_client_secret サービスプリンシパルのクライアントシークレットの値です。 azure.adls2.oauth2_client_endpoint サービスプリンシパルの OAuth 2.0 トークンエンドポイント (v1) です。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを保存するために使用されるものでなければならず、サービスプリンシパルは CelerData クラスターのデプロイに使用され、ストレージアカウントに対する必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられているものでなければなりません。
Azure Data Lake Storage Gen1
Data Lake Storage Gen1 を Iceberg クラスターのストレージとして選択する場合、以下のいずれかのアクションを実行します。
-
マネージドサービスアイデンティティ認証方法を使用する場合、
StorageCredentialParams
を次のように構成します。"azure.adls1.use_managed_service_identity" = "true"
以下の表は、パラメータを説明しています。
Parameter Description 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>"以下の表は、パラメータを説明しています。
Parameter Description azure.adls1.oauth2_client_id サービスプリンシパルのアプリケーション (クライアント) ID です。 azure.adls1.oauth2_credential サービスプリンシパルのクライアントシークレットの値です。 azure.adls1.oauth2_endpoint サービスプリンシパルまたはアプリケーションの OAuth 2.0 トークンエンドポイント (v1) です。 NOTICE
認証に使用するストレージアカウントは、Iceberg クラスターのデータを 保存するために使用されるものでなければならず、サービスプリンシパルは CelerData クラスターのデプロイに使用され、ストレージアカウントに対する必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられているものでなければなりません。
例
以下の例では、使用するメタストアのタイプに応じて、Iceberg クラスターからデータをクエリするための iceberg_catalog_hms
または iceberg_catalog_glue
という名前の Iceberg catalog を作成します。
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"
);
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 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>"
);
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>"
);
Iceberg catalogs の表示
現在の CelerData クラスター内のすべての catalog をクエリするには、SHOW CATALOGS を使用できます。
SHOW CATALOGS;
また、external 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> -
USE を直接使用して、Iceberg catalog とその中のデータベースに切り替えます。
USE <catalog_name>.<db_name>