pg_mooncake 是一个 PostgreSQL 扩展,它集成了列式存储和向量执行(DuckDB)功能,以实现 PostgreSQL 中的快速分析。
Postgres + pg_mooncake 在 ClickBench 测试中排名前十。
核心功能:
- 使用 Iceberg 或 Delta Lake 作为列存储表
- 与 PostgreSQL 堆表进行 JOIN 操作
- 支持从多种数据源加载数据,包括 Parquet、CSV、JSON 文件以及 Iceberg 和 Delta Lake 表
- 支持事务、更新、删除、JOIN 操作等
安装
选项 1:使用 Docker
docker pull mooncakelabs/pg_mooncake
docker run --name mooncake-demo -e POSTGRES_HOST_AUTH_METHOD=trust -d mooncakelabs/pg_mooncake
docker run -it --rm --link mooncake-demo:postgres mooncakelabs/pg_mooncake psql -h postgres -U postgres
选项 2:从源码安装
git clone --recurse-submodules https://github.com/Mooncake-Labs/pg_mooncake.git
make release -j$(nproc) make install
选项 3:在 Neon Postgres 上安装
- 创建 Neon 项目
- 启用 beta 扩展
- 执行以下 SQL 命令:
SET neon.allow_unstable_extensions='true';
快速开始
- 启用扩展:
CREATE EXTENSION pg_mooncake;
- 创建列存储表:
CREATE TABLE user_activity(
user_id BIGINT,
activity_type TEXT,
activity_timestamp TIMESTAMP,
duration INT)
USING columnstore;
- 插入数据:
INSERT INTO user_activity VALUES
(1, 'login', '2024-01-01 08:00:00', 120),
(2, 'page_view', '2024-01-01 08:05:00', 30),
(3, 'logout', '2024-01-01 08:30:00', 60),
(4, 'error', '2024-01-01 08:13:00', 60);
SELECT * from user_activity;
云存储
列存储表默认存储在本地文件系统中。您可以通过配置 mooncake.default_bucket
将数据存储在 S3 或 R2 存储桶中。
加载数据
pg_mooncake 支持从以下数据源加载数据:
- PostgreSQL 堆表
- Parquet、CSV、JSON 文件
- Iceberg、Delta Lake 表
- Hugging Face 数据集
列存储表作为 Iceberg 或 Delta Lake 表
您可以通过以下 SQL 命令找到列存储表的位置:
SELECT * FROM mooncake.columnstore_tables;
该目录包含 Delta Lake(和即将到来的 Iceberg)表,可以直接使用 Pandas、DuckDB、Polars 或 Spark 进行查询。
路线图
- 事务性 INSERT、SELECT、UPDATE、DELETE 和 COPY
- 与常规 PostgreSQL 堆表 JOIN
- 将 Parquet、CSV 和 JSON 文件加载到列存储表中
- 读取现有的 Iceberg 和 Delta Lake 表
- 文件统计和跳过
- 写入 Delta Lake 表
- 写入 Iceberg 表
- 批量小写入和压缩
- 二级索引和约束
- 分区表
注意:文件统计和跳过应该涵盖大多数使用 Postgres 分区表的场景,包括时间序列。
评论