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

Delta Lake catalog

Delta Lake catalog — это разновидность внешнего каталога, который позволяет выполнять запросы к данным Delta Lake без их загрузки.

Также вы можете напрямую трансформировать и загружать данные из Delta Lake с помощью INSERT INTO на основе каталогов Delta Lake. Selena поддерживает каталоги Delta Lake начиная с версии v1.5.2.

Чтобы обеспечить успешное выполнение SQL-запросов в вашем cluster Delta Lake, ваш cluster Selena должен иметь доступ к системе хранения и metastore вашего cluster Delta Lake. 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.

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

  • Формат файлов Delta Lake, который поддерживает Selena — это Parquet. Файлы Parquet поддерживают следующие форматы сжатия: SNAPPY, LZ4, ZSTD, GZIP и NO_COMPRESSION.
  • Типы данных Delta Lake, которые Selena не поддерживает — это MAP и STRUCT.

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

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

AWS IAM

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

Рекомендуются следующие методы аутентификации:

  • Instance profile
  • Assumed role
  • IAM user

Из трёх вышеупомянутых методов аутентификации наиболее широко используется instance profile.

Для получения дополнительной информации см. Подготовка к аутентификации в AWS IAM.

HDFS

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

  • (Опционально) Установите имя пользователя, которое используется для доступа к вашему cluster HDFS и Hive metastore. По умолчанию Selena использует имя пользователя процессов FE и BE или CN для доступа к вашему cluster HDFS и 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, чтобы настройки параметров вступили в силу. Вы можете установить только одно имя пользователя для каждого cluster Selena.

  • При запросе данных Delta Lake узлы FE и BE или CN вашего cluster Selena используют HDFS-клиент для доступа к вашему cluster HDFS. В большинстве случаев вам не нужно настраивать ваш cluster Selena для достижения этой цели, и Selena запускает HDFS-клиент с использованием настроек по умолчанию. Вам нужно настроить ваш cluster Selena только в следующих ситуациях:

    • Для вашего cluster HDFS включена высокая доступность (HA): Добавьте файл hdfs-site.xml вашего cluster HDFS в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
    • Для вашего cluster HDFS включена View File System (ViewFs): Добавьте файл core-site.xml вашего cluster HDFS в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
    примечание

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

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

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

  • Выполните команду kinit -kt keytab_path principal на каждом FE и каждом BE или CN, чтобы получить Ticket Granting Ticket (TGT) от Key Distribution Center (KDC). Для выполнения этой команды у вас должны быть разрешения на доступ к вашему cluster HDFS и 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. Вы можете изменить путь в соответствии с вашими потребностями.

Создание Delta Lake catalog

Синтаксис

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

Параметры

catalog_name

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

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

comment

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

type

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

MetastoreParams

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

Hive metastore

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

"hive.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
примечание

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

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

ПараметрОбязательныйОписание
hive.metastore.typeДаТип metastore, который вы используете для вашего cluster Delta Lake. Установите значение 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 следующим образом:

    "hive.metastore.type" = "glue",
    "aws.glue.use_instance_profile" = "true",
    "aws.glue.region" = "<aws_glue_region>"
  • Чтобы выбрать метод аутентификации на основе assumed role, настройте 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 user, настройте 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ДаТип metastore, который вы используете для вашего cluster Delta Lake. Установите значение glue.
aws.glue.use_instance_profileДаУказывает, включать ли метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false.
aws.glue.iam_role_arnНетARN роли IAM, которая имеет привилегии на ваш AWS Glue Data Catalog. Если вы используете метод аутентификации на основе assumed role для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.regionДаРегион, в котором находится ваш AWS Glue Data Catalog. Пример: us-west-1.
aws.glue.access_keyНетКлюч доступа вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.
aws.glue.secret_keyНетСекретный ключ вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS Glue, вы должны указать этот параметр.

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

StorageCredentialParams

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

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

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

AWS S3

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

  • Чтобы выбрать метод аутентификации на основе 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, которая имеет привилегии на ваш bucket AWS S3. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.regionДаРегион, в котором находится ваш bucket AWS S3. Пример: us-west-1.
aws.s3.access_keyНетКлюч доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_keyНетСекретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.

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

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

Delta Lake catalogs поддерживают S3-совместимые системы хранения начиная с версии v1.5.2.

Если вы выбираете S3-совместимую систему хранения, такую как MinIO, в качестве хранилища для вашего cluster Delta Lake, настройте 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ДаУказывает, включать ли доступ в стиле path.
Допустимые значения: true и false. Значение по умолчанию: false. Для MinIO вы должны установить значение true.
URL в стиле path используют следующий формат: https://s3.<region_code>.amazonaws.com/<bucket_name>/<key_name>. Например, если вы создаёте bucket с именем DOC-EXAMPLE-BUCKET1 в регионе US West (Oregon) и хотите получить доступ к объекту alice.jpg в этом bucket, вы можете использовать следующий URL в стиле path: https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/alice.jpg.
aws.s3.endpointДаКонечная точка, которая используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_keyДаКлюч доступа вашего пользователя IAM.
aws.s3.secret_keyДаСекретный ключ вашего пользователя IAM.
Microsoft Azure Storage

Delta Lake catalogs поддерживают Microsoft Azure Storage начиная с версии v1.5.2.

Azure Blob Storage

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

  • Чтобы выбрать метод аутентификации 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ДаОбщий ключ вашей учётной записи 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-токен, который используется для доступа к вашей учётной записи Blob Storage.
Azure Data Lake Storage Gen2

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

  • Чтобы выбрать метод аутентификации 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ДаИдентификатор арендатора, к данным которого вы хотите получить доступ.
    azure.adls2.oauth2_client_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ДаОбщий ключ вашей учётной записи хранения 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ДаИдентификатор клиента (приложения) service principal.
    azure.adls2.oauth2_client_secretДаЗначение созданного нового секрета клиента (приложения).
    azure.adls2.oauth2_client_endpointДаКонечная точка токена OAuth 2.0 (v1) service principal или приложения.
Azure Data Lake Storage Gen1

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

  • Чтобы выбрать метод аутентификации 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ДаИдентификатор клиента (приложения) service principal.
    azure.adls1.oauth2_credentialДаЗначение созданного нового секрета клиента (приложения).
    azure.adls1.oauth2_endpointДаКонечная точка токена OAuth 2.0 (v1) service principal или приложения.
Google GCS

Delta Lake catalogs поддерживают Google GCS начиная с версии v1.5.2.

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

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

    "gcp.gcs.use_compute_engine_service_account" = "true"

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

    ПараметрЗначение по умолчаниюПример значенияОписание
    gcp.gcs.use_compute_engine_service_accountfalsetrueУказывает, использовать ли напрямую учётную запись службы, привязанную к вашему Compute Engine.
  • Чтобы выбрать метод аутентификации на основе service account, настройте 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"Идентификатор приватного ключа в JSON-файле, созданном при создании учётной записи службы.
    gcp.gcs.service_account_private_key"""-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"Приватный ключ в JSON-файле, созданном при создании учётной записи службы.
  • Чтобы выбрать метод аутентификации на основе impersonation, настройте 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"Идентификатор приватного ключа в 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 обновляет кешированные метаданные Delta Lake. Этот набор параметров является опциональным.

Начиная с версии v1.5.2, Delta Lake Catalog поддерживает Локальное кеширование и получение метаданных. В большинстве случаев вы можете игнорировать MetadataUpdateParams и вам не нужно настраивать параметры политики в нём, потому что значения этих параметров по умолчанию уже обеспечивают производительность "из коробки".

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

примечание

В большинстве случаев, если ваши данные Delta Lake обновляются с детализацией 1 час или меньше, частота обновления данных считается высокой.

ПараметрЕдиница измеренияПо умолчаниюОписание
enable_deltalake_table_cache-trueВключать ли Table Cache в кеше метаданных для Delta Lake.
enable_deltalake_json_meta_cache-trueВключать ли кеш для JSON-файлов Delta Log.
deltalake_json_meta_cache_ttl_secСекунда48 * 60 * 60Время жизни (TTL) для кеша JSON-файлов Delta Log.
deltalake_json_meta_cache_memory_usage_ratio-0.1Максимальное соотношение размера JVM Heap, занимаемого кешем JSON-файлов Delta Log.
enable_deltalake_checkpoint_meta_cache-trueВключать ли кеш для файлов Checkpoint Delta Log.
deltalake_checkpoint_meta_cache_ttl_secСекунда48 * 60 * 60Время жизни (TTL) для кеша файлов Checkpoint Delta Log.
deltalake_checkpoint_meta_cache_memory_usage_ratio-0.1Максимальное соотношение размера JVM Heap, занимаемого кешем файлов Checkpoint Delta Log.

Примеры

Следующие примеры создают Delta Lake catalog с именем deltalake_catalog_hms или deltalake_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего cluster Delta Lake.

HDFS

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

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

AWS S3

Если вы выбираете учётные данные на основе instance profile
  • Если вы используете Hive metastore в вашем cluster Delta Lake, выполните команду, подобную приведённой ниже:

    CREATE EXTERNAL CATALOG deltalake_catalog_hms
    PROPERTIES
    (
    "type" = "deltalake",
    "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"
    );
  • Если вы используете AWS Glue в вашем cluster Delta Lake Amazon EMR, выполните команду, подобную приведённой ниже:

    CREATE EXTERNAL CATALOG deltalake_catalog_glue
    PROPERTIES
    (
    "type" = "deltalake",
    "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"
    );
If you choose assumed role-based credential
  • Если вы используете Hive metastore в вашем cluster Delta Lake, выполните команду, подобную приведённой ниже:

    CREATE EXTERNAL CATALOG deltalake_catalog_hms
    PROPERTIES
    (
    "type" = "deltalake",
    "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"
    );
  • Если вы используете AWS Glue в вашем cluster Delta Lake Amazon EMR, выполните команду, подобную приведённой ниже:

    CREATE EXTERNAL CATALOG deltalake_catalog_glue
    PROPERTIES
    (
    "type" = "deltalake",
    "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 user
  • Если вы используете Hive metastore в вашем cluster Delta Lake, выполните команду, подобную приведённой ниже:

    CREATE EXTERNAL CATALOG deltalake_catalog_hms
    PROPERTIES
    (
    "type" = "deltalake",
    "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"
    );
  • Если вы используете AWS Glue в вашем cluster Delta Lake Amazon EMR, выполните команду, подобную приведённой ниже:

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

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

Используем MinIO в качестве примера. Выполните команду, подобную приведённой ниже:

CREATE EXTERNAL CATALOG deltalake_catalog_hms
PROPERTIES
(
"type" = "deltalake",
"hive.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 deltalake_catalog_hms
    PROPERTIES
    (
    "type" = "deltalake",
    "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 Token, выполните команду, подобную приведённой ниже:

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

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

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

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

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

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

Google GCS

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

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

    CREATE EXTERNAL CATALOG deltalake_catalog_hms
    PROPERTIES
    (
    "type" = "deltalake",
    "hive.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>"
    );
  • Если вы выбираете метод аутентификации на основе impersonation:

    • Если вы делаете так, чтобы экземпляр VM выдавал себя за учётную запись службы, выполните команду, подобную приведённой ниже:

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

Просмотр Delta Lake catalogs

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

SHOW CATALOGS;

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

SHOW CREATE CATALOG deltalake_catalog_glue;

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

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

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

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

    USE <catalog_name>.<db_name>

Удаление Delta Lake catalog

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

Следующий пример удаляет Delta Lake catalog с именем deltalake_catalog_glue:

DROP Catalog deltalake_catalog_glue;

Просмотр схемы таблицы Delta Lake

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

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

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

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

Запрос таблицы Delta Lake

  1. Используйте SHOW DATABASES для просмотра баз данных в вашем cluster Delta Lake:

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

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

    SELECT count(*) FROM <table_name> LIMIT 10

Загрузка данных из Delta Lake

Предположим, у вас есть OLAP-таблица с именем olap_tbl, вы можете преобразовать и загрузить данные следующим образом:

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM deltalake_table

Настройка кеша метаданных и стратегии обновления

Начиная с версии v1.5.2, Delta Lake Catalog поддерживает Локальное кеширование и получение метаданных.

Вы можете настроить обновление кеша метаданных Delta Lake с помощью следующих параметров FE:

Элемент конфигурацииПо умолчаниюОписание
enable_background_refresh_connector_metadatatrueВключать ли периодическое обновление кеша метаданных Delta Lake. После включения Selena опрашивает metastore (Hive Metastore или AWS Glue) вашего cluster Delta Lake и обновляет кешированные метаданные часто используемых Delta Lake catalogs для восприятия изменений данных. true указывает на включение обновления кеша метаданных Delta Lake, а false указывает на отключение.
background_refresh_metadata_interval_millis600000Интервал между двумя последовательными обновлениями кеша метаданных Delta Lake. Единица измерения: миллисекунда.
background_refresh_metadata_time_secs_since_last_access_secs86400Время истечения задачи обновления кеша метаданных Delta Lake. Для Delta Lake catalog, к которому был осуществлён доступ, если к нему не было обращений более указанного времени, Selena прекращает обновление его кешированных метаданных. Для Delta Lake catalog, к которому не было обращений, Selena не будет обновлять его кешированные метаданные. Единица измерения: секунда.

Приложение: Локальное кеширование и получение метаданных

Поскольку повторная распаковка и разбор файлов метаданных могут вызывать ненужные задержки, Selena использует новую стратегию кеширования метаданных — кеширование десериализованных объектов в памяти. Сохраняя эти десериализованные файлы в памяти, система может обойти этапы распаковки и разбора для последующих запросов. Этот механизм кеширования позволяет напрямую получать доступ к требуемым метаданным, значительно сокращая время получения. В результате система становится более отзывчивой и лучше приспособленной для удовлетворения высоких требований к запросам и потребностей в перезаписи материализованных представлений.

Вы можете настроить это поведение через свойство Catalog MetadataUpdateParams и соответствующие элементы конфигурации.

Поддержка функций

В настоящее время Delta Lake catalogs поддерживают следующие возможности таблиц:

  • V2 Checkpoint (начиная с v1.5.2)
  • Timestamp without Timezone (начиная с v1.5.2)
  • Column mapping (начиная с v1.5.2)
  • Deletion Vector (начиная с v1.5.2)