5.2. Таблицы метаданных #

Метаданные из таблиц метаданных pgpro_metastore необходимы для обеспечения следующей функциональности:

  • Создание аналитических представлений.

  • Запросы к аналитическим таблицам с секционированием и индексами для Parquet-файлов.

  • Поддержка базовых ETL-операций:

    • выполнение ETL-операций;

    • планирование ETL-операций на определённую дату и время, а также настройка последовательного выполнения (одной операции за другой);

    • ограничение ресурсов, доступных для выполнения ETL-операций, чтобы избежать увеличения OLTP-нагрузки.

  • Работа с OLAP-данными:

    • создание Parquet-файлов с OLAP-данными из таблиц Postgres Pro и импорт этих данных в аналитические таблицы;

    • экспорт OLAP-данных из аналитических таблиц в файлы в форматах Parquet, CSV и JSON;

    • создание отчётов с отфильтрованными OLAP-данными с помощью SQL-запросов.

  • Изменение объектов pgpro_metastore в рамках транзакций, а также согласованные изменения аналитических таблиц при чтении и записи.

  • Проверка целостности данных и восстановление Parquet-файлов из резервных копий или с помощью зеркал S3-хранилищ.

  • Мониторинг pgpro_metastore и уведомление администраторов о событиях, срочно требующих внимания.

  • Распределение Parquet-файлов по отдельным хранилищам во избежание конкуренции с OLTP-нагрузкой за пропускную способность ввода-вывода.

Схема таблиц метаданных представлена на диаграмме ниже.

Рисунок 5.1. Схема таблиц метаданных


За подробной информацией о каждой таблице метаданных обратитесь к соответствующим подразделам этого раздела.

5.2.1. Таблица метаданных pga_snapshot #

В этой таблице метаданных содержится информация о снимках.

Имя столбца

Тип столбца

Ограничение

Описание

snapshot_id

BIGINT

Первичный ключ

Идентификатор снимка.

Значение увеличивается на единицу для каждого нового идентификатора.

Это первичный ключ, на который ссылается большинство таблиц метаданных.

snapshot_time

TIMESTAMP

NOT NULL

Дата и время создания снимка.

schema_version

BIGINT

NOT NULL

Версия каталога pgpro_metastore.

Значение увеличивается на единицу с каждым изменением объекта pgpro_metastore, например, при создании аналитической таблицы.

next_catalog_id

BIGINT

NOT NULL

Идентификатор, назначенный следующему объекту pgpro_metastore, например, аналитической таблице.

При создании объекта значение увеличивается.

next_file_id

BIGINT

NOT NULL

Идентификатор, назначаемый следующему созданному Parquet-файлу.

При создании файла значение увеличивается.

is_visible

BOOLEAN

NOT NULL

Определяет видимость объектов pgpro_metastore, которые ссылаются на снимок.

Возможные значения:

  • true

  • false

Когда в результате ETL-операции, например, add_table, создаётся несколько объектов, которые ссылаются на один и тот же снимок, для значения is_visible снимка задаётся false. Новые объекты не видны до завершения операции.

После этого значение is_visible меняется на true и объекты становятся видимыми, то есть доступными в выводе команды SELECT.

Столбец is_visible можно также использовать, чтобы временно скрыть объекты, не удаляя их, и затем снова сделать их видимыми.

5.2.2. Таблица метаданных pga_snapshot_changes #

В этой таблице метаданных содержится информация об изменениях снимков, которую можно использовать для разрешения конфликтов между разными снимками.

Имя столбца

Тип столбца

Ограничение

Описание

snapshot_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор снимка из таблицы метаданных pga_snapshot.

changes_made

VARCHAR

-

Список изменений снимка, разделённых запятыми, в следующих форматах:

  • created_schema:имя_схемы: снимок связан с созданием аналитической схемы.

  • created_table:имя_таблицы: снимок связан с созданием аналитической таблицы.

  • created_view:имя_представления: снимок связан с созданием представления.

  • inserted_into_table:идентификатор_таблицы: снимок связан с добавлением OLAP-данных в аналитическую таблицу.

  • deleted_from_table:идентификатор_таблицы: снимок связан с удалением OLAP-данных из аналитической таблицы.

  • dropped_schema:идентификатор_схемы: снимок связан с удалением аналитической схемы.

  • dropped_table:идентификатор_таблицы: снимок связан с удалением аналитической таблицы.

  • dropped_view:идентификатор_представления: снимок связан с удалением представления.

  • altered_table:идентификатор_таблицы: снимок связан с изменением метаданных аналитической таблицы.

  • altered_view:идентификатор_представления: снимок связан с изменением метаданных представления.

5.2.3. Таблица метаданных pga_schema #

В этой таблице метаданных содержится информация об аналитических схемах.

Имя столбца

Тип столбца

Ограничение

Описание

schema_id

BIGINT

Первичный ключ

Идентификатор аналитической схемы, назначаемый путём увеличения значения next_catalog_id таблицы метаданных pga_snapshot.

schema_uuid

UUID

NOT NULL, UNIQUE

Постоянный идентификатор аналитической схемы, сохраняемый для обеспечения совместимости со схемами Postgres Pro.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания аналитической схемы.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления аналитической схемы.

Если значение NULL, аналитическая схема не удалена.

schema_name

VARCHAR

NOT NULL, UNIQUE

Уникальное имя аналитической схемы, например, my_schema.

5.2.4. Таблица метаданных pga_table #

В этой таблице метаданных содержится информация об аналитических таблицах.

Имя столбца

Тип столбца

Ограничение

Описание

table_id

BIGINT

Первичный ключ

Идентификатор аналитической таблицы, назначаемый путём увеличения значения next_catalog_id таблицы метаданных pga_snapshot.

table_uuid

UUID

NOT NULL, UNIQUE

Постоянный идентификатор аналитической таблицы, сохраняемый для обеспечения совместимости с таблицами Postgres Pro.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания аналитической таблицы.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления аналитической таблицы.

Если значение NULL, аналитическая таблица не удалена.

schema_id

BIGINT

NOT NULL, UNIQUE

Идентификатор аналитической схемы из таблицы метаданных pga_schema, в которой создаётся аналитическая таблица.

table_name

VARCHAR

NOT NULL

Имя аналитической таблицы, например, my_table.

Значения table_name не UNIQUE (уникальные), поскольку pgpro_metastore не удаляет метаданные аналитических таблиц. Удалённые аналитические таблицы связываются со значениями end_snapshot, чтобы показать, что эти таблицы больше нельзя использовать.

Если бы значения table_name были UNIQUE (уникальные), создать аналитическую таблицу с тем же именем, что и у ранее удалённой таблицы, было бы невозможно.

path

VARCHAR

NOT NULL, UNIQUE

Путь к общему каталогу относительно значения uri таблицы метаданных pga_storage.

Абсолютный путь генерируется путём соединения значения uri таблицы метаданных pga_storage и значения path таблицы метаданных pga_table.

storage_id

BIGINT

Внешний ключ, NOT NULL

Идентификатор хранилища из таблицы метаданных pga_storage, в котором создана аналитическая таблица.

5.2.5. Таблица метаданных pga_storage #

В этой таблице метаданных содержится информация о хранилищах.

Имя столбца

Тип столбца

Ограничение

Описание

storage_id

BIGINT

Первичный ключ

Идентификатор хранилища, назначаемый путём увеличения значения next_catalog_id таблицы метаданных pga_snapshot.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания хранилища.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления хранилища.

Если значение NULL, хранилище не удалено.

storage_name

VARCHAR

NOT NULL

Имя хранилища, например, my_storage.

Значения storage_name не UNIQUE (уникальные), потому что pgpro_metastore не удаляет метаданные хранилища. Удалённые хранилища связываются со значениями end_snapshot, чтобы показать, что эти хранилища больше нельзя использовать.

Если бы значения storage_name были UNIQUE (уникальные), создать хранилище с тем же именем, что и у ранее удалённого хранилища, было бы невозможно.

uri

VARCHAR

NOT NULL, UNIQUE

URI корневого каталога хранилища.

У локальных хранилищ URI простой, например, file:///home/j.doe/workspace/axe/.

S3-хранилища отличаются более сложной структурой URI и логикой разбора, например, s3://premdb/team01.csv?versionId=w_B5qT8s5MkiT09.IRHay0lW.PycsHTS. Эти URI генерируются с помощью сторонних библиотек.

tmp_uri

VARCHAR

NOT NULL, UNIQUE

URI каталога хранилища для временных файлов.

У локальных хранилищ URI простой, например, file:///home/j.doe/workspace/axe/.

S3-хранилища отличаются более сложной структурой URI и логикой разбора, например, s3://premdb/team01.csv?versionId=w_B5qT8s5MkiT09.IRHay0lW.PycsHTS. Эти URI генерируются с помощью сторонних библиотек.

storage_type

BIGINT

NOT NULL

Тип хранилища.

В настоящее время поддерживаются локальные, сетевые и S3-хранилища.

min_space

BIGINT

NOT NULL

Минимально необходимое свободное место в хранилище, в байтах.

Проверяется при выполнении ETL-операции add_storage, а также других операций, если происходит удаление временных файлов из каталога, определённого значением tmp_uri.

uri_id

BIGINT

Внешний ключ, NOT NULL, UNIQUE

Идентификатор URI из таблицы метаданных pga_uri, связанный с корневым каталогом хранилища.

tmp_uri_id

BIGINT

Внешний ключ, NOT NULL, UNIQUE

Идентификатор URI из таблицы метаданных pga_uri, связанный с каталогом хранилища для временных файлов.

5.2.6. Таблица метаданных pga_uri #

В этой таблице метаданных содержится системная информация о pgpro_metastore, и она не предназначена для изменения пользователями.

Столбец uri содержит исходные сериализованные URI, связанные со значениями uri или tmp_uri таблицы метаданных pga_storage.

Столбец path содержит пути к корневым каталогам хранилищ. Для локальных хранилищ значимы только значения этого столбца, которые, как правило, совпадают со значениями uri, за исключением префиксов, указывающих на тип хранилища:

  • file:// для локальных хранилищ;

  • s3:// для S3-хранилищ.

Остальные столбцы содержат произвольные URI для S3-хранилищ.

За подробной информацией обратитесь к RFS 3968 и к официальной документации AWS (ресурс недоступен на территории Российской Федерации).

5.2.7. Таблица метаданных pga_folder #

В этой таблице метаданных содержится информация об общих каталогах, используемых для хранения Parquet-файлов. Например, эти каталоги можно использовать как источник Parquet-файлов для ETL-операции add_files.

Имя столбца

Тип столбца

Ограничение

Описание

folder_id

BIGINT

Первичный ключ

Идентификатор общего каталога, назначаемый путём увеличения значения next_catalog_id таблицы метаданных pga_snapshot.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания общего каталога.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления общего каталога.

Если значение NULL, общий каталог не удалён.

path

VARCHAR

NOT NULL

Путь к общему каталогу относительно корневого каталога хранилища.

Полный путь получается путём соединения значения uri таблицы метаданных pga_storage и значения path таблицы метаданных pga_folder.

folder_name

VARCHAR

NOT NULL

Имя общего каталога, например, my_directory.

Значения folder_name не UNIQUE (уникальные), потому что pgpro_metastore не удаляет метаданные общих каталогов. Удалённые каталоги связываются со значениями end_snapshot, чтобы показать, что эти каталоги больше нельзя использовать.

Если бы значения folder_name были UNIQUE (уникальные), создать новый общий каталог с тем же именем, что и у ранее удалённого каталога, было бы невозможно.

storage_id

BIGINT

Внешний ключ, NOT NULL

Идентификатор хранилища из таблицы метаданных pga_storage, в котором создан общий каталог.

5.2.8. Таблица метаданных pga_column #

В этой таблице метаданных содержится информация о столбцах аналитических таблиц.

Имя столбца

Тип столбца

Ограничение

Описание

column_id

BIGINT

Первичный ключ

Идентификатор столбца.

Если исходный Parquet-файл содержит идентификатор столбца field_id, этот идентификатор используется как значение column_id. Идентификатор меняется только при удалении столбца.

Значения column_id должны быть уникальными.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания столбца.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления столбца.

Если значение NULL, столбец не удалён.

table_id

BIGINT

Внешний ключ, NOT NULL

Идентификатор аналитической таблицы из таблицы метаданных pga_table, в которой создан столбец.

column_order

BIGINT

NOT NULL

Порядковый номер столбца.

Значения column_order должны быть уникальными. Однако их последовательность может прерываться, то есть возможны пустые значения.

column_name

VARCHAR

NOT NULL

Имя столбца, например, my_column.

Значения column_name не UNIQUE (уникальные), потому что pgpro_metastore не удаляет метаданные столбцов. Удалённые столбцы связываются со значениями end_snapshot, чтобы показать, что эти столбцы больше нельзя использовать.

Если бы значения column_name были UNIQUE (уникальные), создать новый столбец с тем же именем, что и у ранее удалённого столбца, было бы невозможно.

column_type

VARCHAR

NOT NULL

Тип столбца, соответствующий одному из типов данных, поддерживаемых pgpro_metastore.

initial_default

VARCHAR

-

Исходное значение столбца, которое присваивается при создании столбца, например, после выполнения команды ALTER TABLE.

Может принимать значение NULL.

default_value

VARCHAR

-

Значение по умолчанию, используемое в операциях upsert.

Может принимать значение NULL.

nulls_allowed

BOOLEAN

-

Определяет, может ли столбец содержать значения NULL.

Возможные значения:

  • true

  • false

is_uniq

BOOLEAN

-

Определяет, может ли столбец содержать повторяющиеся значения для разных строк таблицы.

Возможные значения:

  • true

  • false

5.2.9. Таблица метаданных pga_data_file #

В этой таблице метаданных содержится информация о Parquet-файлах.

Имя столбца

Тип столбца

Ограничение

Описание

data_file_id

BIGINT

Первичный ключ

Идентификатор Parquet-файла, назначаемый путём увеличения значения next_file_id таблицы метаданных pga_snapshot.

begin_snapshot

BIGINT

Внешний ключ, NOT NULL

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем создания Parquet-файла.

end_snapshot

BIGINT

Внешний ключ

Снимок из таблицы метаданных pga_snapshot, связанный с датой и временем удаления Parquet-файла.

Если значение NULL, Parquet-файл не удалён.

table_id

BIGINT

Внешний ключ, NOT NULL

Идентификатор аналитической таблицы из таблицы метаданных pga_table, связанный с Parquet-файлом.

file_order

BIGINT

NOT NULL

Вертикальная позиция в Parquet-файле.

Значения file_order должны быть уникальными. Однако их последовательность может прерываться, то есть возможны пустые значения.

path

VARCHAR

NOT NULL, UNIQUE

Путь к Parquet-файлу, например, my_file.parquet.

path_is_relative

BOOLEAN

NOT NULL

Определяет, указывается ли путь к Parquet-файлу относительно пути к аналитической таблице или является абсолютным.

Возможные значения:

  • true

  • false

По умолчанию: false.

file_format

VARCHAR

NOT NULL

Формат файла.

На данный момент поддерживается только формат Parquet.

record_count

BIGINT

NOT NULL

Количество строк в Parquet-файле.

file_size_bytes

BIGINT

NOT NULL

Размер Parquet-файла, в байтах.

row_id_start

BIGINT

NOT NULL

Значение row_id для первой строки Parquet-файла. Обозначает начало Parquet-файла относительно таблицы.

checksum_crc32

BIGINT

NOT NULL

Текущее значение контрольной суммы Parquet-файла.

Используется для проверок целостности данных.

5.2.10. Таблица метаданных pga_files_scheduled_for_deletion #

В этой таблице метаданных содержится информация о Parquet-файлах, которые не связаны со снимками и которые планируется удалить. Parquet-файлы отвязываются от снимков после выполнения ETL-операции expire_snapshot, в результате которой снимки помечаются как устаревшие.

Имя столбца

Тип столбца

Ограничение

Описание

data_file_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор Parquet-файла из таблицы метаданных pga_data_file.

path

VARCHAR

NOT NULL, UNIQUE

Путь к Parquet-файлу, например, my_file.parquet.

path_is_relative

BOOLEAN

NOT NULL

Указывает, является ли путь к Parquet-файлу относительным по отношению к пути к аналитической таблице или абсолютным.

Возможные значения:

  • true

  • false

По умолчанию: false.

schedule_start

TIMESTAMPTZ

NOT NULL

Дата и время запланированного удаления Parquet-файла.

5.2.11. Таблица метаданных pga_table_stats #

В этой таблице метаданных содержится статистика аналитических таблиц.

Имя столбца

Тип столбца

Ограничение

Описание

table_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор аналитической таблицы из таблицы метаданных pga_table.

record_count

BIGINT

NOT NULL

Количество строк в аналитической таблице.

next_row_id

BIGINT

NOT NULL

Значение row_id для следующего столбца, добавляемого в аналитическую таблицу.

file_size_bytes

BIGINT

NOT NULL

Общий размер всех Parquet-файлов, связанных с аналитической таблицей, в байтах.

5.2.12. Таблица метаданных pga_table_column_stats #

В этой таблице метаданных содержится статистика по столбцам аналитических таблиц.

Имя столбца

Тип столбца

Ограничение

Описание

column_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор столбца из таблицы метаданных pga_column.

contains_null

BOOLEAN

NOT NULL

Определяет, может ли столбец содержать значения NULL.

Возможные значения:

  • true

  • false

contains_nan

BOOLEAN

-

Определяет, может ли столбец содержать значения NaN.

Возможные значения:

  • true

  • false

Эта информация значима только для типов данных FLOAT, DOUBLE и NUMERIC.

min_value

VARCHAR

-

Минимальное значение в столбце.

Для единообразия отображается как строка, которую при использовании необходимо преобразовать в тип данных, используемых в столбце.

max_value

VARCHAR

-

Максимальное значение в столбце.

Для единообразия отображается как строка, которую при использовании необходимо преобразовать в тип данных, используемых в столбце.

5.2.13. Таблица метаданных pga_file_column_statistics #

В этой таблице метаданных содержится статистика столбцов аналитических таблиц в разрезе Parquet-файлов.

Имя столбца

Тип столбца

Ограничение

Описание

data_file_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор Parquet-файла из таблицы метаданных pga_data_file.

column_id

BIGINT

Первичный ключ, внешний ключ

Идентификатор столбца из таблицы метаданных pga_column.

column_size

BIGINT

NOT NULL

Размер столбца, в байтах.

value_count

BIGINT

NOT NULL

Количество элементов столбца, содержащихся в Parquet-файле.

Не равно количеству записей в Parquet-файле, так как в нём могут содержаться вложенные записи, такие как структуры и списки.

null_count

BIGINT

NOT NULL

Количество значений NULL в столбце.

min_value

VARCHAR

-

Минимальное значение для столбца в пределах Parquet-файла.

Значение можно использовать определения верхней границы минимального значения для столбца.

max_value

VARCHAR

-

Максимальное значение для столбца в пределах Parquet-файла.

Значение можно использовать для определения нижней границы максимального значения для столбца.

5.2.14. Таблица метаданных pga_transaction_log #

В этой таблице метаданных содержится информация по протоколированию задач pgpro_metastore, аналогичные стандартным транзакциям СУБД.

Имя столбца

Тип столбца

Ограничение

Описание

lsn

BIGSERIAL

Первичный ключ

Последовательный номер записи транзакции в журнале (LSN).

txid

BIGINT

NOT NULL

Идентификатор задачи.

io_id

INT

-

Идентификатор ETL-операции.

Одна задача может состоять из нескольких ETL-операций.

kind

VARCHAR

NOT NULL

Тип ETL-операции, например add_storage, add_table, add_files и create_view.

attr

JSONB

-

Данные, относящиеся к задаче: исходные и полученные в ходе её выполнения.