Перейти к основному содержимому

Hive catalog

Hive catalog — это тип external catalog, который поддерживается Selena начиная с версии 1.5.0. В рамках Hive catalogs вы можете:

  • Напрямую запрашивать данные, хранящиеся в Hive, без необходимости вручную создавать таблицы.
  • Использовать INSERT INTO или асинхронные материализованные представления (которые поддерживаются начиная с версии 1.5.0) для обработки данных, хранящихся в Hive, и загрузки данных в Selena.
  • Выполнять операции в Selena для создания или удаления баз данных и таблиц Hive, или записывать данные из таблиц Selena в таблицы Hive в формате Parquet (поддерживается с версии 3.2) и в форматах ORC или Textfile (поддерживается с версии 3.3) с помощью INSERT INTO.

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

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

  • Selena поддерживает запросы к таблицам Hive в форматах файлов Parquet, ORC, Textfile, Avro, RCFile и SequenceFile:

    • Файлы Parquet поддерживают следующие форматы сжатия: SNAPPY, LZ4, ZSTD, GZIP и NO_COMPRESSION. Начиная с версии 1.5.0, файлы Parquet также поддерживают формат сжатия LZO.
    • Файлы ORC поддерживают следующие форматы сжатия: ZLIB, SNAPPY, LZO, LZ4, ZSTD и NO_COMPRESSION.
    • Файлы Textfile поддерживают формат сжатия LZO начиная с версии 1.5.0.
  • Типы данных Hive, которые Selena не поддерживает: INTERVAL, BINARY и UNION. Кроме того, Selena не поддерживает типы данных MAP и STRUCT для таблиц Hive в формате Textfile.

  • Selena поддерживает запись данных в таблицы Hive в формате Parquet (поддерживается с версии 3.2) и в форматах ORC или Textfile (поддерживается с версии 3.3):

    • Файлы Parquet и ORC поддерживают следующие форматы сжатия: NO_COMPRESSION, SNAPPY, LZ4, ZSTD и GZIP.
    • Файлы Textfile поддерживают формат сжатия NO_COMPRESSION.

    Вы можете использовать переменную сеанса connector_sink_compression_codec для указания алгоритма сжатия, используемого для записи данных в таблицы Hive.

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

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

AWS IAM

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

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

  • Instance profile
  • Assumed role
  • IAM user

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

Для получения дополнительной информации см. Preparation for authentication in AWS IAM.

HDFS

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

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

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

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

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

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

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

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

Создание 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НетУказывает, читает ли Selena данные из таблицы и ее разделов, а также из подкаталогов в физических местоположениях таблицы и ее разделов. Допустимые значения: true и false. Значение по умолчанию: true. Значение true указывает на рекурсивный список подкаталогов, а значение false указывает на игнорирование подкаталогов.

MetastoreParams

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

Hive metastore

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

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

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

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

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

StorageCredentialParams

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

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

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

AWS S3

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

  • Чтобы выбрать метод аутентификации на основе 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, см. Authentication parameters for accessing AWS S3.

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

Hive catalogs поддерживают S3-совместимые системы хранения начиная с версии 1.5.0.

Если вы выберете S3-совместимую систему хранения, такую как MinIO, в качестве хранилища для вашего кластера Hive, настройте 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ДаКонечная точка, которая используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_keyДаКлюч доступа вашего пользователя IAM.
aws.s3.secret_keyДаСекретный ключ вашего пользователя IAM.
Microsoft Azure Storage

Hive catalogs поддерживают Microsoft Azure Storage начиная с версии 1.5.0.

Azure Blob Storage

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

  • Чтобы выбрать метод аутентификации 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 в качестве хранилища для вашего кластера Hive, выполните одно из следующих действий:

  • Чтобы выбрать метод аутентификации 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 арендатора, к данным которого вы хотите получить доступ.
    azure.adls2.oauth2_client_idДа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Да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 в качестве хранилища для вашего кластера Hive, выполните одно из следующих действий:

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

Hive catalogs поддерживают Google GCS начиная с версии 1.5.0.

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

  • Чтобы выбрать метод аутентификации на основе 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"ID приватного ключа в 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"Учетная запись службы, которую вы хотите имитировать.
    • Заставить учетную запись службы (временно названную мета-учетной записью службы) имитировать другую учетную запись службы (временно названную учетной записью службы данных):

      "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-файле, созданном при создании мета-учетной записи службы.
      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-файле, созданном при создании мета-учетной записи службы.
      gcp.gcs.impersonation_service_account"""hello"Учетная запись службы данных, которую вы хотите имитировать.

MetadataUpdateParams

Набор параметров о том, как Selena обновляет кэшированные метаданные Hive. Этот набор параметров необязательный.

Selena реализует автоматическую асинхронную политику обновления по умолчанию.

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

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

примечание

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

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

Примеры

Следующие примеры создают Hive catalog с именем hive_catalog_hms или hive_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего кластера Hive.

HDFS

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

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

AWS S3

Аутентификация на основе instance profile
  • Если вы используете Hive metastore в вашем кластере 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"
    );
  • Если вы используете AWS Glue в вашем кластере Amazon EMR Hive, выполните команду, подобную приведенной ниже:

    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"
    );
Аутентификация на основе assumed role
  • Если вы используете Hive metastore в вашем кластере 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"
    );
  • Если вы используете AWS Glue в вашем кластере Amazon EMR 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::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 в вашем кластере 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"
    );
  • Если вы используете AWS Glue в вашем кластере Amazon EMR Hive, выполните команду, подобную приведенной ниже:

    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"
    );

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

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

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

    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 Gen1
  • Если вы выберете метод аутентификации Managed Service Identity, выполните команду, подобную приведенной ниже:

    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"
    );
  • Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:

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

    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>"
    );
  • Если вы выберете метод аутентификации 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.storage_account" = "<storage_account_name>",
    "azure.adls2.shared_key" = "<shared_key>"
    );
  • Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:

    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>"
    );

Google GCS

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

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

Просмотр Hive catalogs

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

SHOW CATALOGS;

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

SHOW CREATE CATALOG hive_catalog_glue;

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

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

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

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

    USE <catalog_name>.<db_name>

Удаление Hive catalog

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

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

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. Используйте SHOW DATABASES для просмотра баз данных в вашем кластере Hive:

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

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

    SELECT count(*) FROM <table_name> LIMIT 10

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

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

INSERT INTO default_catalog.olap_db.olap_tbl SELECT * FROM hive_table

Предоставление привилегий на таблицы и представления Hive

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

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

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

примечание

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

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

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

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

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

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

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

Удаление базы данных Hive

Аналогично внутренним базам данных Selena, если у вас есть привилегия DROP на базу данных Hive, вы можете использовать оператор DROP DATABASE для удаления этой базы данных Hive. Эта функция поддерживается начиная с версии 1.5.0. Вы можете удалять только пустые базы данных.

примечание

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

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

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

DROP DATABASE <database_name>

Создание таблицы Hive

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

Эта функция поддерживается начиная с версии 1.5.0, в которой Selena поддерживает только создание таблиц Hive в формате Parquet. Начиная с версии 1.5.0, Selena также поддерживает создание таблиц Hive в форматах ORC и Textfile.

примечание
  • Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
  • Hive catalogs поддерживают CREATE TABLE LIKE начиная с версии 1.5.0.

Переключитесь на 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]
[LIKE [database.]<source_table_name>]

Параметры

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...])

В настоящее время Selena поддерживает только identity transforms, что означает, что Selena создает раздел для каждого уникального значения раздела.

ВНИМАНИЕ

Столбцы разделов должны быть определены после столбцов, не являющихся разделами. Столбцы разделов поддерживают все типы данных, исключая FLOAT, DOUBLE, DECIMAL и DATETIME, и не могут использовать NULL в качестве значения по умолчанию. Кроме того, последовательность столбцов разделов, объявленных в partition_desc, должна соответствовать последовательности столбцов, определенных в column_definition.

PROPERTIES

Вы можете указать атрибуты таблицы в формате "key" = "value" в properties.

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

СвойствоОписание
locationПуть к файлу, в котором вы хотите создать управляемую таблицу. При использовании HMS в качестве metastore вам не нужно указывать параметр location, поскольку Selena создаст таблицу в пути к файлу по умолчанию текущего Hive catalog. При использовании AWS Glue в качестве службы метаданных:
  • Если вы указали параметр location для базы данных, в которой вы хотите создать таблицу, вам не нужно указывать параметр location для таблицы. Таким образом, таблица по умолчанию использует путь к файлу базы данных, к которой она принадлежит.
  • Если вы не указали location для базы данных, в которой вы хотите создать таблицу, вы должны указать параметр location для таблицы.
file_formatФормат файла управляемой таблицы. Поддерживаемые форматы файлов: Parquet, ORC и Textfile. Форматы ORC и Textfile поддерживаются начиная с версии 1.5.0. Допустимые значения: parquet, orc и textfile. Значение по умолчанию: parquet.
compression_codecАлгоритм сжатия, используемый для управляемой таблицы. Это свойство устарело в версии 3.2.3, начиная с которой алгоритм сжатия, используемый для записи данных в таблицы Hive, единообразно контролируется переменной сеанса connector_sink_compression_codec.

Примеры

Следующие DDL используют формат файла по умолчанию Parquet в качестве примера.

  1. Создать неразделенную таблицу с именем unpartition_tbl. Таблица состоит из двух столбцов, id и score, как показано ниже:

    CREATE TABLE unpartition_tbl
    (
    id int,
    score double
    );
  2. Создать разделенную таблицу с именем partition_tbl_1. Таблица состоит из трех столбцов, action, id и dt, из которых id и dt определены как столбцы разделов, как показано ниже:

    CREATE TABLE partition_tbl_1
    (
    action varchar(20),
    id int,
    dt date
    )
    PARTITION BY (id,dt);
  3. Запросить существующую таблицу с именем partition_tbl_1 и создать разделенную таблицу с именем partition_tbl_2 на основе результата запроса partition_tbl_1. Для partition_tbl_2 id и dt определены как столбцы разделов, как показано ниже:

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

Запись данных в таблицу Hive

Аналогично внутренним таблицам Selena, если у вас есть привилегия INSERT на таблицу Hive (которая может быть управляемой таблицей или внешней таблицей), вы можете использовать оператор INSERT для записи данных таблицы Selena в эту таблицу Hive.

Эта функция поддерживается начиная с версии 1.5.0, в которой данные могут записываться только в таблицы Hive в формате Parquet. Начиная с версии 1.5.0, Selena также поддерживает запись данных в таблицы Hive в форматах ORC и Textfile.

Обратите внимание, что запись данных во внешние таблицы отключена по умолчанию. Для записи данных во внешние таблицы вы должны установить системную переменную ENABLE_WRITE_HIVE_EXTERNAL_TABLE в true.

примечание
  • Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
  • Вы можете использовать переменную сеанса connector_sink_compression_codec для указания алгоритма сжатия, используемого для записи данных в таблицы Hive.

Переключитесь на Hive catalog и базу данных в нем, а затем используйте следующий синтаксис для записи данных таблицы Selena в таблицу Hive в формате Parquet в этой базе данных.

Синтаксис

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.

Параметры

ПараметрОписание
INTOДля добавления данных таблицы Selena к таблице Hive.
OVERWRITEДля перезаписи существующих данных таблицы Hive данными таблицы Selena.
column_nameИмя целевого столбца, в который вы хотите загрузить данные. Вы можете указать один или несколько столбцов. Если вы указываете несколько столбцов, разделите их запятыми (,). Вы можете указывать только столбцы, которые фактически существуют в таблице Hive, и целевые столбцы, которые вы указываете, должны включать столбцы разделов таблицы Hive. Целевые столбцы, которые вы указываете, сопоставляются один к одному в последовательности со столбцами таблицы Selena, независимо от того, какие имена целевых столбцов. Если целевые столбцы не указаны, данные загружаются во все столбцы таблицы Hive. Если столбец таблицы Selena, не являющийся разделом, не может быть сопоставлен ни с одним столбцом таблицы Hive, Selena записывает значение по умолчанию NULL в столбец таблицы Hive. Если оператор INSERT содержит оператор запроса, типы возвращаемых столбцов которого отличаются от типов данных целевых столбцов, Selena выполняет неявное преобразование несовпадающих столбцов. Если преобразование не удается, будет возвращена ошибка синтаксического анализа.
expressionВыражение, которое присваивает значения целевому столбцу.
DEFAULTПрисваивает значение по умолчанию целевому столбцу.
queryОператор запроса, результат которого будет загружен в таблицу Hive. Это может быть любой SQL-оператор, поддерживаемый Selena.
PARTITIONРазделы, в которые вы хотите загрузить данные. Вы должны указать все столбцы разделов таблицы Hive в этом свойстве. Столбцы разделов, которые вы указываете в этом свойстве, могут быть в другой последовательности, чем столбцы разделов, которые вы определили в операторе создания таблицы. Если вы указываете это свойство, вы не можете указать свойство column_name.

Примеры

Следующие DML используют формат файла по умолчанию Parquet в качестве примера.

  1. Вставить три строки данных в таблицу partition_tbl_1:

    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. Вставить результат SELECT-запроса, который читает данные из таблицы partition_tbl_1, в ту же таблицу:

    INSERT INTO partition_tbl_1 SELECT 'buy', 1, date_add(dt, INTERVAL 2 DAY)
    FROM partition_tbl_1
    WHERE id=1;
  4. Вставить результат SELECT-запроса в разделы, которые соответствуют двум условиям, dt='2023-09-01' и id=1, таблицы partition_tbl_2:

    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. Перезаписать все значения столбца action в разделах, которые соответствуют двум условиям, dt='2023-09-01' и id=1, таблицы partition_tbl_1 значением 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

Аналогично внутренним таблицам Selena, если у вас есть привилегия DROP на таблицу Hive, вы можете использовать оператор DROP TABLE для удаления этой таблицы Hive. Эта функция поддерживается начиная с версии 1.5.0. Обратите внимание, что в настоящее время Selena поддерживает удаление только управляемых таблиц Hive.

примечание

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

При удалении таблицы Hive вы должны указать ключевое слово FORCE в операторе DROP TABLE. После завершения операции путь к файлу таблицы сохраняется, но все данные таблицы в вашем кластере HDFS или облачном хранилище удаляются вместе с таблицей. Будьте осторожны при выполнении этой операции для удаления таблицы Hive.

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

DROP TABLE <table_name> FORCE

Ручное или автоматическое обновление кэша метаданных

Ручное обновление

По умолчанию Selena кэширует метаданные Hive и автоматически обновляет метаданные в асинхронном режиме для обеспечения лучшей производительности. Кроме того, после внесения некоторых изменений схемы или обновлений таблицы в таблицу Hive вы также можете использовать REFRESH EXTERNAL TABLE для ручного обновления ее метаданных, тем самым обеспечивая, что Selena может получить актуальные метаданные в кратчайшие сроки и сгенерировать соответствующие планы выполнения:

REFRESH EXTERNAL TABLE <table_name> [PARTITION ('partition_name', ...)]

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

  • Файл данных в существующем разделе изменен, например, путем выполнения команды INSERT OVERWRITE ... PARTITION ....

  • В таблице Hive внесены изменения схемы.

  • Существующая таблица Hive удалена с помощью оператора DROP, и создана новая таблица Hive с тем же именем, что и удаленная таблица Hive.

  • Вы указали "enable_cache_list_names" = "true" в PROPERTIES при создании вашего Hive catalog, и вы хотите запросить новые разделы, которые вы только что создали в вашем кластере Hive.

    примечание

    Начиная с версии 1.5.0, Selena предоставляет функцию периодического обновления кэша метаданных Hive. Для получения дополнительной информации см. раздел "Периодическое обновление кэша метаданных" ниже в этой теме. После включения этой функции Selena обновляет ваш кэш метаданных Hive каждые 10 минут по умолчанию. Поэтому ручные обновления не нужны в большинстве случаев. Вам нужно выполнить ручное обновление только тогда, когда вы хотите запросить новые разделы сразу после создания новых разделов в вашем кластере Hive.

Обратите внимание, что REFRESH EXTERNAL TABLE обновляет только таблицы и разделы, кэшированные в ваших FE.

Периодическое обновление кэша метаданных

Начиная с версии 1.5.0, Selena может периодически обновлять кэшированные метаданные часто используемых Hive catalogs для восприятия изменений данных. Вы можете настроить обновление кэша метаданных Hive через следующие параметры FE:

Элемент конфигурацииПо умолчаниюОписание
enable_background_refresh_connector_metadatatrue в v3.0
false в v2.5
Включить ли периодическое обновление кэша метаданных Hive. После включения Selena опрашивает metastore (Hive Metastore или AWS Glue) вашего кластера Hive и обновляет кэшированные метаданные часто используемых Hive catalogs для восприятия изменений данных. true указывает на включение обновления кэша метаданных Hive, а false указывает на отключение. Этот элемент является динамическим параметром FE. Вы можете изменить его с помощью команды ADMIN SET FRONTEND CONFIG.
background_refresh_metadata_interval_millis600000 (10 минут)Интервал между двумя последовательными обновлениями кэша метаданных Hive. Единица: миллисекунда. Этот элемент является динамическим параметром FE. Вы можете изменить его с помощью команды ADMIN SET FRONTEND CONFIG.
background_refresh_metadata_time_secs_since_last_access_secs86400 (24 часа)Время истечения задачи обновления кэша метаданных Hive. Для Hive catalog, к которому был осуществлен доступ, если к нему не было доступа более указанного времени, Selena прекращает обновление его кэшированных метаданных. Для Hive catalog, к которому не было доступа, Selena не будет обновлять его кэшированные метаданные. Единица: секунда. Этот элемент является динамическим параметром FE. Вы можете изменить его с помощью команды ADMIN SET FRONTEND CONFIG.

Использование функции периодического обновления кэша метаданных Hive и политики автоматического асинхронного обновления метаданных вместе значительно ускоряет доступ к данным, снижает нагрузку чтения от внешних источников данных и улучшает производительность запросов.

Приложение: Понимание автоматического асинхронного обновления метаданных

Автоматическое асинхронное обновление — это политика по умолчанию, которую Selena использует для обновления метаданных в Hive catalogs.

По умолчанию (а именно, когда параметры enable_metastore_cache и enable_remote_file_cache оба установлены в true), если запрос попадает в раздел таблицы Hive, Selena автоматически кэширует метаданные раздела и метаданные базовых файлов данных раздела. Кэшированные метаданные обновляются с использованием политики ленивого обновления.

Например, есть таблица Hive с именем table2, которая имеет четыре раздела: p1, p2, p3 и p4. Запрос попадает в p1, и Selena кэширует метаданные p1 и метаданные базовых файлов данных p1. Предположим, что интервалы времени по умолчанию для обновления и отбрасывания кэшированных метаданных следующие:

  • Интервал времени (указанный параметром metastore_cache_refresh_interval_sec) для асинхронного обновления кэшированных метаданных p1 составляет 60 секунд.
  • Интервал времени (указанный параметром remote_file_cache_refresh_interval_sec) для асинхронного обновления кэшированных метаданных базовых файлов данных p1 составляет 60 секунд.
  • Интервал времени (указанный параметром metastore_cache_ttl_sec) для автоматического отбрасывания кэшированных метаданных p1 составляет 24 часа.
  • Интервал времени (указанный параметром remote_file_cache_ttl_sec) для автоматического отбрасывания кэшированных метаданных базовых файлов данных p1 составляет 36 часов.

На следующем рисунке показаны интервалы времени на временной шкале для лучшего понимания.

Timeline for updating and discarding cached metadata

Затем Selena обновляет или отбрасывает метаданные в соответствии со следующими правилами:

  • Если другой запрос снова попадает в p1 и текущее время с момента последнего обновления составляет менее 60 секунд, Selena не обновляет кэшированные метаданные p1 или кэшированные метаданные базовых файлов данных p1.
  • Если другой запрос снова попадает в p1 и текущее время с момента последнего обновления составляет более 60 секунд, Selena обновляет кэшированные метаданные p1 и кэшированные метаданные базовых файлов данных p1.
  • Если к таблице был осуществлен доступ в течение 24 часов, соответствующий кэш будет обновляться каждые 10 минут в фоновом режиме.
  • Если к p1 не было доступа в течение 24 часов с момента последнего обновления, Selena отбрасывает кэшированные метаданные p1. Метаданные будут кэшированы при следующем запросе.
  • Если к p1 не было доступа в течение 36 часов с момента последнего обновления, Selena отбрасывает кэшированные метаданные базовых файлов данных p1. Метаданные будут кэшированы при следующем запросе.