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

Hive catalog

Hive catalog は、外部 catalog の一種であり、以下のことができます。

  • Apache Hive™(以下、Hive)に保存されたデータを手動でテーブルを作成することなく直接クエリする。
  • INSERT INTO や非同期マテリアライズドビューを使用して、Hive に保存されたデータを処理し、CelerData にデータをロードする。
  • CelerData 上で操作を行い、Hive データベースやテーブルを作成または削除したり、CelerData テーブルから Parquet 形式の Hive テーブルにデータをシンクする(この機能は v3.2 以降でサポートされています)。

Hive クラスターで SQL ワークロードを成功させるためには、CelerData クラスターが Hive クラスターのストレージシステムとメタストアにアクセスできる必要があります。CelerData は以下のストレージシステムとメタストアをサポートしています。

  • AWS S3 や Microsoft Azure Storage などのオブジェクトストレージ

  • Hive メタストア(HMS)や AWS Glue などのメタストア

    注意

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

使用上の注意

  • CelerData がサポートする Hive のファイル形式は Parquet、ORC、Textfile です。

    • Parquet ファイルは、以下の圧縮形式をサポートしています:SNAPPY、LZO、LZ4、ZSTD、GZIP、NO_COMPRESSION。
    • ORC ファイルは、以下の圧縮形式をサポートしています:ZLIB、SNAPPY、LZO、LZ4、ZSTD、NO_COMPRESSION。
    • Textfile ファイルは、LZO 圧縮形式をサポートしています。
  • CelerData がサポートしていない Hive のデータ型は INTERVAL、BINARY です。また、CelerData は Textfile 形式の Hive テーブルに対して MAP および STRUCT データ型をサポートしていません。

  • Hive catalog は データのクエリ のみに使用できます。Hive catalog を使用して、Hive クラスターにデータを削除、削除、または挿入することはできません。

準備

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

Hive メタストア

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

注意

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

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

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

AWS

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

Microsoft Azure Storage

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

Hive catalog の作成

構文

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

パラメータ

catalog_name

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

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

comment

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

type

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

GeneralParams

一般的なパラメータのセット。

GeneralParams で設定できるパラメータを以下の表に示します。

パラメータ必須説明
enable_recursive_listingいいえCelerData がテーブルとそのパーティション、およびテーブルとそのパーティションの物理的な場所内のサブディレクトリからデータを読み取るかどうかを指定します。有効な値:true および false。デフォルト値:false。値 true はサブディレクトリを再帰的にリストすることを指定し、値 false はサブディレクトリを無視することを指定します。

MetastoreParams

データソースのメタストアと CelerData がどのように統合するかに関するパラメータのセット。

Hive メタストア

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

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

MetastoreParams で設定する必要があるパラメータを以下の表に示します。

パラメータ必須説明
hive.metastore.typeはいHive クラスターで使用するメタストアのタイプ。値を hive に設定します。
hive.metastore.urisはいHive メタストアの URI。形式:thrift://<metastore_IP_address>:<metastore_port>
Hive メタストアで高可用性 (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 で設定する必要があるパラメータを以下の表に示します。

パラメータ必須説明
hive.metastore.typeはいHive クラスターで使用するメタストアのタイプ。値を 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 へのアクセスのための認証パラメータ を参照してください。

StorageCredentialParams

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

AWS S3

Hive クラスターのストレージとして 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 で設定する必要があるパラメータを以下の表に示します。

パラメータ必須説明
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 へのアクセスのための認証パラメータ を参照してください。

Microsoft Azure Storage

このセクションでは、さまざまな Azure クラウドストレージサービスとさまざまな認証方法を使用して統合するために StorageCredentialParams で設定する必要があるパラメータについて説明します。これらのパラメータの値を取得する方法については、Azure クラウドストレージへの認証 を参照してください。

Azure Blob Storage

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

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

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

    以下の表にパラメータを示します。

    パラメータ説明
    azure.blob.storage_accountBlob ストレージアカウントの名前。
    azure.blob.shared_keyBlob ストレージアカウントの共有キー(アクセスキー)。

    注意

    認証に使用するストレージアカウントは、Hive クラスターのデータを保存するために使用されるものでなければなりません。

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

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

    以下の表にパラメータを示します。

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

    注意

    認証に使用するストレージアカウントは、Hive クラスターのデータを保存するために使用されるものでなければなりません。

Azure Data Lake Storage Gen2

Hive クラスターのストレージとして 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>"

    以下の表にパラメータを示します。

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

注意

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

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

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

    以下の表にパラメータを示します。

    パラメータ説明
    azure.adls2.storage_accountADLS Gen2 ストレージアカウントの名前。
    azure.adls2.shared_keyADLS Gen2 ストレージアカウントの共有キー(アクセスキー)。

    注意

    認証に使用するストレージアカウントは、Hive クラスターのデータを保存するために使用されるものでなければなりません。

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

    以下の表にパラメータを示します。

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

    注意

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

Azure Data Lake Storage Gen1

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

  • マネージドサービスアイデンティティ認証方法を使用するには、StorageCredentialParams を以下のように設定します。

    "azure.adls1.use_managed_service_identity" = "true"

    以下の表にパラメータを示します。

    パラメータ説明
    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.adls1.oauth2_client_idサービスプリンシパルのアプリケーション(クライアント)ID。
    azure.adls1.oauth2_credentialサービスプリンシパルのクライアントシークレットの値。
    azure.adls1.oauth2_endpointサービスプリンシパルまたはアプリケーションの OAuth 2.0 トークンエンドポイント(v1)。

    注意

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

MetadataUpdateParams

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

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

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

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

注意

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

パラメータ必須説明
enable_metastore_cacheいいえCelerData が Hive テーブルのメタデータをキャッシュするかどうかを指定します。有効な値:true および false。デフォルト値:true。値 true はキャッシュを有効にし、値 false はキャッシュを無効にします。
enable_remote_file_cacheいいえCelerData が Hive テーブルまたはパーティションの基礎データファイルのメタデータをキャッシュするかどうかを指定します。有効な値:true および false。デフォルト値:true。値 true はキャッシュを有効にし、値 false はキャッシュを無効にします。
metastore_cache_refresh_interval_secいいえCelerData が自身にキャッシュされた Hive テーブルまたはパーティションのメタデータを非同期に更新する時間間隔。単位:秒。デフォルト値:7200(2 時間)。
remote_file_cache_refresh_interval_secいいえCelerData が自身にキャッシュされた Hive テーブルまたはパーティションの基礎データファイルのメタデータを非同期に更新する時間間隔。単位:秒。デフォルト値:60
metastore_cache_ttl_secいいえCelerData が自身にキャッシュされた Hive テーブルまたはパーティションのメタデータを自動的に破棄する時間間隔。単位:秒。デフォルト値:86400(24 時間)。
remote_file_cache_ttl_secいいえCelerData が自身にキャッシュされた Hive テーブルまたはパーティションの基礎データファイルのメタデータを自動的に破棄する時間間隔。単位:秒。デフォルト値:129600(36 時間)。

詳細については、このトピックの「自動非同期更新の理解」セクションを参照してください。

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

AWS S3

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

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

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

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

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

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

    CREATE EXTERNAL CATALOG hive_catalog_glue
    PROPERTIES
    (
    "type" = "hive",
    "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 hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "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 hive_catalog_hms
    PROPERTIES
    (
    "type" = "hive",
    "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
  • マネージドアイデンティティ認証方法を選択した場合、以下のようなコマンドを実行します。

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

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

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

Hive catalog の表示

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

SHOW CATALOGS;

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

SHOW CREATE CATALOG hive_catalog_glue;

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

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

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

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

    USE <catalog_name>.<db_name>

Hive catalog の削除

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

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

DROP Catalog hive_catalog_glue;

Hive テーブルのスキーマを表示する

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

  • スキーマを表示する

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

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

Hive テーブルをクエリする

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

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

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

    SELECT count(*) FROM <table_name> LIMIT 10

Hive テーブルとビューへの権限を付与する

Hive catalog 内のすべてのテーブルとビューに対する権限を特定のロールに付与するには、GRANT ステートメントを使用できます。コマンド構文は以下の通りです。

GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE <role_name>

例えば、hive_role_table という名前のロールを作成し、Hive catalog hive_catalog に切り替え、hive_role_table ロールに Hive catalog hive_catalog 内のすべてのテーブルとビューをクエリする権限を付与するには、以下のコマンドを使用します。

-- hive_role_table という名前のロールを作成します。
CREATE ROLE hive_role_table;

-- Hive catalog hive_catalog に切り替えます。
SET CATALOG hive_catalog;

-- hive_role_table ロールに Hive catalog hive_catalog 内のすべてのテーブルとビューをクエリする権限を付与します。
GRANT SELECT ON ALL TABLES IN ALL DATABASES TO ROLE hive_role_table;

Hive データベースの作成

CelerData の内部 catalog と同様に、Hive catalog に対して CREATE DATABASE 権限を持っている場合、CREATE DATABASE ステートメントを使用して、その Hive catalog にデータベースを作成できます。この機能は v3.2 以降でサポートされています。

注意

GRANT および REVOKE を使用して権限を付与および取り消すことができます。

Hive catalog に切り替える し、次に以下のステートメントを使用して、その catalog に Hive データベースを作成します。

CREATE DATABASE <database_name>
[PROPERTIES ("location" = "<prefix>://<path_to_database>/<database_name.db>")]

location パラメータは、データベースを作成したいファイルパスを指定します。

  • Hive クラスターのメタストアとして Hive メタストアを使用する場合、location パラメータは <warehouse_location>/<database_name.db> にデフォルト設定されており、データベース作成時にそのパラメータを指定しない場合、Hive メタストアによってサポートされます。
  • Hive クラスターのメタストアとして AWS Glue を使用する場合、location パラメータにはデフォルト値がなく、したがってデータベース作成時にそのパラメータを指定する必要があります。

prefix は使用するストレージシステムに基づいて異なります。

ストレージシステムPrefix
Azure Blob Storage
  • ストレージアカウントが HTTP 経由でのアクセスを許可する場合、prefixwasb です。
  • ストレージアカウントが HTTPS 経由でのアクセスを許可する場合、prefixwasbs です。
Azure Data Lake Storage Gen2
  • ストレージアカウントが HTTP 経由でのアクセスを許可する場合、prefixabfs です。
  • ストレージアカウントが HTTPS 経由でのアクセスを許可する場合、prefixabfss です。
Azure Data Lake Storage Gen1adl
AWS S3s3

Hive データベースの削除

CelerData の内部データベースと同様に、Hive データベースに対して DROP 権限を持っている場合、DROP DATABASE ステートメントを使用して、その Hive データベースを削除できます。この機能は v3.2 以降でサポートされています。空のデータベースのみを削除できます。

注意

GRANT および REVOKE を使用して権限を付与および取り消すことができます。

Hive データベースを削除すると、そのデータベースのファイルパスはクラウドストレージ上に残りますが、データベースと共に削除されることはありません。

Hive catalog に切り替える し、次に以下のステートメントを使用して、その catalog に Hive データベースを削除します。

DROP DATABASE <database_name>

Hive テーブルの作成

CelerData の内部データベースと同様に、Hive データベースに対して CREATE TABLE 権限を持っている場合、CREATE TABLECREATE TABLE AS SELECT (CTAS)、または CREATE TABLE LIKE ステートメントを使用して、その Hive データベースに管理テーブルを作成できます。この機能は v3.2 以降でサポートされています。

注意

GRANT および REVOKE を使用して権限を付与および取り消すことができます。

Hive catalog とその中のデータベースに切り替える し、次に以下の構文を使用して、そのデータベースに Hive 管理テーブルを作成します。

構文

CREATE TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...
partition_column_definition1,partition_column_definition2...])
[partition_desc]
[PROPERTIES ("key" = "value", ...)]
[AS SELECT query]

パラメータ

column_definition

column_definition の構文は以下の通りです。

col_name col_type [COMMENT 'comment']

以下の表にパラメータを示します。

パラメータ説明
col_name列の名前。
col_type列のデータ型。以下のデータ型がサポートされています:TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、DATE、DATETIME、CHAR、VARCHAR[(length)]、ARRAY、MAP、STRUCT。LARGEINT、HLL、BITMAP データ型はサポートされていません。

注意

すべての非パーティション列は NULL をデフォルト値として使用する必要があります。これは、テーブル作成ステートメントで各非パーティション列に対して DEFAULT "NULL" を指定する必要があることを意味します。さらに、パーティション列は非パーティション列の後に定義され、デフォルト値として NULL を使用することはできません。

partition_desc

partition_desc の構文は以下の通りです。

PARTITION BY (par_col1[, par_col2...])

現在、CelerData はアイデンティティ変換のみをサポートしており、これは CelerData が各ユニークなパーティション値に対してパーティションを作成することを意味します。

注意

パーティション列は非パーティション列の後に定義される必要があります。パーティション列は FLOAT、DOUBLE、DECIMAL、DATETIME を除くすべてのデータ型をサポートし、デフォルト値として NULL を使用することはできません。さらに、partition_desc で宣言されたパーティション列の順序は、column_definition で定義された列の順序と一致している必要があります。

PROPERTIES

properties"key" = "value" 形式でテーブル属性を指定できます。

以下の表にいくつかの主要なプロパティを示します。

プロパティ説明
location管理テーブルを作成したいファイルパス。HMS をメタストアとして使用する場合、location パラメータを指定する必要はありません。CelerData は現在の Hive catalog のデフォルトファイルパスにテーブルを作成します。AWS Glue をメタデータサービスとして使用する場合:
  • テーブルを作成したいデータベースに location パラメータを指定している場合、テーブルの location パラメータを指定する必要はありません。この場合、テーブルは所属するデータベースのファイルパスにデフォルト設定されます。
  • テーブルを作成したいデータベースに location を指定していない場合、テーブルの location パラメータを指定する必要があります。
file_format管理テーブルのファイル形式。Parquet 形式のみがサポートされています。デフォルト値:parquet
compression_codec管理テーブルに使用される圧縮アルゴリズム。サポートされている圧縮アルゴリズムは SNAPPY、GZIP、ZSTD、LZ4 です。デフォルト値:gzip

  1. unpartition_tbl という名前の非パーティションテーブルを作成します。このテーブルは、以下に示すように、idscore の 2 つの列で構成されています。

    CREATE TABLE unpartition_tbl
    (
    id int,
    score double
    );
  2. partition_tbl_1 という名前のパーティションテーブルを作成します。このテーブルは、以下に示すように、actioniddt の 3 つの列で構成されており、iddt がパーティション列として定義されています。

    CREATE TABLE partition_tbl_1
    (
    action varchar(20),
    id int,
    dt date
    )
    PARTITION BY (id,dt);
  3. 既存のテーブル partition_tbl_1 をクエリし、partition_tbl_1 のクエリ結果に基づいて partition_tbl_2 という名前のパーティションテーブルを作成します。partition_tbl_2 では、iddt がパーティション列として定義されています。

    CREATE TABLE partition_tbl_2
    PARTITION BY (k1, k2)
    AS SELECT * from partition_tbl_1;

Hive テーブルへのデータのシンク

CelerData の内部テーブルと同様に、Hive テーブル(管理テーブルまたは外部テーブル)に対して INSERT 権限を持っている場合、INSERT ステートメントを使用して、CelerData テーブルのデータをその Hive テーブルにシンクすることができます(現在、Parquet 形式の Hive テーブルのみがサポートされています)。この機能は v3.2 以降でサポートされています。外部テーブルへのデータのシンクはデフォルトで無効になっています。外部テーブルにデータをシンクするには、システム変数 ENABLE_WRITE_HIVE_EXTERNAL_TABLEtrue に設定する必要があります。

注意

GRANT および REVOKE を使用して権限を付与および取り消すことができます。

Hive catalog とその中のデータベースに切り替える し、次に以下の構文を使用して、そのデータベース内の Parquet 形式の Hive テーブルに CelerData テーブルのデータをシンクします。

構文

INSERT {INTO | OVERWRITE} <table_name>
[ (column_name [, ...]) ]
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

-- 指定されたパーティションにデータをシンクしたい場合、以下の構文を使用します。
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

注意

パーティション列は NULL 値を許可しません。したがって、Hive テーブルのパーティション列に空の値がロードされないようにする必要があります。

パラメータ

パラメータ説明
INTOCelerData テーブルのデータを Hive テーブルに追加します。
OVERWRITEHive テーブルの既存のデータを CelerData テーブルのデータで上書きします。
column_nameデータをロードしたい宛先列の名前。1 つ以上の列を指定できます。複数の列を指定する場合、カンマ (,) で区切ります。実際に Hive テーブルに存在する列のみを指定できます。指定した宛先列は、CelerData テーブルの列と順番に 1 対 1 でマッピングされます。宛先列が指定されていない場合、データは Hive テーブルのすべての列にロードされます。CelerData テーブルの非パーティション列が Hive テーブルの列にマッピングできない場合、CelerData は Hive テーブル列にデフォルト値 NULL を書き込みます。INSERT ステートメントにクエリステートメントが含まれており、返される列タイプが宛先列のデータ型と異なる場合、CelerData は不一致の列に対して暗黙の変換を行います。変換が失敗した場合、構文解析エラーが返されます。
expression宛先列に値を割り当てる式。
DEFAULT宛先列にデフォルト値を割り当てます。
queryHive テーブルにロードされる結果を持つクエリステートメント。CelerData がサポートする任意の SQL ステートメントを使用できます。
PARTITIONデータをロードしたいパーティション。Hive テーブルのすべてのパーティション列をこのプロパティで指定する必要があります。このプロパティで指定するパーティション列は、テーブル作成ステートメントで定義されたパーティション列と異なる順序で指定できます。このプロパティを指定する場合、column_name プロパティを指定することはできません。

  1. partition_tbl_1 テーブルに 3 行のデータを挿入します。

    INSERT INTO partition_tbl_1
    VALUES
    ("buy", 1, "2023-09-01"),
    ("sell", 2, "2023-09-02"),
    ("buy", 3, "2023-09-03");
  2. 簡単な計算を含む SELECT クエリの結果を partition_tbl_1 テーブルに挿入します。

    INSERT INTO partition_tbl_1 (id, action, dt) SELECT 1+1, 'buy', '2023-09-03';
  3. partition_tbl_1 テーブルからデータを読み取る SELECT クエリの結果を同じテーブルに挿入します。

    INSERT INTO partition_tbl_1 SELECT 'buy', 1, date_add(dt, INTERVAL 2 DAY)
    FROM partition_tbl_1
    WHERE id=1;
  4. partition_tbl_2 テーブルの dt='2023-09-01' および id=1 の条件を満たすパーティションに SELECT クエリの結果を挿入します。

    INSERT INTO partition_tbl_2 SELECT 'order', 1, '2023-09-01';

    または

    INSERT INTO partition_tbl_2 partition(dt='2023-09-01',id=1) SELECT 'order';
  5. partition_tbl_1 テーブルの dt='2023-09-01' および id=1 の条件を満たすパーティション内のすべての action 列の値を close に上書きします。

    INSERT OVERWRITE partition_tbl_1 SELECT 'close', 1, '2023-09-01';

    または

    INSERT OVERWRITE partition_tbl_1 partition(dt='2023-09-01',id=1) SELECT 'close';

Hive テーブルの削除

CelerData の内部テーブルと同様に、Hive テーブルに対して DROP 権限を持っている場合、DROP TABLE ステートメントを使用して、その Hive テーブルを削除できます。この機能は v3.1 以降でサポートされています。現在、CelerData は Hive の管理テーブルのみの削除をサポートしています。

注意

GRANT および REVOKE を使用して権限を付与および取り消すことができます。

Hive テーブルを削除する際には、DROP TABLE ステートメントで FORCE キーワードを指定する必要があります。操作が完了すると、テーブルのファイルパスは保持されますが、クラウドストレージ上のテーブルのデータはすべてテーブルと共に削除されます。この操作を行う際には注意が必要です。

Hive catalog とその中のデータベースに切り替える し、次に以下のステートメントを使用して、そのデータベース内の Hive テーブルを削除します。

DROP TABLE <table_name> FORCE

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

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

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

CREATE EXTERNAL CATALOG hive_catalog_glue
PROPERTIES
(
"type" = "hive",
"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 は Hive のメタデータをキャッシュし、パフォーマンスを向上させるために非同期モードでメタデータを自動的に更新します。さらに、Hive テーブルでいくつかのスキーマ変更やテーブル更新が行われた後、REFRESH EXTERNAL TABLE を使用してメタデータを更新し、CelerData が最新のメタデータを最速で取得し、適切な実行プランを生成できるようにすることもできます。

REFRESH EXTERNAL TABLE <table_name>

付録: 自動非同期更新の理解

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

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

例えば、table2 という名前の Hive テーブルがあり、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 の基礎データファイルのキャッシュされたメタデータを破棄します。次のクエリでメタデータがキャッシュされます。