Унифицированный catalog
Унифицированный catalog — это тип external catalog, который предоставляется Selena начиная с версии 1.5.0 для работы с таблицами из источников данных Apache Hive™, Apache Iceberg, Apache Hudi, Delta Lake и Apache Kudu как единого источника данных без загрузки. С унифицированными каталогами вы можете:
- Напрямую запрашивать данные, хранящиеся в Hive, Iceberg, Hudi, Delta Lake, Paimon и Kudu, без необходимости вручную создавать таблицы.
- Использовать INSERT INTO или асинхронные материализованные представления (которые поддерживаются начиная с версии 1.5.0) для обработки данных, хранящихся в Hive, Iceberg, Hudi, Delta Lake, Paimon и Kudu, и загрузки данных в Selena.
- Выполнять операции в Selena для создания или удаления баз данных и таблиц Hive и Iceberg.
Чтобы обеспечить успешное выполнение SQL-рабочих нагрузок на вашем унифицированном источнике данных, ваш кластер Selena должен иметь доступ к системе хранения и metastore вашего унифицированного источника данных. Selena поддерживает следующие системы хранения и metastore:
-
Распределенная файловая система (HDFS) или объектное хранилище, такое как AWS S3, Microsoft Azure Storage, Google GCS или другая S3-совместимая система хранения (например, MinIO)
-
Metastore, такой как Hive metastore или AWS Glue
ПРИМЕЧАНИЕ
Если вы выберете AWS S3 в качестве хранилища, вы можете использовать HMS или AWS Glue в качестве metastore. Если вы выберете любую другую систему хранения, вы можете использовать только HMS в качестве metastore.
Ограничения
Один унифицированный catalog поддерживает интеграцию только с одной системой хранения и одним сервисом metastore. Поэтому убедитесь, что все источники данных, которые вы хотите интегрировать как унифицированный источник данных с Selena, используют одну и ту же систему хранения и сервис metastore.
Примечания по использованию
-
См. раздел "Примечания по использованию" в Hive catalog, Iceberg catalog, Hudi catalog, Delta Lake catalog, Paimon catalog и Kudu catalog, чтобы понять поддерживаемые форматы файлов и типы данных.
-
Операции, специфичные для формата, поддерживаются только для определенных форматов таблиц. Например, CREATE TABLE и DROP TABLE поддерживаются только для Hive и Iceberg, а REFRESH EXTERNAL TABLE поддерживается только для Hive и Hudi.
При создании таблицы в унифицированном каталоге с помощью оператора CREATE TABLE используйте параметр
ENGINEдля указания формата таблицы (Hive или Iceberg).
Подготовка к интеграции
Перед созданием унифицированного каталога убедитесь, что ваш кластер Selena может интегрироваться с системой хранения и metastore вашего унифицированного источника данных.
AWS IAM
Если вы используете AWS S3 в качестве хранилища или AWS Glue в качестве metastore, выберите подходящий метод аутентификации и выполните необходимые приготовления, чтобы убедиться, что ваш кластер Selena может получить доступ к соответствующим облачным ресурсам AWS. Для получения дополнительной информации см. Аутентификация в ресурсах AWS - Подготовка.
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. - При запросе данных 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. Вы можете изменить путь в соответствии с вашими потребностями.
Создание унифицированного каталога
Синтаксис
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "unified",
MetastoreParams,
StorageCredentialParams,
MetadataUpdateParams,
PaimonCatalogParams,
KuduCatalogParams
)
Параметры
catalog_name
Имя унифицированного каталога. Соглашения об именовании следующие:
- Имя может содержать буквы, цифры (0-9) и символы подчеркивания (_). Оно должно начинаться с буквы.
- Имя чувствительно к регистру и не может превышать 1023 символа в длину.
comment
Описание унифицированного каталога. Этот параметр необязательный.
type
Тип вашего источника данных. Установите значение unified.
MetastoreParams
Набор параметров о том, как Selena интегрируется с вашим metastore.
Hive metastore
Если вы выберете Hive metastore в качестве metastore вашего унифицированного источника данных, настройте MetastoreParams следующим образом:
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
ПРИМЕЧАНИЕ
Перед запросом данных вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.
В следующей таблице описаны параметры, которые вам нужно настроить в MetastoreParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| unified.metastore.type | Да | Тип metastore, который вы используете для вашего унифицированного источника данных. Установите значение hive. |
| hive.metastore.uris | Да | URI вашего Hive metastore. Формат: thrift://<metastore_IP_address>:<metastore_port>. Если высокая доступность (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 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе профиля экземпляра, настройте
MetastoreParamsследующим образом:"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
Чтобы выбрать метод аутентификации на основе принятой роли, настройте
MetastoreParamsследующим образом:"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "<iam_role_arn>",
"aws.glue.region" = "<aws_glue_region>" -
Чтобы выбрать метод аутентификации на основе пользователя IAM, настройте
MetastoreParamsследующим образом:"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "<aws_s3_region>"
В следующей таблице описаны параметры, которые вам нужно настроить в MetastoreParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| unified.metastore.type | Да | Тип metastore, который вы используете для вашего унифицированного источника данных. Установите значение glue. |
| aws.glue.use_instance_profile | Да | Указывает, следует ли включить метод аутентификации на основе профиля экземпляра и аутентификацию на основе принятой роли. Допустимые значения: true и false. Значение по умолчанию: false. |
| aws.glue.iam_role_arn | Нет | ARN роли IAM, которая имеет привилегии в вашем AWS Glue Data Catalog. Если вы используете метод аутентификации на основе принятой роли для доступа к AWS Glue, вы должны указать этот параметр. |
| aws.glue.region | Да | Регион, в котором находится ваш AWS Glue Data Catalog. Пример: us-west-1. |
| aws.glue.access_key | Нет | Ключ доступа вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS Glue, вы должны указать этот параметр. |
| aws.glue.secret_key | Нет | Секретный ключ вашего пользователя AWS IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS Glue, вы должны указать этот параметр. |
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS Glue и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS Glue.
StorageCredentialParams
Набор параметров о том, как Selena интегрируется с вашей системой хранения. Этот набор параметров необязательный.
Если вы используете HDFS в качестве хранилища, вам не нужно настраивать StorageCredentialParams.
Если вы используете AWS S3, другую S3-совместимую систему хранения, Microsoft Azure Storage или Google GCS в качестве хранилища, вы должны настроить StorageCredentialParams.
AWS S3
Если вы выберете AWS S3 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе профиля экземпляра, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "<aws_s3_region>" -
Чтобы выбрать метод аутентификации на основе принятой роли, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "<iam_role_arn>",
"aws.s3.region" = "<aws_s3_region>" -
Чтобы выбрать метод аутентификации на основе пользователя IAM, настройте
StorageCredentialParamsследующим образом:"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "<aws_s3_region>"
В следующей таблице описаны параметры, которые вам нужно настроить в StorageCredentialParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| aws.s3.use_instance_profile | Да | Указывает, следует ли включить метод аутентификации на основе профиля экземпляра и метод аутентификации на основе принятой роли. Допустимые значения: true и false. Значение по умолчанию: false. |
| aws.s3.iam_role_arn | Нет | ARN роли IAM, которая имеет привилегии в вашем корзине AWS S3. Если вы используете метод аутентификации на основе принятой роли для доступа к AWS S3, вы должны указать этот параметр. |
| aws.s3.region | Да | Регион, в котором находится ваша корзина AWS S3. Пример: us-west-1. |
| aws.s3.access_key | Нет | Ключ доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS S3, вы должны указать этот параметр. |
| aws.s3.secret_key | Нет | Секретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе пользователя IAM для доступа к AWS S3, вы должны указать этот параметр. |
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS S3.
S3-совместимая система хранения
Если вы выберете S3-совместимую систему хранения, такую как MinIO, в качестве хранилища, настройте StorageCredentialParams следующим образом для обеспечения успешной интеграции:
"aws.s3.enable_ssl" = "false",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
В следующей таблице описаны параметры, которые вам нужно настроить в StorageCredentialParams.
| Параметр | Обязательный | Описание |
|---|---|---|
| aws.s3.enable_ssl | Да | Указывает, следует ли включить SSL-соединение. Допустимые значения: true и false. Значение по умолчанию: true. |
| aws.s3.enable_path_style_access | Да | Указывает, следует ли включить доступ в стиле пути. Допустимые значения: true и false. Значение по умолчанию: false. Для MinIO вы должны установить значение true.URL-адреса в стиле пути используют следующий формат: https://s3.<region_code>.amazonaws.com/<bucket_name>/<key_name>. Например, если вы создаете корзину с именем DOC-EXAMPLE-BUCKET1 в регионе US West (Oregon) и хотите получить доступ к объекту alice.jpg в этой корзине, вы можете использовать следующий 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
Azure Blob Storage
Если вы выберете Blob Storage в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Shared Key, настройте
StorageCredentialParamsследующим образом:"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.shared_key" = "<storage_account_shared_key>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.blob.storage_account Да Имя пользователя вашей учетной записи Blob Storage. azure.blob.shared_key Да Общий ключ вашей учетной записи 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 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации 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 клиента (приложения) субъекта-службы. azure.adls2.oauth2_client_secret Да Значение нового секрета клиента (приложения), созданного. azure.adls2.oauth2_client_endpoint Да Конечная точка токена OAuth 2.0 (v1) субъекта-службы или приложения.
Azure Data Lake Storage Gen1
Если вы выберете Data Lake Storage Gen1 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Managed Service Identity, настройте
StorageCredentialParamsследующим образом:"azure.adls1.use_managed_service_identity" = "true"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Обязательный Описание azure.adls1.use_managed_service_identity Да Указывает, следует ли включить метод аутентификации Managed Service Identity. Установите значение true. -
Чтобы выбрать метод аутентификации Service Principal, настройте
StorageCredentialParamsследующим образом:"azure.adls1.oauth2_client_id" = "<application_client_id>",
"azure.adls1.oauth2_credential" = "<application_client_credential>",
"azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр О бязательный Описание azure.adls1.oauth2_client_id Да ID клиента (приложения) субъекта-службы. azure.adls1.oauth2_credential Да Значение нового секрета клиента (приложения), созданного. azure.adls1.oauth2_endpoint Да Конечная точка токена OAuth 2.0 (v1) субъекта-службы или приложения.
Google GCS
Если вы выберете Google GCS в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе VM, настройте
StorageCredentialParamsследующим образом:"gcp.gcs.use_compute_engine_service_account" = "true"В следующей таблице описаны параметры, которые в ам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.use_compute_engine_service_account false true Указывает, следует ли напрямую использовать учетную запись службы, привязанную к вашему Compute Engine. -
Чтобы выбрать метод аутентификации на основе учетной записи службы, настройте
StorageCredentialParamsследующим образом:"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
"gcp.gcs.service_account_private_key" = "<google_service_private_key>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.service_account_email "" "user@hello.iam.gserviceaccount.com" Адрес электронной почты в JSON-файле, созданном при создании учетной записи службы. gcp.gcs.service_account_private_key_id "" "61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea" ID закрытого ключа в JSON-файле, созданном при создании учетной записи службы. gcp.gcs.service_account_private_key "" "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n" Закрытый ключ в JSON-файле, созданном при создании учетной записи службы. -
Чтобы выбрать метод аутентификации на основе олицетворения, настройте
StorageCredentialParamsследующим образом:-
Заставить экземпляр VM олицетворять учетную запись службы:
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"В следующей таблице описаны параметры, которые вам нужно настроить в
StorageCredentialParams.Параметр Значение по умолчанию Пример значения Описание gcp.gcs.use_compute_engine_service_account false true Указывает, следует ли напрямую использовать учетную запись службы, привязанную к вашему 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, Hudi и Delta Lake. Этот набор параметров необязательный. Для получения дополнительной информации о политиках обновления кэшированных метаданных из Hive, Hudi и Delta Lake см. Hive catalog, Hudi catalog и Delta Lake catalog.
В большинстве случаев вы можете игнорировать MetadataUpdateParams и не настраивать параметры политики в нем, поскольку значения по умолчанию этих параметров уже обеспечивают готовую к использованию производительность.
Однако, если частота обновлений данных в Hive, Hudi или Delta Lake высока, вы можете настроить эти параметры для дальнейшей оптимизации производительности автоматических асинхронных обновлений.
| Параметр | Обязательный | Описание |
|---|---|---|
| enable_metastore_cache | Нет | Указывает, кэширует ли Selena метаданные таблиц Hive, Hudi или Delta Lake. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, а значение false отключает кэш. |
| enable_remote_file_cache | Нет | Указывает, кэширует ли Selena метаданные базовых файлов данных таблиц или разделов Hive, Hudi или Delta Lake. Допустимые значения: true и false. Значение по умолчанию: true. Значение true включает кэш, а значение false отключает кэш. |
| metastore_cache_refresh_interval_sec | Нет | Интервал времени, с которым Selena асинхронно обновляет метаданные таблиц или разделов Hive, Hudi или Delta Lake, кэшированных в себе. Единица: секунды. Значение по умолчанию: 7200, что составляет 2 часа. |
| remote_file_cache_refresh_interval_sec | Нет | Интервал времени, с которым Selena асинхронно обновляет метаданные базовых файлов данных таблиц или разделов Hive, Hudi или Delta Lake, кэшированных в себе. Единица: секунды. Значение по умолчанию: 60. |
| metastore_cache_ttl_sec | Нет | Интервал времени, с которым Selena автоматически отбрасывает метаданные таблиц или разделов Hive, Hudi или Delta Lake, кэшированных в себе. Единица: секунды. Значение по умолчанию: 86400, что составляет 24 часа. |
| remote_file_cache_ttl_sec | Нет | Интервал времени, с которым Selena автоматически отбрасывает метаданные базовых файлов данных таблиц или разделов Hive, Hudi или Delta Lake, кэшированных в себе. Единица: секунды. Значение по умолчанию: 129600, что составляет 36 часов. |
PaimonCatalogParams
Набор параметров о том, как подключиться к Paimon Catalog. Этот набор параметров необязательный.
| Параметр | Обязательный | Описание |
|---|---|---|
| paimon.catalog.warehouse | Нет | Путь хранения склада ваших данных Paimon. |
KuduCatalogParams
Набор параметров о том, как подключиться к Kudu Catalog. Этот набор параметров необязательный.
| Параметр | Обязательный | Описание |
|---|---|---|
| kudu.master | Нет | Указывает адрес Kudu Master, который по умолчанию равен localhost:7051. |
| kudu.schema-emulation.enabled | Нет | Опция для включения или отключения эмуляции schema. По умолчанию она отключена (false), что означает, что все таблицы принадлежат schema по умолчанию. |
| kudu.schema-emulation.prefix | Нет | Префикс для эмуляции schema должен устанавливаться только когда kudu.schema-emulation.enabled = true. Префикс по умолчанию — пустая строка: . |
Примеры
Следующие примеры создают унифицированный каталог с именем unified_catalog_hms или unified_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего унифицированного источника данных.
HDFS
Если вы используете HDFS в качестве хранилища, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);
AWS S3
Аутентификация на основе профиля экземпляра
-
Если вы используете Hive metastore, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
); -
Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_glue
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "true",
"aws.s3.region" = "us-west-2"
);
Аутентификация на основе принятой роли
-
Если вы используете Hive metastore, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
"aws.s3.region" = "us-west-2"
); -
Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_glue
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.iam_role_arn" = "arn:aws:iam::081976408565:role/test_glue_role",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "true",
"aws.s3.iam_role_arn" = "arn:aws:iam::081976408565:role/test_s3_role",
"aws.s3.region" = "us-west-2"
);
Аутентификация на основе пользователя IAM
-
Если вы используете Hive metastore, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_access_key>",
"aws.s3.region" = "us-west-2"
); -
Если вы используете AWS Glue с Amazon EMR, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_glue
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "glue",
"aws.glue.use_instance_profile" = "false",
"aws.glue.access_key" = "<iam_user_access_key>",
"aws.glue.secret_key" = "<iam_user_secret_key>",
"aws.glue.region" = "us-west-2",
"aws.s3.use_instance_profile" = "false",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>",
"aws.s3.region" = "us-west-2"
);
S3-совместимая система хранения
Используйте MinIO в качестве примера. Выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"aws.s3.enable_ssl" = "true",
"aws.s3.enable_path_style_access" = "true",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
);
Microsoft Azure Storage
Azure Blob Storage
-
Если вы выберете метод аутентификации Shared Key, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.shared_key" = "<blob_storage_account_shared_key>"
); -
Если вы выберете метод аутентификации SAS Token, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.blob.storage_account" = "<blob_storage_account_name>",
"azure.blob.container" = "<blob_container_name>",
"azure.blob.sas_token" = "<blob_storage_account_SAS_token>"
);
Azure Data Lake Storage Gen1
-
Если вы выберете метод аутентификации Managed Service Identity, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.use_managed_service_identity" = "true"
); -
Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.oauth2_client_id" = "<application_client_id>",
"azure.adls1.oauth2_credential" = "<application_client_credential>",
"azure.adls1.oauth2_endpoint" = "<OAuth_2.0_authorization_endpoint_v2>"
);
Azure Data Lake Storage Gen2
-
Если вы выберете метод аутентификации Managed Identity, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.oauth2_use_managed_identity" = "true",
"azure.adls2.oauth2_tenant_id" = "<service_principal_tenant_id>",
"azure.adls2.oauth2_client_id" = "<service_client_id>"
); -
Если вы выберете метод аутентификации Shared Key, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<shared_key>"
); -
Если вы выберете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls2.oauth2_client_id" = "<service_client_id>",
"azure.adls2.oauth2_client_secret" = "<service_principal_client_secret>",
"azure.adls2.oauth2_client_endpoint" = "<service_principal_client_endpoint>"
);
Google GCS
-
Если вы выберете метод аутентификации на основе VM, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.use_compute_engine_service_account" = "true"
); -
Если вы выберете метод аутентификации на основе учетной записи службы, выполните кома нду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<google_service_private_key_id>",
"gcp.gcs.service_account_private_key" = "<google_service_private_key>"
); -
Если вы выберете метод аутентификации на основе олицетворения:
-
Если вы заставляете экземпляр VM олицетворять учетную запись службы, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>"
); -
Если вы заставляете учетную запись службы олицетворять другую учетную запись службы, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG unified_catalog_hms
PROPERTIES
(
"type" = "unified",
"unified.metastore.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
"gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
"gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"
);
-
Просмотр унифицированных каталогов
Вы можете использовать SHOW CATALOGS для запроса всех каталогов в текущем кластере Selena:
SHOW CATALOGS;
Вы также можете использовать SHOW CREATE CATALOG для запроса оператора создан ия external catalog. Следующий пример запрашивает оператор создания унифицированного каталога с именем unified_catalog_glue:
SHOW CREATE CATALOG unified_catalog_glue;
Переключение на унифицированный каталог и базу данных в нем
Вы можете использовать один из следующих методов для переключения на унифицированный каталог и базу данных в нем:
-
Используйте SET CATALOG для указания унифицированного каталога в текущей сессии, а затем используйте USE для указания активной базы данных:
-- Переключиться на указанный каталог в текущей сессии:
SET CATALOG <catalog_name>
-- Указать активную базу данных в текущей сессии:
USE <db_name> -
Напрямую используйте USE для переключения на унифицированный каталог и базу данных в нем:
USE <catalog_name>.<db_name>
Удаление унифицированного каталога
Вы можете использовать DROP CATALOG для удаления external catalog.
Следующий пример удаляет унифицированный каталог с именем unified_catalog_glue:
DROP CATALOG unified_catalog_glue;
Просмотр схемы таблицы из унифицированного каталога
Вы можете использовать один из следующих синтаксисов для просмотра схемы таблицы из унифицированного каталога:
-
Просмотр схемы
DESC[RIBE] <catalog_name>.<database_name>.<table_name> -
Просмотр схемы и местоположения из оператора CREATE
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>
Запрос данных из унифицированного каталога
Чтобы запросить данные из унифицированного каталога, выполните следующие шаги:
-
Используйте SHOW DATABASES для просмотра баз данных в вашем унифицированном источнике данных, с которым связан унифицированный каталог:
SHOW DATABASES FROM <catalog_name> -
Переключитесь на унифицированный каталог и базу данных в нем.
-
Используйте SELECT для запроса целевой таблицы в указанной базе данных:
SELECT count(*) FROM <table_name> LIMIT 10
Загрузка данных из Hive, Iceberg, Hudi, Delta Lake или Kudu
Вы можете использовать INSERT INTO для загрузки данных таблицы Hive, Iceberg, Hudi, Delta Lake или Kudu в таблицу Selena, созданную в унифицированном каталоге.
Следующий пример загружает данные таблицы Hive hive_table в таблицу Selena test_tbl, созданную в базе данных test_database, которая принадлежит унифицированному каталогу unified_catalog:
INSERT INTO unified_catalog.test_database.test_table SELECT * FROM hive_table
Создание базы данных в унифицированном каталоге
Аналогично внутреннему каталогу Selena, если у вас есть привилегия CREATE DATABASE на унифицированном каталоге, вы можете использовать оператор CREATE DATABASE для создания базы данных в этом каталоге.
ПРИМЕЧАНИЕ
Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
Selena поддерживает создание только баз данных Hive и Iceberg в унифицированных каталогах.
Переключитесь на унифицированный каталог, а затем используйте следующий оператор для создания базы данных в этом каталоге:
CREATE DATABASE <database_name>
[properties ("location" = "<prefix>://<path_to_database>/<database_name.db>")]
Параметр location указывает путь к файлу, в котором вы хотите создать базу данных, который может находиться либо в HDFS, либо в облачном хранилище.
- При использовании Hive metastore в качестве metastore вашего источника данных параметр
locationпо умолчанию равен<warehouse_location>/<database_name.db>, что поддерживается Hive metastore, если вы не указываете этот параметр при создании базы данных. - При использовании AWS Glue в качестве metastore вашего источника данных параметр
locationне имеет значения по умолчанию, и поэтому вы должны указать этот параметр при создании базы данных.
prefix варьируется в зависимости от используемой вами системы хранения:
| Система хранения | Значение Prefix |
|---|---|
| HDFS | hdfs |
| Google GCS | gs |
| Azure Blob Storage |
|
| Azure Data Lake Storage Gen1 | adl |
| Azure Data Lake Storage Gen2 |
|
| AWS S3 или другое S3-совместимое хранилище (например, MinIO) | s3 |
Удаление базы данных из унифицированного каталога
Аналогично внутренним базам данных Selena, если у вас есть привилегия DROP на базу данных, созданную в унифицированном каталоге, вы можете использовать оператор DROP DATABASE для удаления этой базы данных. Вы можете удалять только пустые базы данных.
ПРИМЕЧАНИЕ
Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
Selena поддерживает удаление только баз данных Hive и Iceberg из унифицированных каталогов.
При удалени и базы данных из унифицированного каталога путь к файлу базы данных в вашем кластере HDFS или облачном хранилище не будет удален вместе с базой данных.
Переключитесь на унифицированный каталог, а затем используйте следующий оператор для удаления базы данных в этом каталоге:
DROP DATABASE <database_name>
Создание таблицы в унифицированном каталоге
Аналогично внутренним базам данных Selena, если у вас есть привилегия CREATE TABLE на базу данных, созданную в унифицированном каталоге, вы можете использовать оператор CREATE TABLE или [CREATE TABLE AS SELECT ../../sql-reference/sql-statements/table_bucket_part_index/CREATE_TABLE_AS_SELECT.mdELECT.md) для создания таблицы в этой базе данных.
ПРИМЕЧАНИЕ
Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
Selena поддерживает создание только таблиц Hive и Iceberg в унифицированных каталогах.
Переключитесь на унифицированный каталог и базу данных в нем. Затем используйте CREATE TABLE для создания таблицы Hive или Iceberg в эт ой базе данных:
CREATE TABLE <table_name>
(column_definition1[, column_definition2, ...]
ENGINE = {|hive|iceberg}
[partition_desc]
Для получения дополнительной информации см. Создание таблицы Hive и Создание таблицы Iceberg.
Следующий пример создает таблицу Hive с именем hive_table. Таблица состоит из трех столбцов action, id и dt, из которых id и dt являются столбцами разделов.
CREATE TABLE hive_table
(
action varchar(65533),
id int,
dt date
)
ENGINE = hive
PARTITION BY (id,dt);
Отправка данных в таблицу в унифицированном ката логе
Аналогично внутренним таблицам Selena, если у вас есть привилегия INSERT на таблицу, созданную в унифицированном каталоге, вы можете использовать оператор INSERT для отправки данных таблицы Selena в эту таблицу унифицированного каталога (в настоящее время поддерживаются только таблицы унифицированного каталога в формате Parquet).
ПРИМЕЧАНИЕ
Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
Selena поддерживает отправку данных только в таблицы Hive и Iceberg в унифицированных каталогах.
Переключитесь на унифицированный каталог и базу данных в нем. Затем используйте INSERT INTO для вставки данных в таблицу Hive или Iceberg в этой базе данных:
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 }
Для получения дополнительной информации см. Отправка данных в таблицу Hive и Отправка данных в таблицу Iceberg.
Следующий пример вставляет три строки данных в таблицу Hive с именем hive_table:
INSERT INTO hive_table
VALUES
("buy", 1, "2023-09-01"),
("sell", 2, "2023-09-02"),
("buy", 3, "2023-09-03");
Удаление таблицы из унифицированного каталога
Аналогично внутренним таблицам Selena, если у вас есть привилегия DROP на таблицу, созданную в унифицированном каталоге, вы можете использовать оператор DROP TABLE для удаления этой таблицы.
ПРИМЕЧАНИЕ
Вы можете предоставлять и отзывать привилегии, используя GRANT и REVOKE.
Selena поддерживает удаление только таблиц Hive и Iceberg из унифицированных каталогов.
Переключитесь на унифицированный каталог и базу данных в нем. Затем используйте DROP TABLE для удаления таблицы Hive или Iceberg в этой базе данных:
DROP TABLE <table_name>
Для получения дополнительной информации см. Удаление таблицы Hive и Удаление таблицы Iceberg.
Следующий пример удаляет таблицу Hive с именем hive_table:
DROP TABLE hive_table FORCE