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

Iceberg catalog

подсказка

Этот пример использует набор данных Local Climatological Data(LCD), представленный в руководстве Основы Selena. Вы можете загрузить данные и попробовать пример самостоятельно.

Iceberg catalog — это тип external catalog, который поддерживается Selena начиная с версии 1.5.0. С помощью Iceberg catalogs вы можете:

  • Напрямую запрашивать данные, хранящиеся в Iceberg, без необходимости вручную создавать таблицы.
  • Использовать INSERT INTO или асинхронные материализованные представления (которые поддерживаются начиная с v2.5) для обработки данных, хранящихся в Iceberg, и загрузки данных в Selena.
  • Выполнять операции в Selena для создания или удаления баз данных и таблиц Iceberg, или выгружать данные из таблиц Selena в таблицы Iceberg в формате Parquet с помощью INSERT INTO (эта функция поддерживается начиная с v3.1).

Чтобы обеспечить успешное выполнение SQL-запросов в вашем кластере Iceberg, ваш кластер Selena должен иметь доступ к системе хранения и metastore вашего кластера Iceberg. 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
ParquetSNAPPY, LZ4, ZSTD, GZIP, и NO_COMPRESSION
  • таблицы v1: поддерживаются.
  • таблицы v2: поддерживаются начиная с Selena v3.1, в которой запросы к этим таблицам v2 поддерживают position deletes. В v3.1.10, v3.2.5, v3.3 и их более поздних версиях запросы к таблицам v2 также поддерживают equality deletes.
ORCZLIB, SNAPPY, LZO, LZ4, ZSTD, и NO_COMPRESSION
  • таблицы v1: поддерживаются.
  • таблицы v2: поддерживаются начиная с Selena v3.0, в которой запросы к этим таблицам v2 поддерживают position deletes. В v3.1.8, v3.2.3, v3.3 и их более поздних версиях запросы к таблицам v2 также поддерживают equality deletes.

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

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


Хранилище

Выберите вкладку, соответствующую вашему типу хранилища:

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

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

  • Instance profile
  • Assumed role
  • IAM user

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

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


Создание Iceberg catalog

Синтаксис

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

Параметры

catalog_name

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

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

comment

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

type

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

MetastoreParams

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

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. Установите значение 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>".


StorageCredentialParams

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

Обратите внимание на следующие моменты:

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

  • Если вы используете Tabular в качестве metastore, вам не нужно настраивать StorageCredentialParams и можете пропустить этот раздел. Если вы используете HMS или AWS Glue в качестве metastore, вы должны настроить StorageCredentialParams.

Выберите вкладку, соответствующую вашему типу хранилища:

AWS S3

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

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

aws.s3.use_instance_profile

Обязательный: Да Описание: Указывает, следует ли включить метод аутентификации на основе instance profile и метод аутентификации на основе assumed role. Допустимые значения: true и false. Значение по умолчанию: false.

aws.s3.iam_role_arn

Обязательный: Нет Описание: ARN роли IAM, которая имеет привилегии на ваш bucket AWS S3. Если вы используете метод аутентификации на основе assumed role для доступа к AWS S3, вы должны указать этот параметр.

aws.s3.region

Обязательный: Да Описание: Регион, в котором находится ваш bucket AWS S3. Пример: us-west-1.

aws.s3.access_key

Обязательный: Нет Описание: Ключ доступа вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.

aws.s3.secret_key

Обязательный: Нет Описание: Секретный ключ вашего пользователя IAM. Если вы используете метод аутентификации на основе IAM user для доступа к AWS S3, вы должны указать этот параметр.

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


MetadataUpdateParams

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

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

ПараметрПо умолчаниюОписание
enable_iceberg_metadata_cachetrueСледует ли кэшировать метаданные, связанные с Iceberg, включая Table Cache, Partition Name Cache и Data File Cache и Delete Data File Cache в Manifest.
iceberg_manifest_cache_with_column_statisticsfalseСледует ли кэшировать статистику столбцов.
iceberg_manifest_cache_max_num100000Максимальное количество файлов Manifest, которые могут быть кэшированы.
refresh_iceberg_manifest_min_length2 * 1024 * 1024Минимальная длина файла Manifest, которая запускает обновление Data File Cache.

Примеры

Следующие примеры создают Iceberg catalog с именем iceberg_catalog_hms или iceberg_catalog_glue, в зависимости от типа metastore, который вы используете, для запроса данных из вашего кластера Iceberg. Выберите вкладку, соответствующую вашему типу хранилища:

AWS S3

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

    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, выполните команду, подобную приведенной ниже:

    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, выполните команду, подобную приведенной ниже:

    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, выполните команду, подобную приведенной ниже:

    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, выполните команду, подобную приведенной ниже:

    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, выполните команду, подобную приведенной ниже:

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

Использование вашего catalog

Просмотр Iceberg catalogs

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

SHOW CATALOGS;

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

SHOW CREATE CATALOG iceberg_catalog_glue;

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

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

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

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

    USE <catalog_name>.<db_name>

Удаление Iceberg catalog

Вы можете использовать DROP CATALOG для удаления external 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

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

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

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

    SELECT count(*) FROM <table_name> LIMIT 10

Создание базы данных Iceberg

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

подсказка

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

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

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

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

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

HDFS

Значение Prefix: hdfs

Google GCS

Значение Prefix: gs

Azure Blob Storage

Значение Prefix:

  • Если ваша учетная запись хранения разрешает доступ по HTTP, prefix — это wasb.
  • Если ваша учетная запись хранения разрешает доступ по HTTPS, prefix — это wasbs.

Azure Data Lake Storage Gen1

Значение Prefix: adl

Azure Data Lake Storage Gen2

Значение Prefix:

  • Если ваша учетная запись хранения разрешает доступ по HTTP, prefix — это abfs.
  • Если ваша учетная запись хранения разрешает доступ по HTTPS, prefix — это abfss.

AWS S3 или другое S3-совместимое хранилище (например, MinIO)

Значение Prefix: s3


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

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

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

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

DROP DATABASE <database_name>;

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

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

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

Синтаксис

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]

Параметры

column_definition

Синтаксис column_definition следующий:

col_name col_type [COMMENT 'comment']
примечание

Все столбцы, не являющиеся разделами, должны использовать NULL в качестве значения по умолчанию. Это означает, что вы должны указать DEFAULT "NULL" для каждого из столбцов, не являющихся разделами, в операторе создания таблицы. Кроме того, столбцы разделов должны быть определены после столбцов, не являющихся разделами, и не могут использовать NULL в качестве значения по умолчанию.

partition_desc

Синтаксис partition_desc следующий:

PARTITION BY (par_col1[, par_col2...])

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

примечание

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

PROPERTIES

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

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

location

Описание: Путь к файлу, в котором вы хотите создать таблицу Iceberg. При использовании HMS в качестве metastore вам не нужно указывать параметр location, поскольку Selena создаст таблицу в пути к файлу по умолчанию текущего Iceberg catalog. При использовании AWS Glue в качестве metastore:

  • Если вы указали параметр location для базы данных, в которой вы хотите создать таблицу, вам не нужно указывать параметр location для таблицы. Таким образом, таблица по умолчанию использует путь к файлу базы данных, к которой она принадлежит.
  • Если вы не указали location для базы данных, в которой вы хотите создать таблицу, вы должны указать параметр location для таблицы.
file_format

Описание: Формат файла таблицы Iceberg. Поддерживается только формат Parquet. Значение по умолчанию: parquet.

compression_codec

Описание: Алгоритм сжатия, используемый для таблицы Iceberg. Поддерживаемые алгоритмы сжатия: SNAPPY, GZIP, ZSTD и LZ4. Значение по умолчанию: gzip. Это свойство устарело в v3.2.3, начиная с которой версии алгоритм сжатия, используемый для выгрузки данных в таблицы Iceberg, единообразно контролируется переменной сессии connector_sink_compression_codec.


Примеры

  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 (id, dt)
    AS SELECT * from employee;

Выгрузка данных в таблицу Iceberg

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

Переключитесь на Iceberg catalog и базу данных в нем, а затем используйте следующий синтаксис для выгрузки данных таблицы Selena в таблицу Iceberg в формате 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. Поэтому вы должны убедиться, что никакие пустые значения не загружаются в столбцы разделов таблицы Iceberg.

Параметры

INTO

Для добавления данных таблицы Selena к таблице Iceberg.

OVERWRITE

Для перезаписи существующих данных таблицы Iceberg данными таблицы Selena.

column_name

Имя целевого столбца, в который вы хотите загрузить данные. Вы можете указать один или несколько столбцов. Если вы указываете несколько столбцов, разделите их запятыми (,). Вы можете указывать только столбцы, которые фактически существуют в таблице Iceberg, и целевые столбцы, которые вы указываете, должны включать столбцы разделов таблицы Iceberg. Целевые столбцы, которые вы указываете, сопоставляются один к одному в последовательности со столбцами таблицы Selena, независимо от того, какие имена целевых столбцов. Если целевые столбцы не указаны, данные загружаются во все столбцы таблицы Iceberg. Если столбец таблицы Selena, не являющийся разделом, не может быть сопоставлен ни с одним столбцом таблицы Iceberg, Selena записывает значение по умолчанию NULL в столбец таблицы Iceberg. Если оператор INSERT содержит оператор запроса, возвращаемые типы столбцов которого отличаются от типов данных целевых столбцов, Selena выполняет неявное преобразование несовпадающих столбцов. Если преобразование не удается, будет возвращена ошибка синтаксического анализа.

expression

Выражение, которое присваивает значения целевому столбцу.

DEFAULT

Присваивает значение по умолчанию целевому столбцу.

query

Оператор запроса, результат которого будет загружен в таблицу Iceberg. Это может быть любой SQL-оператор, поддерживаемый Selena.

PARTITION

Разделы, в которые вы хотите загрузить данные. Вы должны указать все столбцы разделов таблицы Iceberg в этом свойстве. Столбцы разделов, которые вы указываете в этом свойстве, могут быть в другой последовательности, чем столбцы разделов, которые вы определили в операторе создания таблицы. Если вы указываете это свойство, вы не можете указать свойство column_name.

Примеры

  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';

Удаление таблицы Iceberg

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

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

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

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

DROP TABLE <table_name> [FORCE];

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

Файлы метаданных вашего кластера Iceberg могут храниться в удаленном хранилище, таком как AWS S3 или HDFS. По умолчанию Selena кэширует метаданные Iceberg в памяти. Для ускорения запросов Selena использует двухуровневый механизм кэширования метаданных, с помощью которого она может кэшировать метаданные как в памяти, так и на диске. Для каждого первоначального запроса Selena кэширует результаты их вычислений. Если выдается любой последующий запрос, который семантически эквивалентен предыдущему запросу, Selena сначала пытается получить запрошенные метаданные из своих кэшей, и она получает метаданные из удаленного хранилища только тогда, когда метаданные не могут быть найдены в ее кэшах.

Selena использует алгоритм Least Recently Used (LRU) для кэширования и вытеснения данных. Основные правила следующие:

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

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

Конфигурации FE для кэширования метаданных Iceberg

enable_iceberg_metadata_disk_cache
  • Единица: Н/Д
  • Значение по умолчанию: false
  • Описание: Указывает, следует ли включить дисковый кэш.
iceberg_metadata_cache_disk_path
  • Единица: Н/Д
  • Значение по умолчанию: StarRocksFE.STARROCKS_HOME_DIR + "/caches/iceberg"
  • Описание: Путь сохранения кэшированных файлов метаданных на диске.
iceberg_metadata_disk_cache_capacity
  • Единица: Байты
  • Значение по умолчанию: 2147483648, эквивалентно 2 ГБ
  • Описание: Максимальный размер кэшированных метаданных, разрешенный на диске.
iceberg_metadata_memory_cache_capacity
  • Единица: Байты
  • Значение по умолчанию: 536870912, эквивалентно 512 МБ
  • Описание: Максимальный размер кэшированных метаданных, разрешенный в памяти.
iceberg_metadata_memory_cache_expiration_seconds
  • Единица: Секунды
  • Значение по умолчанию: 86500
  • Описание: Количество времени, после которого запись кэша в памяти истекает, считая с момента ее последнего доступа.
iceberg_metadata_disk_cache_expiration_seconds
  • Единица: Секунды
  • Значение по умолчанию: 604800, эквивалентно одной неделе
  • Описание: Количество времени, после которого запись кэша на диске истекает, считая с момента ее последнего доступа.
iceberg_metadata_cache_max_entry_size
  • Единица: Байты
  • Значение по умолчанию: 8388608, эквивалентно 8 МБ
  • Описание: Максимальный размер файла, который может быть кэширован. Файлы, размер которых превышает значение этого параметра, не могут быть кэшированы. Если запрос запрашивает эти файлы, Selena получает их из удаленного хранилища.
enable_background_refresh_connector_metadata
  • Единица: -
  • Значение по умолчанию: true
  • Описание: Следует ли включить периодическое обновление кэша метаданных Iceberg. После включения Selena опрашивает metastore (Hive Metastore или AWS Glue) вашего кластера Iceberg и обновляет кэшированные метаданные часто используемых Iceberg catalogs для восприятия изменений данных. true указывает на включение обновления кэша метаданных Iceberg, а false указывает на его отключение.
background_refresh_metadata_interval_millis
  • Единица: Миллисекунда
  • Значение по умолчанию: 600000
  • Описание: Интервал между двумя последовательными обновлениями кэша метаданных Iceberg. - Единица: миллисекунда.
background_refresh_metadata_time_secs_since_last_access_sec
  • Единица: Секунда
  • Значение по умолчанию: 86400
  • Описание: Время истечения задачи обновления кэша метаданных Iceberg. Для Iceberg catalog, к которому был осуществлен доступ, если к нему не было доступа более указанного времени, Selena прекращает обновление его кэшированных метаданных. Для Iceberg catalog, к которому не было доступа, Selena не будет обновлять его кэшированные метаданные.

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

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

Следующая блок-схема показывает временные интервалы на временной шкале.

Timeline for updating and discarding cached metadata

Приложение B: Парсинг файлов метаданных

  • Распределенный план для большого объема метаданных

    Для эффективной обработки большого объема метаданных Selena использует распределенный подход, используя несколько узлов BE и CN. Этот метод использует возможности параллельных вычислений современных движков запросов, которые могут распределять задачи, такие как чтение, декомпрессия и фильтрация файлов manifest, по нескольким узлам. Обрабатывая эти файлы manifest параллельно, время, необходимое для получения метаданных, значительно сокращается, что приводит к более быстрому планированию заданий. Это особенно полезно для больших запросов, включающих множество файлов manifest, поскольку устраняет узкие места в одной точке и повышает общую эффективность выполнения запросов.

  • Локальный план для небольшого объема метаданных

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

  • Адаптивная стратегия получения метаданных (По умолчанию)

    Selena разработана для автоматического выбора подходящего метода получения метаданных на основе различных факторов, включая количество узлов FE и BE/CN, количество их ядер CPU и количество файлов manifest, необходимых для текущего запроса. Этот адаптивный подход обеспечивает динамическую оптимизацию получения метаданных системой без необходимости ручной настройки параметров, связанных с метаданными. Таким образом, Selena обеспечивает бесшовный опыт, балансируя между распределенными и локальными планами для достижения оптимальной производительности запросов в различных условиях.

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