Создание таблицы
Paimon* регулируется параметром allow_experimental_paimon_storage_engine (по умолчанию он отключен), поэтому включите его перед выполнением CREATE TABLE.
Аргументы движка
S3, AzureBlobStorage, HDFS и File соответственно.
format обозначает формат файлов данных в таблице Paimon.
Параметры движка можно задавать с помощью именованных коллекций
Пример
Возможности
- Чтение снимка из последнего снимка таблицы.
- Инкрементальное чтение по идентификатору зафиксированного снимка, если эта возможность включена.
- Отсечение партиций, если включен
use_paimon_partition_pruning. - Необязательное фоновое обновление метаданных при соответствующей настройке.
- Стабильный UUID таблицы при использовании баз данных Atomic/Replicated, что позволяет использовать макросы
{uuid}в путях Keeper.
Настройки
allow_experimental_paimon_storage_engine— включает создание движков таблицPaimon,PaimonS3,PaimonAzure,PaimonHDFSиPaimonLocal. По умолчанию:0(отключено).paimon_incremental_read— включает режим инкрементального чтения.paimon_metadata_refresh_interval_sec— интервал фонового обновления метаданных в секундах. Если задано значение больше 0, фоновая задача периодически загружает из объектного хранилища последний снимок и схему. По умолчанию: 30.paimon_keeper_path— путь Keeper для состояния инкрементального чтения. Должен быть задан и быть уникальным для каждой таблицы; поддерживает макросы, такие как{database},{table},{uuid}.paimon_replica_name— имя реплики для состояния инкрементального чтения. Должно быть задано и быть уникальным для каждой реплики; поддерживает макросы, такие как{replica}.
Примеры инкрементального чтения
Настройки на уровне запроса для инкрементального чтения
SELECT ... SETTINGS, а не в CREATE TABLE). Они управляют поведением инкрементального чтения в рамках отдельного запроса:
paimon_target_snapshot_id— считывать только дельту указанного снимка. Зафиксированная водяная метка в Keeper не продвигается, поэтому один и тот же снимок можно перечитывать сколько угодно раз. По умолчанию:-1(отключено).max_consume_snapshots— максимальное число снимков, считываемых за одно инкрементальное чтение. Если в источнике накопилось много непрочитанных снимков, этот параметр ограничивает, сколько из них будет считано за один запрос, чтобы контролировать размер батча.0означает отсутствие ограничений. По умолчанию:0.
Из Paimon в MergeTree через refreshable materialized view
APPEND. В каждом цикле обновления считываются только новые инкрементальные данные из Paimon и добавляются в целевую таблицу.
Шаг 1 — Создайте исходную таблицу Paimon с включенными инкрементальным чтением и обновлением метаданных.
В примере ниже используется PaimonLocal. Замените движок на PaimonS3, PaimonAzure, PaimonHDFS или псевдоним Paimon в зависимости от используемого backend-хранилища:
paimon_metadata_refresh_interval_sec задает интервал фонового обновления метаданных в секундах. Если значение больше 0, фоновая задача периодически подтягивает актуальные снимок и схему из Объектного хранилища, чтобы цикл обновления MV мог видеть недавно зафиксированные данные без ожидания запроса, который запустит обновление метаданных. Значение по умолчанию — 30. Используйте с осторожностью при работе с большим числом таблиц, чтобы избежать чрезмерной нагрузки на Объектное хранилище и операции ввода-вывода Keeper.
Шаг 2 — Создайте целевую таблицу MergeTree (схема скопирована из таблицы Paimon):
SELECT * FROM paimon_mv_source, который возвращает только строки, добавленные после последнего зафиксированного снимка, и дописывает их в paimon_mv_dest.
Очистка:
Остановите MV перед удалением, чтобы фоновое обновление не блокировало выполнение DDL-операций.
Ограничения
- Для инкрементального чтения должен быть настроен Keeper (ZooKeeper).
- Для инкрементального чтения параметр
paimon_keeper_pathдолжен быть задан и быть уникальным для каждой таблицы. paimon_replica_nameдолжен быть уникальным для каждой реплики в рамках одного и того же пути Keeper.- Инкрементальное чтение использует доставку не более одного раза: зафиксированный снимок продвигается в момент сбора файлов данных, ещё до фактического чтения данных. Если запрос завершится ошибкой после сбора файлов, пропущенные снимки не будут повторно прочитаны при повторной попытке.
- Движок таблицы работает в режиме только для чтения; изменение данных не поддерживается.
- Инкрементальное чтение не обрабатывает удаление исторических данных из источника Paimon. Если исходные данные Paimon удаляются или обновляются, соответствующие строки, уже записанные в целевую таблицу семейства MergeTree в ClickHouse, не будут автоматически удалены. Чтобы очистить устаревшие данные, необходимо вручную выполнить
ALTER TABLE ... DELETEдля таблицы семейства MergeTree.
Псевдонимы
Paimon теперь служит псевдонимом для PaimonS3.
Виртуальные столбцы
_path— Путь к файлу. Тип:LowCardinality(String)._file— Имя файла. Тип:LowCardinality(String)._size— Размер файла в байтах. Тип:Nullable(UInt64). Если размер файла неизвестен, значение —NULL._time— Время последнего изменения файла. Тип:Nullable(DateTime). Если время неизвестно, значение —NULL._etag— ETag файла. Тип:LowCardinality(String). Если ETag неизвестен, значение —NULL.
Поддерживаемые типы данных
| Тип данных Paimon | Тип данных ClickHouse |
|---|---|
| BOOLEAN | Int8 |
| TINYINT | Int8 |
| SMALLINT | Int16 |
| INTEGER | Int32 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| STRING,VARCHAR,BYTES,VARBINARY | String |
| DATE | Date |
| TIME(p),TIME | Time(‘UTC’) |
| TIMESTAMP(p) WITH LOCAL TIME ZONE | DateTime64 |
| TIMESTAMP(p) | DateTime64(‘UTC’) |
| CHAR | FixedString(1) |
| BINARY(n) | FixedString(n) |
| DECIMAL(P,S) | Decimal(P,S) |
| ARRAY | Array |
| MAP | Map |
Поддерживаемые партиции
CHARVARCHARBOOLEANDECIMALTINYINTSMALLINTINTEGERDATETIMETIMESTAMPTIMESTAMP WITH LOCAL TIME ZONEBIGINTFLOATDOUBLE