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