5.4. Настройка видимости объектов #
Вы можете выполнять транзакционные ETL-операции над объектами pgpro_metastore. Для изоляции процедур, как и в Postgres Pro, используются snapshots. Снимки — это монотонно возрастающие последовательности чисел. У каждого объекта есть номер снимка, который связан с созданием и удалением этого объекта.
В ETL-операциях номера снимков используются для определения видимости объектов pgpro_metastore. По умолчанию для чтения текущего состояния pgpro_metastore используется номер последнего снимка. Например, можно запросить список Parquet-файлов аналитической таблицы, выполнив следующий запрос:
Пример 5.2.
SELECT data.path AS data_file_path
FROM ducklake_data_file AS data
WHERE
data.table_id = TABLE_ID AND
SNAPSHOT_ID >= data.begin_snapshot AND
(SNAPSHOT_ID < data.end_snapshot OR data.end_snapshot IS NULL)
ORDER BY file_order;Если в результате ETL-операции добавляется или удаляется объект pgpro_metastore, для него создаётся новый снимок и номер снимка указывается в качестве значений begin_snapshot или end_snapshot объекта в зависимости от типа операции.
Несмотря на то, что таблицы метаданных хранятся на сервере каталога pgpro_metastore, снимки каталога не связаны со снимками транзакций Postgres Pro. За счёт этого можно продолжить выполнение ETL-операции, даже если сервер с каталогом pgpro_metastore временно недоступен после перезагрузки. Недостатком использования независимых отдельных снимков является то, что для разрешения конфликтов, при которых два снимка изменяют один и тот же объект, требуется отдельный механизм.
pgpro_metastore также использует снимки сервера Postgres Pro, где выполняются ETL-операции. В настоящее время выполнение нескольких операций в одном блоке транзакции не поддерживается. Даже если исходные Postgres Pro-таблицы остаются согласованными в течение транзакции, они будут добавлены в pgpro_metastore в разных снимках.
5.4.1. Гарантии изоляции #
С точки зрения изоляции выделятся два типа ETL-операций:
Выборка из аналитических таблиц.
Для таких операций используются стандартные представления Postgres Pro. На данный момент в результате чтения представления, связанного с аналитической таблицей, возвращается последняя версия данных даже для транзакций с уровнем изоляции Repeatable Read и выше. При этом видны только зафиксированные OLAP-данные.
Для обеспечения изоляции используются механизмы хранилища.
Другие ETL-операции с pgpro_metastore.
В ходе выполнения этих процедур в pgpro_metastore отправляются запросы только на чтение, а все запросы на изменение метаданных выполняются в конце операций в рамках одной сериализуемой транзакции. Это позволяет разрешить большинство конфликтов. При необходимости используется дополнительная логика в триггерах.
За подробной информацией обратитесь к Разделу 3.2, Разделу 3.3, Разделу 3.6 и Разделу 3.7.
5.4.2. Гарантии атомарности #
ETL-операции также обеспечивают атомарность изменений объектов. Если операция отменяется, все промежуточные данные удаляются, а изменения в таблицах метаданных не фиксируются.
Даже если процедуры изменяют объекты pgpro_metastore в рамках одной транзакции, выполняются дополнительные служебные транзакции для протоколирования этих изменений. Такие записи в журнале позволяют отменять изменения при сбое работы сервера или его перезапуске. Для отмены изменений выполните следующий запрос:
SELECT metastore.cleanup();