メインコンテンツまでスキップ

Hudi catalog

Hudi catalog は、Apache Hudi からデータを取り込まずにクエリを実行できる external catalog です。Hudi クラスターで SQL ワークロードを成功させるためには、CelerData クラスターが Hudi クラスターのストレージシステムとメタストアにアクセスできる必要があります。CelerData は以下のストレージシステムとメタストアをサポートしています。

  • AWS S3 のようなオブジェクトストレージ

  • Hive metastore (HMS) や AWS Glue のようなメタストア

    NOTE

    ストレージとして AWS S3 を選択した場合、メタストアとして HMS または AWS Glue を使用できます。他のストレージシステムを選択した場合、メタストアとしては HMS のみ使用できます。

使用上の注意

  • CelerData がサポートする Hudi のファイル形式は Parquet です。Parquet ファイルは以下の圧縮形式をサポートしています: SNAPPY, LZ4, ZSTD, GZIP, NO_COMPRESSION。
  • CelerData は Hudi の Copy On Write (COW) テーブルと Merge On Read (MOR) テーブルを完全にサポートしています。

準備

Hudi catalog を作成する前に、CelerData クラスターが Hudi クラスターのストレージシステムとメタストアと統合できることを確認してください。

Hive metastore

Hudi クラスターがメタストアとして Hive metastore を使用している場合、CelerData が Hive metastore のホストにアクセスできることを確認してください。

NOTE

通常、CelerData クラスターと Hive metastore の統合を有効にするために、以下のいずれかのアクションを取ることができます。

  • CelerData クラスターと Hive metastore を同じ VPC にデプロイする。
  • CelerData クラスターの VPC と Hive metastore の VPC の間に VPC ピアリング接続を構成する。

次に、Hive metastore のセキュリティグループの設定を確認し、CelerData クラスターのセキュリティグループからのインバウンドトラフィックを許可するインバウンドルールが設定されていること、およびデフォルトポート 9083 がカバーされていることを確認してください。

AWS

Hudi クラスターがストレージとして AWS S3 を使用している場合、またはメタストアとして AWS Glue を使用している場合、適切な認証方法を選択し、IAM ロールやユーザーの作成、指定された IAM ロールやユーザーへの IAM ポリシーの追加など、必要な準備を行ってください。詳細については、Authenticate to AWS resources > Preparations を参照してください。

Microsoft Azure Storage

Hudi クラスターがストレージとして Azure を使用している場合、適切な認証方法を選択し、ロールの割り当てを追加するなどの必要な準備を行ってください。詳細については、Authenticate to Azure cloud storage を参照してください。

Hudi catalog の作成

構文

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

パラメータ

catalog_name

Hudi catalog の名前です。命名規則は以下の通りです。

  • 名前には文字、数字 (0-9)、アンダースコア (_) を含めることができます。文字で始まる必要があります。
  • 名前は大文字と小文字を区別し、長さは 1023 文字を超えることはできません。

comment

Hudi catalog の説明です。このパラメータはオプションです。

type

データソースのタイプです。値を hudi に設定します。

MetastoreParams

CelerData がデータソースのメタストアと統合する方法に関するパラメータのセットです。

Hive metastore

データソースのメタストアとして Hive metastore を選択した場合、MetastoreParams を以下のように設定します。

"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"

以下の表は、MetastoreParams に設定する必要があるパラメータを説明しています。

ParameterRequiredDescription
hive.metastore.typeYesHudi クラスターで使用するメタストアのタイプです。値を hive に設定します。
hive.metastore.urisYesHive 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 を以下のように設定します。

    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "<aws_glue_region>"
  • アサインされたロールベースの認証方法を選択する場合、MetastoreParams を以下のように設定します。

    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.iam_role_arn" = "<iam_role_arn>",
    "aws.glue.region" = "<aws_glue_region>"
  • IAM ユーザーベースの認証方法を選択する場合、MetastoreParams を以下のように設定します。

    "hive.metastore.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 に設定する必要があるパラメータを説明しています。

ParameterRequiredDescription
hive.metastore.typeYesHudi クラスターで使用するメタストアのタイプです。値を glue に設定します。
aws.glue.use_instance_profileYesインスタンスプロファイルベースの認証方法とアサインされたロールベースの認証を有効にするかどうかを指定します。有効な値: truefalse。デフォルト値: false
aws.glue.iam_role_arnNoAWS Glue Data Catalog に対する権限を持つ IAM ロールの ARN です。アサインされたロールベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.regionYesAWS Glue Data Catalog が存在するリージョンです。例: us-west-1
aws.glue.access_keyNoAWS IAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。
aws.glue.secret_keyNoAWS IAM ユーザーのシークレットキーです。IAM ユーザーベースの認証方法を使用して AWS Glue にアクセスする場合、このパラメータを指定する必要があります。

AWS Glue にアクセスするための認証方法の選択方法や AWS IAM コンソールでのアクセス制御ポリシーの設定方法については、Authentication parameters for accessing AWS Glue を参照してください。

StorageCredentialParams

CelerData クラスターがオブジェクトストレージと統合する方法に関するパラメータのセットです。

AWS S3

Hudi クラスターのストレージとして 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 に設定する必要があるパラメータを説明しています。

ParameterRequiredDescription
aws.s3.use_instance_profileYesインスタンスプロファイルベースの認証方法とアサインされたロールベースの認証方法を有効にするかどうかを指定します。有効な値: truefalse。デフォルト値: false
aws.s3.iam_role_arnNoAWS S3 バケットに対する権限を持つ IAM ロールの ARN です。アサインされたロールベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.regionYesAWS S3 バケットが存在するリージョンです。例: us-west-1
aws.s3.access_keyNoIAM ユーザーのアクセスキーです。IAM ユーザーベースの認証方法を使用して AWS S3 にアクセスする場合、このパラメータを指定する必要があります。
aws.s3.secret_keyNoIAM ユーザーのシークレットキーです。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

Hudi クラスターのストレージとして Blob Storage を選択した場合、以下のいずれかのアクションを取ります。

  • 共有キー認証方法を使用する場合、StorageCredentialParams を以下のように設定します。

    "azure.blob.storage_account" = "<storage_account_name>",
    "azure.blob.shared_key" = "<storage_account_shared_key>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.blob.storage_accountBlob ストレージアカウントの名前です。
    azure.blob.shared_keyBlob ストレージアカウントの共有キー (アクセスキー) です。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があります。

  • SAS トークン認証方法を使用する場合、StorageCredentialParams を以下のように設定します。

    "azure.blob.storage_account" = "<storage_account_name>",
    "azure.blob.container" = "<container_name>",
    "azure.blob.sas_token" = "<storage_account_SAS_token>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.blob.storage_accountBlob ストレージアカウントの名前です。
    azure.blob.containerBlob ストレージアカウント内でデータを保存する Blob コンテナの名前です。
    azure.blob.sas_tokenBlob ストレージアカウントにアクセスするために使用される SAS トークンです。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があります。

Azure Data Lake Storage Gen2

Hudi クラスターのストレージとして Data Lake Storage Gen2 を選択した場合、以下のいずれかのアクションを取ります。

  • マネージド ID 認証方法を使用する場合、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>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.adls2.oauth2_use_managed_identityマネージド ID 認証方法を有効にするかどうかを指定します。値を true に設定します。
    azure.adls2.oauth2_tenant_idADLS Gen2 ストレージアカウントのテナント ID です。
    azure.adls2.oauth2_client_idデスティネーション CelerData クラスターのデータクレデンシャルで参照されるマネージド ID のクライアント ID です。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があり、マネージド ID は CelerData クラスターのデプロイに使用され、ストレージアカウントに対する必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられている必要があります。

  • 共有キー認証方法を使用する場合、StorageCredentialParams を以下のように設定します。

    "azure.adls2.storage_account" = "<storage_account_name>",
    "azure.adls2.shared_key" = "<storage_account_shared_key>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.adls2.storage_accountADLS Gen2 ストレージアカウントの名前です。
    azure.adls2.shared_keyADLS Gen2 ストレージアカウントの共有キー (アクセスキー) です。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があります。

  • サービスプリンシパル認証方法を使用する場合、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>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.adls2.oauth2_client_idサービスプリンシパルのアプリケーション (クライアント) ID です。
    azure.adls2.oauth2_client_secretサービスプリンシパルのクライアントシークレットの値です。
    azure.adls2.oauth2_client_endpointサービスプリンシパルの OAuth 2.0 トークンエンドポイント (v1) です。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があり、サービスプリンシパルは CelerData クラスターのデプロイに使用され、ストレージアカウントに対する必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられている必要があります。

Azure Data Lake Storage Gen1

Hudi クラスターのストレージとして Data Lake Storage Gen1 を選択した場合、以下のいずれかのアクションを取ります。

  • マネージドサービス ID 認証方法を使用する場合、StorageCredentialParams を以下のように設定します。

    "azure.adls1.use_managed_service_identity" = "true"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.adls1.use_managed_service_identityマネージドサービス ID 認証方法を有効にするかどうかを指定します。値を 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>"

    以下の表は、パラメータを説明しています。

    ParameterDescription
    azure.adls1.oauth2_client_idサービスプリンシパルのアプリケーション (クライアント) ID です。
    azure.adls1.oauth2_credentialサービスプリンシパルのクライアントシークレットの値です。
    azure.adls1.oauth2_endpointサービスプリンシパルまたはアプリケーションの OAuth 2.0 トークンエンドポイント (v1) です。

    NOTICE

    認証に使用するストレージアカウントは、Hudi クラスターのデータを保存するために使用されるものである必要があり、サービスプリンシパルは CelerData クラスターのデプロイに使用され、ストレージアカウントに対する必要な読み取りおよび書き込み権限 (例: Storage Blob Data Owner) を割り当てられている必要があります。

MetadataUpdateParams

CelerData が Hudi のキャッシュされたメタデータを更新する方法に関するパラメータのセットです。このパラメータセットはオプションです。

CelerData はデフォルトで自動非同期更新ポリシーを実装しています。

ほとんどの場合、MetadataUpdateParams を無視し、その中のポリシーパラメータを調整する必要はありません。これらのパラメータのデフォルト値は、すぐに使えるパフォーマンスを提供します。

ただし、Hudi のデータ更新頻度が高い場合は、これらのパラメータを調整して、自動非同期更新のパフォーマンスをさらに最適化できます。

NOTE

ほとんどの場合、Hudi データが 1 時間以下の粒度で更新される場合、データ更新頻度は高いと見なされます。

ParameterRequiredDescription
enable_metastore_cacheNoCelerData が Hudi テーブルのメタデータをキャッシュするかどうかを指定します。有効な値: truefalse。デフォルト値: true。値 true はキャッシュを有効にし、値 false はキャッシュを無効にします。
enable_remote_file_cacheNoCelerData が Hudi テーブルまたはパーティションの基礎データファイルのメタデータをキャッシュするかどうかを指定します。有効な値: truefalse。デフォルト値: true。値 true はキャッシュを有効にし、値 false はキャッシュを無効にします。
metastore_cache_refresh_interval_secNoCelerData が自身にキャッシュされた Hudi テーブルまたはパーティションのメタデータを非同期に更新する時間間隔です。単位: 秒。デフォルト値: 7200、つまり 2 時間です。
remote_file_cache_refresh_interval_secNoCelerData が自身にキャッシュされた Hudi テーブルまたはパーティションの基礎データファイルのメタデータを非同期に更新する時間間隔です。単位: 秒。デフォルト値: 60
metastore_cache_ttl_secNoCelerData が自身にキャッシュされた Hudi テーブルまたはパーティションのメタデータを自動的に破棄する時間間隔です。単位: 秒。デフォルト値: 86400、つまり 24 時間です。
remote_file_cache_ttl_secNoCelerData が自身にキャッシュされた Hudi テーブルまたはパーティションの基礎データファイルのメタデータを自動的に破棄する時間間隔です。単位: 秒。デフォルト値: 129600、つまり 36 時間です。

詳細については、このトピックの「Understand automatic asynchronous update」セクションを参照してください。

以下の例では、使用するメタストアのタイプに応じて、hudi_catalog_hms または hudi_catalog_glue という名前の Hudi catalog を作成し、Hudi クラスターからデータをクエリします。

AWS S3

インスタンスプロファイルベースの認証
  • Hudi クラスターで Hive metastore を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 Hudi クラスターで AWS Glue を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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"
    );
アサインされたロールベースの認証
  • Hudi クラスターで Hive metastore を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 Hudi クラスターで AWS Glue を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 ユーザーベースの認証
  • Hudi クラスターで Hive metastore を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 Hudi クラスターで AWS Glue を使用している場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_glue
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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
  • マネージド ID 認証方法を選択した場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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 hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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
  • マネージドサービス ID 認証方法を選択した場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.adls1.use_managed_service_identity" = "true"
    );
  • サービスプリンシパル認証方法を選択した場合、以下のようなコマンドを実行します。

    CREATE EXTERNAL CATALOG hudi_catalog_hms
    PROPERTIES
    (
    "type" = "hudi",
    "hive.metastore.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>"
    );

Hudi catalog の表示

現在の CelerData クラスター内のすべての catalog をクエリするには、SHOW CATALOGS を使用できます。

SHOW CATALOGS;

また、external catalog の作成ステートメントをクエリするには、SHOW CREATE CATALOG を使用できます。以下の例では、hudi_catalog_glue という名前の Hudi catalog の作成ステートメントをクエリします。

SHOW CREATE CATALOG hudi_catalog_glue;

Hudi Catalog とその中のデータベースに切り替える

Hudi catalog とその中のデータベースに切り替えるには、以下のいずれかの方法を使用できます。

  • 現在のセッションで Hudi catalog を指定するには、SET CATALOG を使用し、その後、アクティブなデータベースを指定するには USE を使用します。

    -- 現在のセッションで指定された catalog に切り替える:
    SET CATALOG <catalog_name>
    -- 現在のセッションでアクティブなデータベースを指定する:
    USE <db_name>
  • 直接 USE を使用して、Hudi catalog とその中のデータベースに切り替えます。

    USE <catalog_name>.<db_name>

Hudi catalog の削除

external catalog を削除するには、DROP CATALOG を使用できます。

以下の例では、hudi_catalog_glue という名前の Hudi catalog を削除します。

DROP Catalog hudi_catalog_glue;

Hudi テーブルのスキーマを表示

Hudi テーブルのスキーマを表示するには、以下のいずれかの構文を使用できます。

  • スキーマを表示

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>
  • CREATE ステートメントからスキーマと場所を表示

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

Hudi テーブルをクエリ

  1. Hudi クラスター内のデータベースを表示するには、SHOW DATABASES を使用します。

    SHOW DATABASES <catalog_name>
  2. Hudi Catalog とその中のデータベースに切り替える

  3. 指定されたデータベース内の宛先テーブルをクエリするには、SELECT を使用します。

    SELECT count(*) FROM <table_name> LIMIT 10

Hudi クラスターがメタストアとして Hive metastore を使用し、オブジェクトストレージとして AWS S3 を使用し、us-west-2 リージョンにある AWS S3 バケットにアクセスするためにインスタンスプロファイルベースの認証方法を使用する場合、以下のコマンドを実行して hudi_catalog_hms という名前の catalog を作成し、Hudi データにアクセスできます。

CREATE EXTERNAL CATALOG hudi_catalog_hms
PROPERTIES
(
"type" = "hudi",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);

Hudi クラスターがメタストアとして AWS Glue を使用し、オブジェクトストレージとして AWS S3 を使用し、us-west-1 リージョンにある AWS S3 バケットにアクセスするためにアサインされたロールベースの認証方法を使用する場合、以下のコマンドを実行して hudi_catalog_glue という名前の catalog を作成し、hudi データにアクセスできます。

CREATE EXTERNAL CATALOG hudi_catalog_glue
PROPERTIES
(
"type" = "hudi",
"hive.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "arn:aws:iam::51234343412:role/role_name_in_aws_iam",
"aws.glue.region" = "us-west-1",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::51234343412:role/role_name_in_aws_iam",
"aws.s3.region" = "us-west-1"
);

メタデータ更新の同期

デフォルトでは、CelerData は Hudi のメタデータをキャッシュし、パフォーマンスを向上させるために非同期モードでメタデータを自動的に更新します。さらに、Hudi テーブルでいくつかのスキーマ変更やテーブル更新が行われた後、REFRESH EXTERNAL TABLE を使用してメタデータを更新し、CelerData が最新のメタデータをできるだけ早く取得し、適切な実行プランを生成できるようにすることもできます。

REFRESH EXTERNAL TABLE <table_name>

付録: 自動非同期更新を理解する

自動非同期更新は、CelerData が Hudi catalog のメタデータを更新するために使用するデフォルトのポリシーです。

デフォルトでは (つまり、enable_metastore_cacheenable_remote_file_cache パラメータが両方とも true に設定されている場合)、クエリが Hudi テーブルのパーティションにヒットすると、CelerData はそのパーティションのメタデータとそのパーティションの基礎データファイルのメタデータを自動的にキャッシュします。キャッシュされたメタデータは、遅延更新ポリシーを使用して更新されます。

たとえば、table2 という名前の Hudi テーブルがあり、4 つのパーティション: p1p2p3p4 があります。クエリが p1 にヒットし、CelerData は p1 のメタデータと p1 の基礎データファイルのメタデータをキャッシュします。キャッシュされたメタデータを更新および破棄するデフォルトの時間間隔は次のとおりです。

  • キャッシュされた p1 のメタデータを非同期に更新する時間間隔 (metastore_cache_refresh_interval_sec パラメータで指定) は 2 時間です。
  • キャッシュされた p1 の基礎データファイルのメタデータを非同期に更新する時間間隔 (remote_file_cache_refresh_interval_sec パラメータで指定) は 60 秒です。
  • キャッシュされた p1 のメタデータを自動的に破棄する時間間隔 (metastore_cache_ttl_sec パラメータで指定) は 24 時間です。
  • キャッシュされた p1 の基礎データファイルのメタデータを自動的に破棄する時間間隔 (remote_file_cache_ttl_sec パラメータで指定) は 36 時間です。

以下の図は、キャッシュされたメタデータの更新および破棄の時間間隔をタイムラインで示しています。

キャッシュされたメタデータの更新および破棄のタイムライン

その後、CelerData は以下のルールに従ってメタデータを更新または破棄します。

  • 別のクエリが再び p1 にヒットし、最後の更新からの現在の時間が 60 秒未満の場合、CelerData は p1 のキャッシュされたメタデータまたは p1 の基礎データファイルのキャッシュされたメタデータを更新しません。
  • 別のクエリが再び p1 にヒットし、最後の更新からの現在の時間が 60 秒を超える場合、CelerData は p1 の基礎データファイルのキャッシュされたメタデータを更新します。
  • 別のクエリが再び p1 にヒットし、最後の更新からの現在の時間が 2 時間を超える場合、CelerData は p1 のキャッシュされたメタデータを更新します。
  • p1 が最後の更新から 24 時間以内にアクセスされていない場合、CelerData は p1 のキャッシュされたメタデータを破棄します。次のクエリでメタデータがキャッシュされます。
  • p1 が最後の更新から 36 時間以内にアクセスされていない場合、CelerData は p1 の基礎データファイルのキャッシュされたメタデータを破棄します。次のクエリでメタデータがキャッシュされます。