Iceberg catalog
Для быстрого старта с Selena см. раздел Быстрый старт.
Iceberg catalog — это тип внешнего каталога, который поддерживается Selena начиная с версии v1.5.2. С Iceberg catalogs вы можете:
- Напрямую запрашивать данные, хр анящиеся в Iceberg, без необходимости вручную создавать таблицы.
- Использовать INSERT INTO или асинхронные материализованные представления (которые поддерживаются с v1.5.2) для обработки данных, хранящихся в Iceberg, и загрузки данных в Selena.
- Выполнять операции в Selena для создания или удаления баз данных и таблиц Iceberg, или записывать данные из таблиц Selena в таблицы Iceberg формата Parquet с помощью INSERT INTO (эта функция поддерживается с v1.5.2).
Чтобы обеспечить успешное выполнение SQL-запросов в вашем Iceberg cluster, ваш Selena cluster должен иметь доступ к системе хранения и metastore вашего Iceberg cluster. Selena поддерживает следующие системы хранения и metastore:
-
Распределенная файловая система (HDFS) или объектное хранилище, такое как AWS S3, Microsoft Azure Storage, Google GCS или другая S3-совместимая система хранения (например, MinIO)
-
Metastore, такой как Hive metastore, AWS Glue или Tabular
- Если вы выбираете AWS S3 в качестве хранилища, вы можете использовать HMS или AWS Glue в качестве metastore. Если вы выбираете любую другую систему хранения, вы можете использовать только HMS в качестве metastore.
- Если вы выбираете Tabular в качестве metastore, вам нужно использовать Iceberg REST catalog.
Примечания по использованию
Обратите внимание на следующие моменты при использовании Selena для запроса данных из Iceberg:
| Формат файла | Формат сжатия | Версия таблицы Iceberg |
|---|---|---|
| Parquet | SNAPPY, LZ4, ZSTD, GZIP и NO_COMPRESSION |
|
| ORC | ZLIB, SNAPPY, LZO, LZ4, ZSTD и NO_COMPRESSION |
|
Подготовка к интеграции
Перед созданием Iceberg catalog убедитесь, что ваш Selena cluster может интегрироваться с системой хранения и metastore вашего Iceberg cluster.
Хранилище
Выберите вкладку, соответствующую вашему типу хранилища:
- AWS S3
- HDFS
Если ваш Iceberg cluster использует AWS S3 в качестве хранилища или AWS Glue в качестве metastore, выберите подходящий метод аутентификации и выполните необходимые подготовительные действия, чтобы убедиться, что ваш Selena cluster может получить доступ к соответствующим облачным ресурсам AWS.
Рекомендуются следующие методы аутентификации:
- Instance profile
- Assumed role
- IAM user
Из вышеупомянутых трех методов аутентификации instance profile является наиболее широко используемым.
Для получения дополнительной информации см. Подготовка к аутентификации в AWS IAM.
Если вы выбираете HDFS в качестве хранилища, настройте свой Selena cluster следующим образом:
-
(Опционально) Установите имя пользователя, которое используется для доступа к вашему HDFS cluster и Hive metastore. По умолчанию Selena использует имя пользователя процессов FE и BE или CN для доступа к вашему HDFS cluster и Hive metastore. Вы также можете установить имя пользователя, добавив
export HADOOP_USER_NAME="<user_name>"в начало файла fe/conf/hadoop_env.sh каждого FE и в начало файла be/conf/hadoop_env.sh каждого BE или файла cn/conf/hadoop_env.sh каждого CN. После установки имени пользователя в этих файлах перезапустите каждый FE и каждый BE или CN, чтобы настройки параметров вступили в силу. Вы можете установить только одно имя пользователя для каждого Selena cluster. -
Когда вы запрашиваете данные Iceberg, FE и BE или CN вашего Selena cluster используют клиент HDFS для доступа к вашему HDFS cluster. В большинстве случаев вам не нужно настраивать свой Selena cluster для этой цели, и Selena запускает клиент HDFS, используя конфигурации по умолчанию. Вам нужно настроить свой Selena cluster только в следующих ситуациях:
- Высокая доступность (HA) включена для вашего HDFS cluster: добавьте файл hdfs-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
- View File System (ViewFs) включена для вашего HDFS cluster: добавьте файл core-site.xml вашего HDFS cluster в путь $FE_HOME/conf каждого FE и в путь $BE_HOME/conf каждого BE или путь $CN_HOME/conf каждого CN.
Если при отправке запроса возвращается ошибка, указывающая на неизвестный хост, вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего HDFS cluster в путь /etc/hosts.
Аутентификация Kerberos
Если для вашего HDFS cluster или Hive metastore включена аутентификация Kerberos, настройте свой Selena cluster следующим образом:
- Запустите команду
kinit -kt keytab_path principalна каждом FE и каждом BE или CN, чтобы получить Ticket Granting Ticket (TGT) из Key Distribution Center (KDC). Для выполнения этой команды вы должны иметь разрешения на доступ к вашему HDFS cluster и Hive metastore. Обратите внимание, что доступ к KDC с помощью этой команды зависит от времени. Поэтому вам нужно использовать cron для периодического выполнения этой команды. - Добавьте
JAVA_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf"в файл $FE_HOME/conf/fe.conf каждого FE и в файл $BE_HOME/conf/be.conf каждого BE или файл $CN_HOME/conf/cn.conf каждого CN. В этом примере/etc/krb5.conf— это путь сохранения файла krb5.conf. Вы можете изменить путь в соответствии с вашими потребностями.
Создание Iceberg catalog
Синтаксис
CREATE EXTERNAL CATALOG <catalog_name>
[COMMENT <comment>]
PROPERTIES
(
"type" = "iceberg",
[SecurityParams],
MetastoreParams,
StorageCredentialParams,
MetadataRelatedParams
)
Параметры
catalog_name
Имя Iceberg catalog. Соглашения об именовании следующие:
- Имя может содержать буквы, цифры (0-9) и символы подчеркивания (_). Оно должно начинаться с буквы.
- Имя чувствительно к регистру и не может превышать 1023 символа.
comment
Описание Iceberg catalog. Этот параметр является опциональным.
type
Тип вашего источника данных. Установите значение iceberg.
SecurityParams
Параметр(ы) о том, как Selena управляет доступом к данным каталога.
Подробные инструкции по управлению доступом к данным для Iceberg-каталогов см. в разделе Настройка безопасности для Iceberg REST Catalog.
catalog.access.control
Политика контроля доступа к данным. Допустимые значения:
native(по умолчанию): используется встроенная система контроля доступа к данным Selena.allowall: все проверки доступа к данным делегируются самому Catalog.ranger: проверки доступа к данным делегируются Apache Ranger.
MetastoreParams
Набор параметров о том, как Selena интегрируется с metastore вашего источника данных. Выберите вкладку, соответствующую вашему типу metastore:
- Hive metastore
- AWS Glue
- REST
- JDBC
Hive metastore
Если вы выбираете Hive metastore в качестве metastore вашего источника данных, настройте MetastoreParams следующим образом:
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "<hive_metastore_uri>"
Перед запросом данных Iceberg вы должны добавить сопоставление между именами хостов и IP-адресами узлов вашего Hive metastore в путь /etc/hosts. В противном случае Selena может не получить доступ к вашему Hive metastore при запуске запроса.
В следующей таблице описан параметр, который необходимо настроить в MetastoreParams.
-
iceberg.catalog.type- Обязательный: Да
- Описание: Тип metastore, который вы используете для вашего Iceberg cluster. Установите значение
hive.
-
hive.metastore.uris- Обязательный: Да
- Описание: URI вашего Hive metastore. Формат:
thrift://<metastore_IP_address>:<metastore_port>.
Если для вашего Hive metastore включена высокая доступность (HA), вы можете указать несколько URI metastore и разделить их запятыми (,), например,"thrift://<metastore_IP_address_1>:<metastore_port_1>,thrift://<metastore_IP_address_2>:<metastore_port_2>,thrift://<metastore_IP_address_3>:<metastore_port_3>".
AWS Glue
Если вы выбираете AWS Glue в качестве metastore вашего источника данных, который поддерживается только при выборе AWS S3 в качестве хранилища, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе instance profile, настройте
MetastoreParamsследующим образом:"iceberg.catalog.type" = "glue",
"aws.glue.use_instance_profile" = "true",
"aws.glue.region" = "<aws_glue_region>" -
Чтобы выбрать метод аутентификации на основе assumed role, настройте
MetastoreParamsследующим образом:"iceberg.catalog.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следующим образом:"iceberg.catalog.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 для AWS Glue:
-
iceberg.catalog.type- Обязательный: Да
- Описание: Тип metastore, который вы используете для вашего Iceberg cluster. Установите значение
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.catalog_id- Обязательный: Нет
- Описание: ID AWS Glue Data Catalog для использования. Если не указано, используется каталог в текущей учетной записи AWS. Вы должны указать этот параметр, когда вам нужно получить доступ к Glue Data Catalog в другой учетной записи AWS (межаккаунтный доступ).
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS Glue и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS Glue.
REST
Подробные инструкции по созданию Iceberg REST catalog для таблиц S3 см. в Создание Iceberg REST Catalog для таблиц AWS S3.
Если вы используете REST в качестве metastore, вы должны указать тип metastore как REST ("iceberg.catalog.type" = "rest"). Настройте MetastoreParams следующим образом:
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<rest_server_api_endpoint>",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "<credential>",
"iceberg.catalog.warehouse" = "<identifier_or_path_to_warehouse>"
MetastoreParams для REST catalog:
-
iceberg.catalog.type- Обязательный: Да
- Описание: Тип metastore, который вы используете для вашего Iceberg cluster. Установите значение
rest. -
-
iceberg.catalog.uri- Обязательный: Да
- Описание: URI конечной точки REST-службы. Пример:
https://api.tabular.io/ws. -
-
iceberg.catalog.view-endpoints-supported- Обязательный: Нет
- Описание: Использовать ли конечные точки представления для поддержки операций, связанных с представлениями, когда REST-служба более ранних версий не возвращает конечные точки в
CatalogConfig. Этот параметр используется для обратной совместимости с REST-серверами ранних версий. По умолчанию:false.
-
iceberg.catalog.security- Обязательный: Нет
- Описание: Тип протокола авторизации для использования. По умолчанию:
NONE. Допустимые значения:OAUTH2иJWT. Когда этот параметр установлен вOAUTH2, требуется либоtoken, либоcredential. Когда этот параметр установлен вJWT, пользователь должен войти в Selena cluster, используя методJWT. Вы можете опуститьtokenилиcredential, и Selena будет использовать JWT вошедшего пользователя для доступа к каталогу.
-
iceberg.catalog.oauth2.token- Обязательный: Нет
- Описание: Bearer token, используемый для взаимодействия с сервером. Для про токола авторизации
OAUTH2требуетсяtokenилиcredential. Пример:AbCdEf123456.
-
iceberg.catalog.oauth2.credential- Обязательный: Нет
- Описание: Учетные данные для обмена на token в потоке учетных данных клиента OAuth2 с сервером. Для протокола авторизации
OAUTH2требуетсяtokenилиcredential. Пример:AbCdEf123456.
-
iceberg.catalog.oauth2.scope- Обязательный: Нет
- Описание: Область, которая будет использоваться при взаимодействии с REST Catalog. Применимо только при использовании
credential.
-
iceberg.catalog.oauth2.server-uri- Обязательный: Нет
- Описание: Конечная точка для получения токена доступа от сервера OAuth2.
-
iceberg.catalog.vended-credentials-enabled- Обязательный: Нет
- Описание: Использовать ли учетные данные, предоставленные REST backend, для доступа к файловой системе. По умолчанию:
true.
-
iceberg.catalog.warehouse- Обязательный: Нет
- Описание: Местоположение warehouse или идентификатор Iceberg catalog. Пример:
s3://my_bucket/warehouse_locationилиsandbox. -
-
iceberg.catalog.rest.nested-namespace-enabled- Обязательны й: Нет
- Описание: Поддерживать ли запрос объектов в вложенном пространстве имен. По умолчанию:
false.
-
iceberg.catalog.rest.view-endpoints-enabled- Обязательный: Нет
- Описание: Включать ли конечные точки представления для операций, связанных с представлениями. Если установлено в
false, операции с представлениями, такие какgetView, будут отключены. По умолчанию:true.
Следующий пример создает Iceberg catalog с именем tabular, который использует Tabular в качестве metastore:
CREATE EXTERNAL CATALOG tabular
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "https://api.tabular.io/ws",
"iceberg.catalog.oauth2.credential" = "t-5Ii8e3FIbT9m0:aaaa-3bbbbbbbbbbbbbbbbbbb",
"iceberg.catalog.warehouse" = "sandbox"
);
Следующий пример создает Iceberg catalog с именем smith_polaris, который использует Polaris в качестве metastore:
CREATE EXTERNAL CATALOG smith_polaris
PROPERTIES (
"iceberg.catalog.uri" = "http://xxx.xx.xx.xxx:8181/api/catalog",
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.warehouse" = "selena_catalog",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL'
);
# `ns1.ns2.tpch_namespace` - вложенное пространство имен
create table smith_polaris.`ns1.ns2.tpch_namespace`.tbl (c1 string);
mysql> select * from smith_polaris.`ns1.ns2.tpch_namespace`.tbl;
+------+
| c1 |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows in set (0.34 sec)
Следующий пример создает Iceberg catalog с именем r2, который использует Cloudflare R2 Data Catalog в качестве metastore:
CREATE EXTERNAL CATALOG r2
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.uri" = "<r2_catalog_uri>",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.token" = "<r2_api_token>",
"iceberg.catalog.warehouse" = "<r2_warehouse_name>"
);
SET CATALOG r2;
CREATE DATABASE testdb;
SHOW DATABASES FROM r2;
+--------------------+
| Database |
+--------------------+
| information_schema |
| testdb |
+--------------------+
2 rows in set (0.66 sec)
Значения <r2_warehouse_name>, <r2_api_token> и <r2_catalog_uri> получаются из панели Cloudflare, как описано здесь.
JDBC
Если вы выбираете JDBC в качестве metastore вашего источника данных, настройте MetastoreParams следующим образом:
"iceberg.catalog.type" = "jdbc",
"iceberg.catalog.uri" = "<jdbc_uri>",
"iceberg.catalog.warehouse" = "<warehouse_location>"
В следующей таблице описан параметр, который необходимо настроить в MetastoreParams.
-
iceberg.catalog.type- Обязательный: Да
- Описание: Тип metastore, который вы используете для вашего Iceberg cluster. Установите значение
jdbc.
-
iceberg.catalog.uri- Обязательный: Да
- Описание: URI вашей базы данных. Формат:
jdbc:[mysql\|postgresql]://<DB_IP_address>:<DB_PORT>/<DB_NAME>.
-
iceberg.catalog.warehouse- Обязательный: Да
- Описание: Местоположение warehouse или идентификатор Iceberg catalog. Пример:
s3://my_bucket/warehouse_location.
-
iceberg.catalog.jdbc.user- Обязательный: Нет
- Описание: Имя пользователя для базы данных.
-
iceberg.catalog.jdbc.password- Обязательный: Нет
- Описание: Пароль для базы данных.
-
iceberg.catalog.jdbc.init-catalog-tables- Обязательный: Нет
- Описание: Создавать ли таблицы
iceberg_namespace_propertiesиiceberg_tablesдля хранения метаданных в базе данных, указаннойiceberg.catalog.uri. Значение по умолчанию —false. Укажитеtrue, если эти две таблицы еще не были созданы в базе данных, указаннойiceberg.catalog.uri.
Следующий пример создает Iceberg catalog с именем iceberg_jdbc и использует JDBC в качестве metastore:
CREATE EXTERNAL CATALOG iceberg_jdbc
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "jdbc",
"iceberg.catalog.warehouse" = "s3://my_bucket/warehouse_location",
"iceberg.catalog.uri" = "jdbc:mysql://ip:port/db_name",
"iceberg.catalog.jdbc.user" = "username",
"iceberg.catalog.jdbc.password" = "password",
"aws.s3.endpoint" = "<s3_endpoint>",
"aws.s3.access_key" = "<iam_user_access_key>",
"aws.s3.secret_key" = "<iam_user_secret_key>"
);
При использовании MySQL или других пользовательских драйверов JDBC соответствующие файлы JAR н еобходимо поместить в каталоги fe/lib и be/lib/jni-packages.
StorageCredentialParams
Набор параметров о том, как Selena интегрируется с вашей системой хранения. Этот набор параметров является опциональным.
Обратите внимание на следующие моменты:
-
Если вы используете HDFS в качестве хранилища, вам не нужно настраивать
StorageCredentialParams, и вы можете пропустить этот раздел. Если вы используете AWS S3, другую S3-совместимую систему хранения, Microsoft Azure Storage или Google GCS в качестве хранилища, вы должны настроитьStorageCredentialParams. -
Если вы используете Tabular в качестве metastore, вам не нужно настраивать
StorageCredentialParams, и вы можете пропустить этот раздел. Если вы используете HMS или AWS Glue в качестве metastore, вы должны настроитьStorageCredentialParams.
Выберите вкладку, соответствующую вашему типу хранилища:
- AWS S3
- HDFS
- MinIO
- Microsoft Azure Blob Storage
- Google GCS
AWS S3
Если вы выбираете AWS S3 в качестве хранилища для вашего Iceberg cluster, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе 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>" -
Чтобы выбрать vended credential (поддерживается с v2.0.0) с REST catalog, настройте
StorageCredentialParamsследующим образом:"aws.s3.region" = "<aws_s3_region>"
StorageCredentialParams для AWS S3:
aws.s3.use_instance_profile
- Обязательный: Да
- Описание: Указывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения:
trueиfalse. Значение по умолчанию:false.
aws.s3.iam_role_arn
- Обязательный: Нет
- Описание: ARN роли IAM, которая имеет привилегии в вашем AWS S3 bucket. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.region
- Обязательный: Да
- Описание: Регион, в котором находится ваш AWS S3 bucket. Пример:
us-west-1.
aws.s3.access_key
- Обязательный: Нет
- Описание: Ключ доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.
aws.s3.secret_key
- Обязательный: Нет
- Описание: Секретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.
Для получения информации о том, как выбрать метод аутентификации для доступа к AWS S3 и как настроить политику контроля доступа в консоли AWS IAM, см. Параметры аутентификации для доступа к AWS S3.
При использовании хранилища HDFS пропустите учетные данные хранилища.
S3-совместимая система хранения
Iceberg catalogs поддерживают S3-совместимые системы хранения с v1.5.2.
Если вы выбираете S3-совместимую систему хранения, такую как MinIO, в качестве хранилища для вашего Iceberg cluster, настройте 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 для MinIO и других S3-совместимых систем:
aws.s3.enable_ssl
- Обязательный: Да
- Описание: Указывает, следует ли включить SSL-соединение.
Допустимые значения:trueиfalse. Значение по умолчанию:true.
aws.s3.enable_path_style_access
- Обязательный: Да
- Описание: Указывает, следует ли включить доступ в стиле path.
Допустимые значения:trueиfalse. Значение по умолчанию:false. Для MinIO вы должны установить значениеtrue.
URL-адреса в стиле path используют следующий формат:https://s3.<region_code>.amazonaws.com/<bucket_name>/<key_name>. Например, если вы создаете bucket с именемDOC-EXAMPLE-BUCKET1в регионе US West (Oregon) и хотите получить доступ к объектуalice.jpgв этом bucket, вы можете использовать следующий URL-адрес в стиле path:https://s3.us-west-2.amazonaws.com/DOC-EXAMPLE-BUCKET1/alice.jpg.
aws.s3.endpoint
- Обязательный: Да
- Описание: Конечная точка, которая используется для подключения к вашей S3-совместимой системе хранения вместо AWS S3.
aws.s3.access_key
- Обязательный: Да
- Описание: Ключ доступа вашего пользователя IAM.
aws.s3.secret_key
- Обязательный: Да
- Описание: Секретный ключ в ашего пользователя IAM.
Microsoft Azure Storage
Iceberg catalogs поддерживают Microsoft Azure Storage с v1.5.2.
Azure Blob Storage
Если вы выбираете Blob Storage в качестве хранилища для вашего Iceberg cluster, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Shared Key, настройте
StorageCredentialParamsследующим образом:"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.shared_key" = "<storage_account_shared_key>" -
Чтобы выбрать метод аутентификации SAS Token, настройте
StorageCredentialParamsследующим образом:"azure.blob.storage_account" = "<storage_account_name>",
"azure.blob.container" = "<container_name>",
"azure.blob.sas_token" = "<storage_account_SAS_token>" -
Чтобы выбрать REST catalog с vended credential (поддерживается с v2.0.0), вам не нужно настраивать
StorageCredentialParams.
StorageCredentialParams для Microsoft Azure:
azure.blob.storage_account
- Обязательный: Да
- Описание: Имя пользователя вашей учетной записи Blob Storage.
azure.blob.shared_key
- Обязательный: Да
- Описание: Общий ключ вашей учетной записи Blob Storage.
azure.blob.account_name
- Обязательный: Да
- Описание: Имя пользователя вашей учетной записи Blob Storage.
azure.blob.container
- Обязательный: Да
- Описание: Имя контейнера blob, в котором хранятся ваши данные.
azure.blob.sas_token
- Обязательный: Да
- Описание: SAS token, который используется для доступа к вашей учетной записи Blob Storage.
Azure Data Lake Storage Gen1
Если вы выбираете Data Lake Storage Gen1 в качестве хранилища для вашего Iceberg cluster, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации Managed Service Identity, настройте
StorageCredentialParamsследующим образом:"azure.adls1.use_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>"
Azure Data Lake Storage Gen2
Если вы выбираете Data Lake Storage Gen2 в качестве хранилища для вашего Iceberg cluster, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации 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>"Или:
-
Чтобы выбрать метод аутентификации Shared Key, настройте
StorageCredentialParamsследующим образом:"azure.adls2.storage_account" = "<storage_account_name>",
"azure.adls2.shared_key" = "<storage_account_shared_key>"Или:
-
Чтобы выбрать метод аутентификации 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>" -
Чтобы выбрать REST catalog с vended credential (поддерживается с v2.0.0), вам не нужно настраивать
StorageCredentialParams.
Google GCS
Iceberg catalogs поддерживают Google GCS с v1.5.2.
Если вы выбираете Google GCS в качестве хранилища для вашего Iceberg cluster, выполните одно из следующих действий:
-
Чтобы выбрать метод аутентификации на основе VM, настройте
StorageCredentialParamsследующим образом:"gcp.gcs.use_compute_engine_service_account" = "true" -
Чтобы выбрать метод аутентификации на основе 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>" -
Чтобы выбрать метод аутентификации на основе impersonation, настройте
StorageCredentialParamsследующим образом:-
Сделать VM instance выдающим себя за service account:
"gcp.gcs.use_compute_engine_service_account" = "true",
"gcp.gcs.impersonation_service_account" = "<assumed_google_service_account_email>" -
Сделать service account (временно называемый meta service account) выдающим себя за другой service account (временно называемый data service account):
"gcp.gcs.service_account_email" = "<google_service_account_email>",
"gcp.gcs.service_account_private_key_id" = "<meta_google_service_account_email>",
"gcp.gcs.service_account_private_key" = "<meta_google_service_account_email>",
"gcp.gcs.impersonation_service_account" = "<data_google_service_account_email>"
-
-
Чтобы выбрать REST catalog с vended credential (поддерживается с v2.0.0), вам не нужно настраивать
StorageCredentialParams.
StorageCredentialParams для Google GCS:
gcp.gcs.service_account_email
- Значение по умолчанию: ""
- Пример: "user@hello.iam.gserviceaccount.com"
- Описание: Адрес электронной почты в файле JSON, сгенерированном при создании service account.
gcp.gcs.service_account_private_key_id
- Значение по умолчанию: ""
- Пример: "61d257bd8479547cb3e04f0b9b6b9ca07af3b7ea"
- Описание: ID приватного ключа в файле JSON, сгенерированном при создании service account.
gcp.gcs.service_account_private_key
- Значение по умолчанию: ""
- Пример: "-----BEGIN PRIVATE KEY----xxxx-----END PRIVATE KEY-----\n"
- Описание: Приватный ключ в файле JSON, сгенерированном при создании service account.
gcp.gcs.impersonation_service_account
- Значение по умолчанию: ""
- Пример: "hello"
- Описание: Service account, за который вы хотите выдать себя.
MetadataRelatedParams
Набор параметров о кэше метаданных Iceberg в Selena. Этот набор параметров является опциональным.
С v1.5.2 Selena поддерживает стратегию периодического обновления метаданных. В большинстве случаев вы можете игнорировать приведенные ниже параметры и не настраивать параметры политики, поскольку значения по умолчанию этих параметров уже обеспечивают производительность из коробки. Вы можете настроить режим парсинга метаданных Iceberg с помощью системной переменной plan_mode.
| Параметр | П о умолчанию | Описание |
|---|---|---|
| enable_iceberg_metadata_cache | true | Кэшировать ли метаданные, связанные с Iceberg, включая Table Cache, Partition Name Cache, а также Data File Cache и Delete Data File Cache в Manifest. |
| iceberg_manifest_cache_with_column_statistics | false | Кэшировать ли статистику столбцов. |
| refresh_iceberg_manifest_min_length | 2 * 1024 * 1024 | Минимальная длина файла Manifest, которая запускает обновление Data File Cache. |
| iceberg_data_file_cache_memory_usage_ratio | 0.1 | Максимальное соотношение использования памяти для кэша Manifest файлов данных. Поддерживается с v1.5.2. |
| iceberg_delete_file_cache_memory_usage_ratio | 0.1 | Максимальное соотношение использования памяти для кэша Manifest файлов удаления. Поддерживается с v1.5.2. |
| iceberg_table_cache_refresh_interval_sec | 60 | Интервал (в секундах), с которым запускается асинхронное обновление кэша таблиц Iceberg. Поддерживается с v1.5.2. |
Начиная с v1.5.2, Selena может получать статистику таблиц Iceberg, читая метаданные Iceberg через установку следующих параметров, без активного запуска сбора статистики таблиц Iceberg.
| Параметр | По умолчанию | Описание |
|---|---|---|
| enable_get_stats_from_external_metadata | false | Получать ли статистику из метаданных Iceberg. Когда этот параметр установлен в true, вы можете дополнительно контролировать, какой тип статистики собирать, через системную переменную enable_get_stats_from_external_metadata. |
Примеры
Следующие примеры создают Iceberg catalog с именем iceberg_catalog_hms или iceberg_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего Iceberg cluster. Выберите вкладку, соответствующую вашему типу хранилища:
- AWS S3
- HDFS
- MinIO
- Microsoft Azure Blob Storage
- Google GCS
AWS S3
Если вы выбираете учетные данные на основе instance profile
-
Если вы используете Hive metastore в вашем Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 в вашем Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 в вашем Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 Iceberg cluster, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_glue
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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"
);
Если вы выбираете vended credential
Если вы выбираете REST catalog с vended credential, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG polaris_s3
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.uri" = "http://xxx:xxx/api/catalog",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.rest.nested-namespace-enabled"="true",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxx:xxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL',
"iceberg.catalog.warehouse" = "iceberg_catalog",
"aws.s3.region" = "us-west-2"
);
HDFS
Если вы используете HDFS в качестве хранилища, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
);
S3-совместимая система хранения
Используя MinIO в качестве примера. Выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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>"
); -
Если вы выбираете REST catalog с vended credential, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG polaris_azure
PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.uri" = "http://xxx:xxx/api/catalog",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.rest.nested-namespace-enabled"="true",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxx:xxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL',
"iceberg.catalog.warehouse" = "iceberg_catalog"
);
Azure Data Lake Storage Gen1
-
Если вы выбираете метод аутентификации Managed Service Identity, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"azure.adls1.use_managed_service_identity" = "true"
); -
Если вы выбираете метод аутентификации Service Principal, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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>"
); -
Если вы выбираете REST catalog с vended credential, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG polaris_azure
PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.uri" = "http://xxx:xxx/api/catalog",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.rest.nested-namespace-enabled"="true",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxx:xxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL',
"iceberg.catalog.warehouse" = "iceberg_catalog"
);
Google GCS
-
Если вы выбираете метод аутентификации на основе VM, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.type" = "hive",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083",
"gcp.gcs.use_compute_engine_service_account" = "true"
); -
Если вы выбираете метод аутентификации на основе service account, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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 instance выдающим себя за service account, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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>"
); -
Если вы делаете service account выдающим себя за другой service account, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG iceberg_catalog_hms
PROPERTIES
(
"type" = "iceberg",
"iceberg.catalog.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>"
);
-
-
Если вы выбираете REST catalog с vended credential, выполните команду, подобную приведенной ниже:
CREATE EXTERNAL CATALOG polaris_gcp
PROPERTIES (
"type" = "iceberg",
"iceberg.catalog.uri" = "http://xxx:xxx/api/catalog",
"iceberg.catalog.type" = "rest",
"iceberg.catalog.rest.nested-namespace-enabled"="true",
"iceberg.catalog.security" = "oauth2",
"iceberg.catalog.oauth2.credential" = "xxxxx:xxxx",
"iceberg.catalog.oauth2.scope"='PRINCIPAL_ROLE:ALL',
"iceberg.catalog.warehouse" = "iceberg_catalog"
);
Использование вашего каталога
Просмотр Iceberg catalogs
Вы можете использовать SHOW CATALOGS для запроса всех каталогов в текущем Selena cluster:
SHOW CATALOGS;
Вы также можете использовать SHOW CREATE CATALOG для запроса оператора создания внешнего каталога. Следующий пример запрашивает оператор создания Iceberg catalog с именем iceberg_catalog_glue:
SHOW CREATE CATALOG iceberg_catalog_glue;
Переключение на Iceberg Catalog и базу данных в нем
Вы можете использовать один из следующих методов для переключения на Iceberg catalog и базу данных в нем:
-
Используйте SET CATALOG для указания Iceberg catalog в текущей сессии, а затем используйте USE для указания активной базы данных:
-- Переключиться на указанный каталог в текущей сессии:
SET CATALOG <catalog_name>
-- Указать активную базу данных в текущей сессии:
USE <db_name> -
Непосредственно используйте USE для переключения на Iceberg catalog и базу данных в нем:
USE <catalog_name>.<db_name>
Удаление Iceberg catalog
Вы можете использовать DROP CATALOG для удаления внешнего каталога.
Следующий пример удаляет Iceberg catalog с именем iceberg_catalog_glue:
DROP Catalog iceberg_catalog_glue;
Просмотр схемы таблицы Iceberg
Вы можете использовать один из следующих синтаксисов для просмотра схемы таблицы Iceberg:
-
Просмотр схемы
DESC[RIBE] <catalog_name>.<database_name>.<table_name> -
Просмотр схемы и местоположения из оператора CREATE
SHOW CREATE TABLE <catalog_name>.<database_name>.<table_name>
Запрос таблицы Iceberg
-
Используйте SHOW DATABASES для просмотра баз данных в вашем Iceberg cluster:
SHOW DATABASES FROM <catalog_name> -
Используйте SELECT для запроса целевой таблицы в указанной базе данных:
SELECT count(*) FROM <table_name> LIMIT 10