Глава 29. Настройка видимости объектов

Содержание

29.1. Гарантии изоляции
29.2. Гарантии атомарности

Вы можете выполнять транзакционные 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 в разных снимках.