Расширение pgpro_duckdb позволяет выполнять аналитические запросы к OLAP-данным, которые хранятся в таблицах Postgres Pro или автономном хранилище. В большинстве случаев используется автономное хранилище. Это вызвано следующими причинами:
OLAP-данные сохраняются в автономное хранилище в столбцовом формате, оптимизированном для выполнения аналитических запросов.
Автономное хранилище позволяет изолировать ввод/вывод аналитических запросов от OLTP-назгрузки.
Сетевые хранилища позволяют хранить большие объёмы исторических данных и обеспечивают достаточную производительность для выполнения ресурсоёмких аналитических запросов.
Общие хранилища могут быть использованы резервными серверами для улучшения масштабируемости и изоляции нагрузки.
В настоящее время не рекомендуется использовать локальные хранилища в основном сценарии развёртывания, так как расширение pgpro_duckdb требует членства в глобальной роли, назначающей права пользователя postgres.
Однако локальное хранилище может использоваться одним экземпляром Postgres Pro Enterprise с выделенным аналитиком, когда данные можно легко восстановить.
Расширение pgpro_duckdb хранит OLAP-данные в Parquet-файлах. Этот столбцовый формат поддерживает различные методы сжатия, а также включает в себя базовую статистику по данным. Хранимую статистику по данным можно использовать для переноса фильтров и проекций на файловый уровень (filter pushdown и projection pushdown), чтобы уменьшить объём читаемых данных.
Для хранения 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-данные.