Перейти к основному содержимому
Версия: 2.0.x

Unified catalog

Unified catalog — это тип внешнего catalog, предоставляемый Selena начиная с версии v1.5.2 для обработки таблиц из источников данных Apache Hive™, Apache Iceberg, Apache Hudi, Delta Lake и Apache Kudu как единого источника данных без загрузки. С помощью unified catalog вы можете:

  • Напрямую запрашивать данные, хранящиеся в Hive, Iceberg, Hudi, Delta Lake, Paimon и Kudu, без необходимости создания таблиц вручную.
  • Использовать INSERT INTO или асинхронные материализованные представления (поддерживаются с версии v1.5.2) для обработки данных, хранящихся в Hive, Iceberg, Hudi, Delta Lake, Paimon и Kudu, и загрузки данных в Selena.
  • Выполнять операции в Selena для создания или удаления баз данных и таблиц Hive и Iceberg.

Для успешного выполнения SQL-запросов к вашему единому источнику данных ваш Selena cluster должен иметь доступ к системе хранения и metastore вашего единого источника данных. Selena поддерживает следующие системы хранения и metastore:

  • Распределённая файловая система (HDFS) или объектное хранилище, такое как AWS S3, Microsoft Azure Storage, Google GCS, или другие S3-совместимые системы хранения (например, MinIO)

  • Metastore, такие как Hive metastore или AWS Glue

    ПРИМЕЧАНИЕ

    Если вы выбираете AWS S3 в качестве хранилища, вы можете использовать HMS или AWS Glue в качестве metastore. Если вы выбираете любую другую систему хранения, вы можете использовать только HMS в качестве metastore.

Ограничения

Один unified catalog поддерживает интеграцию только с одной системой хранения и одним сервисом metastore. Поэтому убедитесь, что все источники данных, которые вы хотите интегрировать как единый источник данных с Selena, используют одну и ту же систему хранения и сервис metastore.

Примечания по использованию

  • См. раздел «Примечания по использованию» в Hive catalog, Iceberg catalog, Hudi catalog, Delta Lake catalog, Paimon catalog и Kudu catalog, чтобы понять поддерживаемые форматы файлов и типы данных.

  • Операции, специфичные для формата, поддерживаются только для определённых форматов таблиц. Например, CREATE TABLE и DROP TABLE поддерживаются только для Hive и Iceberg, а REFRESH EXTERNAL TABLE поддерживается только для Hive и Hudi.

    При создании таблицы в unified catalog с помощью оператора CREATE TABLE используйте параметр ENGINE для указания формата таблицы (Hive или Iceberg).

Подготовка к интеграции

Перед созданием unified catalog убедитесь, что ваш Selena cluster может интегрироваться с системой хранения и metastore вашего единого источника данных.

AWS IAM

Если вы используете AWS S3 в качестве хранилища или AWS Glue в качестве metastore, выберите подходящий метод аутентификации и выполните необходимую подготовку, чтобы ваш Selena cluster мог получить доступ к соответствующим облачным ресурсам AWS. Подробнее см. в разделе Аутентификация к ресурсам AWS - Подготовка.

HDFS

Если вы выбрали HDFS в качестве хранилища, настройте ваш Selena cluster следующим образом:

  • (Опционально) Установите имя пользователя, которое используется для доступа к вашему HDFS cluster и Hive metastore. По умолчанию Selena использует имя пользователя процессов FE и BE или CN для доступа к вашему HDFS cluster и Hive metastore. Вы также можете задать имя пользователя, добавив export HADOOP_USER_NAME="<user_name>" в начало файла fe/conf/hadoop_env.sh каждого FE и в начало файла be/conf/hadoop_env.sh каждого BE или файла cn/conf/hadoop_env.sh каждого CN. После установки имени пользователя в этих файлах перезапустите каждый FE и каждый BE или CN, чтобы настройки параметров вступили в силу. Для каждого Selena cluster можно задать только одно имя пользователя.
  • При запросе данных FE и BE или CN вашего Selena cluster используют HDFS-клиент для доступа к вашему HDFS cluster. В большинстве случаев вам не нужно настраивать ваш Selena cluster для этого, и Selena запускает HDFS-клиент с настройками по умолчанию. Настройка Selena cluster необходима только в следующих ситуациях:
    • Для вашего HDFS cluster включена высокая доступность (HA): Добавьте файл hdfs-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
    • Для вашего HDFS cluster включена View File System (ViewFs): Добавьте файл core-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.

ПРИМЕЧАНИЕ

Если при отправке запроса возвращается ошибка о неизвестном хосте, необходимо добавить соответствие между именами хостов и IP-адресами узлов вашего HDFS cluster в путь /etc/hosts.

Аутентификация Kerberos

Если для вашего HDFS cluster или Hive metastore включена аутентификация Kerberos, настройте ваш Selena cluster следующим образом:

  • Выполните команду kinit -kt keytab_path principal на каждом FE и каждом BE или CN, чтобы получить Ticket Granting Ticket (TGT) от Key Distribution Center (KDC). Для выполнения этой команды у вас должны быть разрешения на доступ к вашему HDFS cluster и Hive metastore. Обратите внимание, что доступ к KDC с помощью этой команды ограничен по времени. Поэтому необходимо использовать cron для периодического выполнения этой команды.
  • Добавьте JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf" в файл $FE_HOME/conf/fe.conf каждого FE и в файл $BE_HOME/conf/be.conf каждого BE или файл $CN_HOME/conf/cn.conf каждого CN. В этом примере /etc/krb5.conf — это путь сохранения файла krb5.conf. Вы можете изменить путь в соответствии с вашими потребностями.

Создание unified catalog

Синтаксис

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

Параметры

catalog_name

Имя unified catalog. Соглашения об именовании следующие:

  • Имя может содержать буквы, цифры (0-9) и символы подчёркивания (_). Оно должно начинаться с буквы.
  • Имя чувствительно к регистру и не может превышать 1023 символа в длину.

comment

Описание unified catalog. Этот параметр является опциональным.

type

Тип вашего источника данных. Установите значение unified.

MetastoreParams

Набор параметров о том, как Selena интегрируется с вашим metastore.

Hive metastore

Если вы выбрали Hive metastore в качестве metastore вашего единого источника данных, настройте MetastoreParams следующим образом:

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

ПРИМЕЧАНИЕ

Перед запросом данных необходимо добавить соответствие между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.

В следующей таблице описаны параметры, которые необходимо настроить в MetastoreParams.

ПараметрОбязательныйОписание
unified.metastore.typeДаТип metastore, который вы используете для вашего единого источника данных. Установите значение hive.
hive.metastore.urisДаURI вашего Hive metastore. Формат: thrift://<metastore_IP_address>:<metastore_port>. Если для вашего Hive metastore включена высокая доступность (HA), вы можете указать несколько URI metastore и разделить их запятыми (,), например, "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 в качестве metastore вашего источника данных, что поддерживается только при выборе AWS S3 в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе instance profile, настройте MetastoreParams следующим образом:

    "unified.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "<aws_glue_region>"
  • Чтобы выбрать метод аутентификации на основе assumed role, настройте MetastoreParams следующим образом:

    "unified.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.iam_role_arn" = "<iam_role_arn>",
    "aws.glue.region" = "<aws_glue_region>"
  • Чтобы выбрать метод аутентификации на основе IAM user, настройте MetastoreParams следующим образом:

    "unified.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.

ПараметрОбязательныйОписание
unified.metastore.typeДаТип metastore, который вы используете для вашего единого источника данных. Установите значение glue.
aws.glue.use_instance_profileДаУказывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false.
aws.glue.iam_role_arnНетARN IAM role, которая имеет привилегии на ваш AWS Glue Data Catalog. Если вы используете метод аутентификации на основе assumed role для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.regionДаРегион, в котором находится ваш AWS Glue Data Catalog. Пример: us-west-1.
aws.glue.access_keyНетAccess key вашего AWS IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.secret_keyНетSecret key вашего AWS IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.

Информацию о том, как выбрать метод аутентификации для доступа к AWS Glue и как настроить политику управления доступом в AWS IAM Console, см. в разделе Параметры аутентификации для доступа к AWS Glue.

StorageCredentialParams

Набор параметров о том, как Selena интегрируется с вашей системой хранения. Этот набор параметров является опциональным.

Если вы используете HDFS в качестве хранилища, вам не нужно настраивать StorageCredentialParams.

Если вы используете AWS S3, другую S3-совместимую систему хранения, Microsoft Azure Storage или Google GCS в качестве хранилища, вы должны настроить StorageCredentialParams.

AWS S3

Если вы выбрали AWS S3 в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе instance profile, настройте StorageCredentialParams следующим образом:

    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "<aws_s3_region>"
  • Чтобы выбрать метод аутентификации на основе assumed role, настройте StorageCredentialParams следующим образом:

    "aws.s3.use_instance_profile" = "true",
    "aws.s3.iam_role_arn" = "<iam_role_arn>",
    "aws.s3.region" = "<aws_s3_region>"
  • Чтобы выбрать метод аутентификации на основе IAM user, настройте 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ДаУказывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false.
aws.s3.iam_role_arnНетARN IAM role, которая имеет привилегии на ваш AWS S3 bucket. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.regionДаРегион, в котором находится ваш AWS S3 bucket. Пример: us-west-1.
aws.s3.access_keyНетAccess key вашего IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_keyНетSecret key вашего IAM user. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.

Информацию о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику управления доступом в AWS IAM Console, см. в разделе Параметры аутентификации для доступа к AWS S3.

S3-совместимая система хранения

Если вы выбрали S3-совместимую систему хранения, такую как MinIO, в качестве хранилища, настройте 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>"

В следующей таблице описаны параметры, которые необходимо настроить в 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>. Например, если вы создали bucket с именем DOC-EXAMPLE-BUCKET1 в регионе US West (Oregon) и хотите получить доступ к объекту alice.jpg в этом bucket, вы можете использовать следующий URL в стиле пути: https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/alice.jpg.
aws.s3.endpointДаEndpoint, который используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_keyДаAccess key вашего IAM user.
aws.s3.secret_keyДаSecret key вашего IAM user.
Microsoft Azure Storage
Azure Blob Storage

Если вы выбрали Blob Storage в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Shared Key, настройте StorageCredentialParams следующим образом:

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

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.blob.storage_accountДаИмя пользователя вашей учётной записи Blob Storage.
    azure.blob.shared_keyДаShared key вашей учётной записи Blob Storage.
  • Чтобы выбрать метод аутентификации SAS Token, настройте StorageCredentialParams следующим образом:

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

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.blob.storage_accountДаИмя пользователя вашей учётной записи Blob Storage.
    azure.blob.containerДаИмя blob-контейнера, в котором хранятся ваши данные.
    azure.blob.sas_tokenДаSAS token, который используется для доступа к вашей учётной записи Blob Storage.
Azure Data Lake Storage Gen2

Если вы выбрали Data Lake Storage Gen2 в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Managed Identity, настройте 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>"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.oauth2_use_managed_identityДаУказывает, следует ли включить метод аутентификации Managed Identity. Установите значение true.
    azure.adls2.oauth2_tenant_idДаID tenant, к данным которого вы хотите получить доступ.
    azure.adls2.oauth2_client_idДаClient (application) ID управляемого удостоверения.
  • Чтобы выбрать метод аутентификации Shared Key, настройте StorageCredentialParams следующим образом:

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

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.storage_accountДаИмя пользователя вашей учётной записи хранения Data Lake Storage Gen2.
    azure.adls2.shared_keyДаShared key вашей учётной записи хранения Data Lake Storage Gen2.
  • Чтобы выбрать метод аутентификации Service Principal, настройте 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>"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls2.oauth2_client_idДаClient (application) ID service principal.
    azure.adls2.oauth2_client_secretДаЗначение нового секрета клиента (приложения), который был создан.
    azure.adls2.oauth2_client_endpointДаOAuth 2.0 token endpoint (v1) service principal или приложения.
Azure Data Lake Storage Gen1

Если вы выбрали Data Lake Storage Gen1 в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации Managed Service Identity, настройте StorageCredentialParams следующим образом:

    "azure.adls1.use_managed_service_identity" = "true"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls1.use_managed_service_identityДаУказывает, следует ли включить метод аутентификации Managed Service Identity. Установите значение true.
  • Чтобы выбрать метод аутентификации Service Principal, настройте 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>"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрОбязательныйОписание
    azure.adls1.oauth2_client_idДаClient (application) ID service principal.
    azure.adls1.oauth2_credentialДаЗначение нового секрета клиента (приложения), который был создан.
    azure.adls1.oauth2_endpointДаOAuth 2.0 token endpoint (v1) service principal или приложения.
Google GCS

Если вы выбрали Google GCS в качестве хранилища, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации на основе VM, настройте StorageCredentialParams следующим образом:

    "gcp.gcs.use_compute_engine_service_account" = "true"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, следует ли напрямую использовать сервисную учётную запись, привязанную к вашему Compute Engine.
  • Чтобы выбрать метод аутентификации на основе сервисной учётной записи, настройте StorageCredentialParams следующим образом:

    "gcp.gcs.service_account_email" = "<google_service_account_email>",
    "gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
    "gcp.gcs.service_account_private_key" = "<google_service_private_key>"

    В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.service_account_email"""user@hello.iam.gserviceaccount.com"Адрес электронной почты в JSON-файле, сгенерированном при создании сервисной учётной записи.
    gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"ID приватного ключа в JSON-файле, сгенерированном при создании сервисной учётной записи.
    gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Приватный ключ в JSON-файле, сгенерированном при создании сервисной учётной записи.
  • Чтобы выбрать метод аутентификации на основе имперсонации, настройте StorageCredentialParams следующим образом:

    • Чтобы VM-инстанс имперсонировал сервисную учётную запись:

      "gcp.gcs.use_compute_engine_service_account" = "true",
      "gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"

      В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

      ПараметрЗначение по умолчаниюПример значенияОписание
      gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, следует ли напрямую использовать сервисную учётную запись, привязанную к вашему Compute Engine.
      gcp.gcs.impersonation_service_account"""hello"Сервисная учётная запись, которую вы хотите имперсонировать.
    • Чтобы сервисная учётная запись (временно названная meta service account) имперсонировала другую сервисную учётную запись (временно названную data service account):

      "gcp.gcs.service_account_email" = "<google_service_account_email>",
      "gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
      "gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
      "gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"

      В следующей таблице описаны параметры, которые необходимо настроить в StorageCredentialParams.

      ПараметрЗначение по умолчаниюПример значенияОписание
      gcp.gcs.service_account_email"""user@hello.iam.gserviceaccount.com"Адрес электронной почты в JSON-файле, сгенерированном при создании meta service account.
      gcp.gcs.service_account_private_key_id"""61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"ID приватного ключа в JSON-файле, сгенерированном при создании meta service account.
      gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Приватный ключ в JSON-файле, сгенерированном при создании meta service account.
      gcp.gcs.impersonation_service_account"""hello"Data service account, которую вы хотите имперсонировать.

MetadataUpdateParams

Набор параметров о том, как Selena обновляет кэшированные метаданные Hive, Hudi и Delta Lake. Этот набор параметров является опциональным. Подробнее о политиках обновления кэшированных метаданных из Hive, Hudi и Delta Lake см. в разделах Hive catalog, Hudi catalog и Delta Lake catalog.

В большинстве случаев вы можете игнорировать MetadataUpdateParams и не нуждаетесь в настройке параметров политики в нём, поскольку значения этих параметров по умолчанию уже обеспечивают готовую к использованию производительность.

Однако, если частота обновления данных в Hive, Hudi или Delta Lake высока, вы можете настроить эти параметры для дополнительной оптимизации производительности автоматических асинхронных обновлений.

ПараметрОбязательныйОписание
enable_metastore_cacheНетУказывает, кэширует ли Selena метаданные таблиц Hive, Hudi или Delta Lake. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, значение false отключает кэш.
enable_remote_file_cacheНетУказывает, кэширует ли Selena метаданные базовых файлов данных таблиц или partition Hive, Hudi или Delta Lake. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, значение false отключает кэш.
metastore_cache_refresh_interval_secНетИнтервал времени, с которым Selena асинхронно обновляет метаданные таблиц или partition Hive, Hudi или Delta Lake, кэшированных в ней. Единица измерения: секунды. Значение по умолчанию: 7200, то есть 2 часа.
remote_file_cache_refresh_interval_secНетИнтервал времени, с которым Selena асинхронно обновляет метаданные базовых файлов данных таблиц или partition Hive, Hudi или Delta Lake, кэшированных в ней. Единица измерения: секунды. Значение по умолчанию: 60.
metastore_cache_ttl_secНетИнтервал времени, по истечении которого Selena автоматически удаляет метаданные таблиц или partition Hive, Hudi или Delta Lake, кэшированных в ней. Единица измерения: секунды. Значение по умолчанию: 86400, то есть 24 часа.
remote_file_cache_ttl_secНетИнтервал времени, по истечении которого Selena автоматически удаляет метаданные базовых файлов данных таблиц или partition Hive, Hudi или Delta Lake, кэшированных в ней. Единица измерения: секунды. Значение по умолчанию: 129600, то есть 36 часов.

PaimonCatalogParams

Набор параметров о том, как подключиться к Paimon Catalog. Этот набор параметров является опциональным.

ПараметрОбязательныйОписание
paimon.catalog.warehouseНетПуть к хранилищу warehouse ваших данных Paimon.

KuduCatalogParams

Набор параметров о том, как подключиться к Kudu Catalog. Этот набор параметров является опциональным.

ПараметрОбязательныйОписание
kudu.masterНетУказывает адрес Kudu Master, по умолчанию localhost:7051.
kudu.schema-emulation.enabledНетОпция для включения или отключения эмуляции schema. По умолчанию выключена (false), что означает, что все таблицы принадлежат schema default.
kudu.schema-emulation.prefixНетПрефикс для эмуляции schema должен устанавливаться только когда kudu.schema-emulation.enabled = true. Префикс по умолчанию — пустая строка: .

Примеры

Следующие примеры создают unified catalog с именем unified_catalog_hms или unified_catalog_glue, в зависимости от типа используемого вами metastore, для запроса данных из вашего единого источника данных.

HDFS

Если вы используете HDFS в качестве хранилища, выполните команду, подобную следующей:

CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);

AWS S3

Аутентификация на основе instance profile
  • Если вы используете Hive metastore, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "aws.s3.use_instance_profile" = "true",
    "aws.s3.region" = "us-west-2"
    );
  • Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_glue
    PROPERTIES
    (
    "type" = "unified",
    "unified.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"
    );
Аутентификация на основе assumed role
  • Если вы используете Hive metastore, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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"
    );
  • Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_glue
    PROPERTIES
    (
    "type" = "unified",
    "unified.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 user
  • Если вы используете Hive metastore, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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"
    );
  • Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_glue
    PROPERTIES
    (
    "type" = "unified",
    "unified.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"
    );

S3-совместимая система хранения

На примере MinIO. Выполните команду, подобную следующей:

CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.enable_ssl" = "true",
"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>"
);

Microsoft Azure Storage

Azure Blob Storage
  • Если вы выбираете метод аутентификации Shared Key, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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 Token, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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 Gen1
  • Если вы выбираете метод аутентификации Managed Service Identity, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "azure.adls1.use_managed_service_identity" = "true"
    );
  • Если вы выбираете метод аутентификации Service Principal, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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>"
    );
Azure Data Lake Storage Gen2
  • Если вы выбираете метод аутентификации Managed Identity, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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>"
    );
  • Если вы выбираете метод аутентификации Shared Key, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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>"
    );
  • Если вы выбираете метод аутентификации Service Principal, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.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>"
    );

Google GCS

  • Если вы выбираете метод аутентификации на основе VM, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "gcp.gcs.use_compute_engine_service_account" = "true"
    );
  • Если вы выбираете метод аутентификации на основе сервисной учётной записи, выполните команду, подобную следующей:

    CREATE EXTERNAL CATALOG unified_catalog_hms
    PROPERTIES
    (
    "type" = "unified",
    "unified.metastore.type" = "hive",
    "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
    "gcp.gcs.service_account_email" = "<google_service_account_email>",
    "gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
    "gcp.gcs.service_account_private_key" = "<google_service_private_key>"
    );
  • Если вы выбираете метод аутентификации на основе имперсонации:

    • Если вы настраиваете VM-инстанс на имперсонацию сервисной учётной записи, выполните команду, подобную следующей:

      CREATE EXTERNAL CATALOG unified_catalog_hms
      PROPERTIES
      (
      "type" = "unified",
      "unified.metastore.type" = "hive",
      "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
      "gcp.gcs.use_compute_engine_service_account" = "true",
      "gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"
      );
    • Если вы настраиваете сервисную учётную запись на имперсонацию другой сервисной учётной записи, выполните команду, подобную следующей:

      CREATE EXTERNAL CATALOG unified_catalog_hms
      PROPERTIES
      (
      "type" = "unified",
      "unified.metastore.type" = "hive",
      "hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
      "gcp.gcs.service_account_email" = "<google_service_account_email>",
      "gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
      "gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
      "gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"
      );

Просмотр unified catalog

Вы можете использовать SHOW CATALOGS для запроса всех catalog в текущем Selena cluster:

SHOW CATALOGS;

Вы также можете использовать SHOW CREATE CATALOG для запроса оператора создания внешнего catalog. Следующий пример запрашивает оператор создания unified catalog с именем unified_catalog_glue:

SHOW CREATE CATALOG unified_catalog_glue;

Переключение на Unified Catalog и базу данных в нём

Вы можете использовать один из следующих методов для переключения на unified catalog и базу данных в нём:

  • Используйте SET CATALOG для указания unified catalog в текущей сессии, а затем используйте USE для указания активной базы данных:

    -- Переключение на указанный catalog в текущей сессии:
    SET CATALOG <catalog_name>
    -- Указание активной базы данных в текущей сессии:
    USE <db_name>
  • Напрямую используйте USE для переключения на unified catalog и базу данных в нём:

    USE <catalog_name>.<db_name>

Удаление unified catalog

Вы можете использовать DROP CATALOG для удаления внешнего catalog.

Следующий пример удаляет unified catalog с именем unified_catalog_glue:

DROP CATALOG unified_catalog_glue;

Просмотр схемы таблицы из unified catalog

Вы можете использовать один из следующих синтаксисов для просмотра схемы таблицы из unified catalog:

  • Просмотр схемы

    DESC[RIBE] <catalog_name>.<database_name>.<table_name>
  • Просмотр схемы и расположения из оператора CREATE

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

Запрос данных из unified catalog

Для запроса данных из unified catalog выполните следующие шаги:

  1. Используйте SHOW DATABASES для просмотра баз данных в вашем едином источнике данных, с которым связан unified catalog:

    SHOW DATABASES FROM <catalog_name>
  2. Переключитесь на Hive Catalog и базу данных в нём.

  3. Используйте SELECT для запроса целевой таблицы в указанной базе данных:

    SELECT count(*) FROM <table_name> LIMIT 10

Загрузка данных из Hive, Iceberg, Hudi, Delta Lake или Kudu

Вы можете использовать INSERT INTO для загрузки данных таблицы Hive, Iceberg, Hudi, Delta Lake или Kudu в таблицу Selena, созданную в unified catalog.

Следующий пример загружает данные таблицы Hive hive_table в таблицу Selena test_tbl, созданную в базе данных test_database, которая принадлежит unified catalog unified_catalog:

INSERT INTO unified_catalog.test_database.test_table SELECT * FROM hive_table

Создание базы данных в unified catalog

Аналогично внутреннему catalog Selena, если у вас есть привилегия CREATE DATABASE на unified catalog, вы можете использовать оператор CREATE DATABASE для создания базы данных в этом catalog.

ПРИМЕЧАНИЕ

Вы можете предоставлять и отзывать привилегии с помощью GRANT и REVOKE.

Selena поддерживает создание только баз данных Hive и Iceberg в unified catalog.

Переключитесь на unified catalog, а затем используйте следующий оператор для создания базы данных в этом catalog:

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

Параметр location указывает путь к файлу, в котором вы хотите создать базу данных, который может быть в HDFS или облачном хранилище.

  • Когда вы используете Hive metastore в качестве metastore вашего источника данных, параметр location по умолчанию имеет значение <warehouse_location>/<database_name.db>, которое поддерживается Hive metastore, если вы не указываете этот параметр при создании базы данных.
  • Когда вы используете AWS Glue в качестве metastore вашего источника данных, параметр location не имеет значения по умолчанию, и поэтому вы должны указать этот параметр при создании базы данных.

prefix варьируется в зависимости от используемой вами системы хранения:

Система храненияЗначение prefix
HDFShdfs
Google GCSgs
Azure Blob Storage
  • Если ваша учётная запись хранения разрешает доступ через HTTP, prefixwasb.
  • Если ваша учётная запись хранения разрешает доступ через HTTPS, prefixwasbs.
Azure Data Lake Storage Gen1adl
Azure Data Lake Storage Gen2
  • Если ваша учётная запись хранения разрешает доступ через HTTP, prefixabfs.
  • Если ваша учётная запись хранения разрешает доступ через HTTPS, prefixabfss.
AWS S3 или другое S3-совместимое хранилище (например, MinIO)s3

Удаление базы данных из unified catalog

Аналогично внутренним базам данных Selena, если у вас есть привилегия DROP на базу данных, созданную в unified catalog, вы можете использовать оператор DROP DATABASE для удаления этой базы данных. Удалять можно только пустые базы данных.

ПРИМЕЧАНИЕ

Вы можете предоставлять и отзывать привилегии с помощью GRANT и REVOKE.

Selena поддерживает удаление только баз данных Hive и Iceberg из unified catalog.

При удалении базы данных из unified catalog путь к файлам базы данных в вашем HDFS cluster или облачном хранилище не удаляется вместе с базой данных.

Переключитесь на unified catalog, а затем используйте следующий оператор для удаления базы данных в этом catalog:

DROP DATABASE <database_name>

Создание таблицы в unified catalog

Аналогично внутренним базам данных Selena, если у вас есть привилегия CREATE TABLE на базу данных, созданную в unified catalog, вы можете использовать оператор CREATE TABLE или CREATE TABLE AS SELECT для создания таблицы в этой базе данных.

ПРИМЕЧАНИЕ

Вы можете предоставлять и отзывать привилегии с помощью GRANT и REVOKE.

Selena поддерживает создание только таблиц Hive и Iceberg в unified catalog.

Переключитесь на Hive Catalog и базу данных в нём. Затем используйте CREATE TABLE для создания таблицы Hive или Iceberg в этой базе данных:

CREATE TABLE <table_name>
(column_definition1[, column_definition2, ...]
ENGINE = {|hive|iceberg}
[partition_desc]

Подробнее см. в разделах Создание таблицы Hive и Создание таблицы Iceberg.

Следующий пример создаёт таблицу Hive с именем hive_table. Таблица состоит из трёх столбцов action, id и dt, из которых id и dt являются столбцами partition.

CREATE TABLE hive_table
(
action varchar(65533),
id int,
dt date
)
ENGINE = hive
PARTITION BY (id,dt);

Загрузка данных в таблицу в unified catalog

Аналогично внутренним таблицам Selena, если у вас есть привилегия INSERT на таблицу, созданную в unified catalog, вы можете использовать оператор INSERT для загрузки данных таблицы Selena в эту таблицу Unified Catalog (в настоящее время поддерживаются только таблицы Unified Catalog в формате Parquet).

ПРИМЕЧАНИЕ

Вы можете предоставлять и отзывать привилегии с помощью GRANT и REVOKE.

Selena поддерживает загрузку данных только в таблицы Hive и Iceberg в unified catalog.

Переключитесь на Hive Catalog и базу данных в нём. Затем используйте INSERT INTO для вставки данных в таблицу Hive или Iceberg в этой базе данных:

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

-- Если вы хотите загрузить данные в указанные partition, используйте следующий синтаксис:
INSERT {INTO | OVERWRITE} <table_name>
PARTITION (par_col1=<value> [, par_col2=<value>...])
{ VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query }

Подробнее см. в разделах Загрузка данных в таблицу Hive и Загрузка данных в таблицу Iceberg.

Следующий пример вставляет три строки данных в таблицу Hive с именем hive_table:

INSERT INTO hive_table
VALUES
("buy", 1, "2023-09-01"),
("sell", 2, "2023-09-02"),
("buy", 3, "2023-09-03");

Удаление таблицы из unified catalog

Аналогично внутренним таблицам Selena, если у вас есть привилегия DROP на таблицу, созданную в unified catalog, вы можете использовать оператор DROP TABLE для удаления этой таблицы.

ПРИМЕЧАНИЕ

Вы можете предоставлять и отзывать привилегии с помощью GRANT и REVOKE.

Selena поддерживает удаление только таблиц Hive и Iceberg из unified catalog.

Переключитесь на Hive Catalog и базу данных в нём. Затем используйте DROP TABLE для удаления таблицы Hive или Iceberg в этой базе данных:

DROP TABLE <table_name>

Подробнее см. в разделах Удаление таблицы Hive и Удаление таблицы Iceberg.

Следующий пример удаляет таблицу Hive с именем hive_table:

DROP TABLE hive_table FORCE