34.5. Хранилище для аналитических файлов #

Расширение pgpro_duckdb позволяет выполнять аналитические запросы к OLAP-данным, которые хранятся в таблицах Postgres Pro или автономном хранилище. В большинстве случаев используется автономное хранилище. Это вызвано следующими причинами:

  • OLAP-данные сохраняются в автономное хранилище в столбцовом формате, оптимизированном для выполнения аналитических запросов.

  • Автономное хранилище позволяет изолировать ввод/вывод аналитических запросов от OLTP-назгрузки.

  • Сетевые хранилища позволяют хранить большие объёмы исторических данных и обеспечивают достаточную производительность для выполнения ресурсоёмких аналитических запросов.

  • Общие хранилища могут быть использованы резервными серверами для улучшения масштабируемости и изоляции нагрузки.

Примечание

В настоящее время не рекомендуется использовать локальные хранилища в основном сценарии развёртывания, так как расширение pgpro_duckdb требует членства в глобальной роли, назначающей права пользователя postgres.

Однако локальное хранилище может использоваться одним экземпляром Postgres Pro Enterprise с выделенным аналитиком, когда данные можно легко восстановить.

34.5.1. Parquet-файлы #

Расширение pgpro_duckdb хранит OLAP-данные в Parquet-файлах. Этот столбцовый формат поддерживает различные методы сжатия, а также включает в себя базовую статистику по данным. Хранимую статистику по данным можно использовать для переноса фильтров и проекций на файловый уровень (filter pushdown и projection pushdown), чтобы уменьшить объём читаемых данных.

34.5.2. Структура каталогов #

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

  • В локальном хранилище:

            rootpath/db_name/schema_name/table_name
  • В S3-хранилище:

            s3://bucket/db_name/schema_name/table_name

Расширение pgpro_duckdb позволяет автоматически экспортировать OLAP-данные в несколько Parquet-файлов и добавлять уникальный номер к имени каждого файла. OLAP-данные проще хранить в виде нескольких Parquet-файлов одинакового размера.

Вы также можете использовать Hive-секционирование (Hive partitioning), чтобы организовать OLAP-данные по ключам секционирования в иерархии каталогов:

    table_name
    ├── year=2024
    │    ├── month=1
    │    │   ├── file1.parquet
    │    │   └── file2.parquet
    │    └── month=2
    │        └── file3.parquet
    └── year=2025
        ├── month=11
        │   ├── file4.parquet
        │   └── file5.parquet
        └── month=12
            └── file6.parquet

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

Также поддерживается перенос фильтров на файловый уровень (filter pushdown) на уровне путей. Это позволяет пропускать при чтении пути, которые не содержат необходимые OLAP-данные.