Вы можете выполнять транзакционные ETL-операции над объектами pgpro_metastore. Для изоляции процедур, как и в Postgres Pro, используются snapshots. Снимки — это монотонно возрастающие последовательности чисел. У каждого объекта есть номер снимка, который связан с созданием и удалением этого объекта.
В ETL-операциях номера снимков используются для определения видимости объектов pgpro_metastore. По умолчанию для чтения текущего состояния pgpro_metastore используется номер последнего снимка. Например, можно запросить список Parquet-файлов аналитической таблицы, выполнив следующий запрос:
Пример 29.1.
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 в разных снимках.