实时查询分析
1. 概述
ivy_mooncake 是 pg_mooncake 的 IvorySQL 发行版。它是一个 Postgres 扩展,可在 Apache Iceberg 中为 Postgres 表创建列存镜像,从而支持亚秒级新鲜度的快速分析(OLAP)查询。它让 IvorySQL 在事务表之上直接获得实时分析处理能力:
-
实时摄取:由 moonlink 驱动,支持流式与批量的 INSERT/UPDATE/DELETE。
-
快速分析:由 DuckDB 加速,在 ClickBench 上排名前 10。
-
Postgres 原生:可像查询普通 Postgres 表一样查询列存表。
-
Iceberg 原生:数据可被其他查询引擎直接访问。
3. 安装
3.1. 使用 Docker 运行(预览版)
提供了预装 pg_duckdb 与 pg_mooncake 的 IvorySQL 预览镜像:
docker run --name ivy_mooncake \ -e IVORYSQL_PASSWORD=password \ -p 5432:5432 -p 1521:1521 \ -v ivy_mooncake_data:/var/lib/ivorysql/data \ -v ivy_mooncake_warehouse:/tmp/moonlink_iceberg \ registry.highgo.com/mooncake/ivy_mooncake:0.1
4. 快速开始
-
创建
pg_mooncake扩展CREATE EXTENSION pg_mooncake CASCADE;
-
创建普通 Postgres 表
tradesCREATE TABLE trades( id bigint PRIMARY KEY, symbol text, time timestamp, price real );
-
创建与
trades保持同步的列存镜像trades_icebergCALL mooncake.create_table('trades_iceberg', 'trades'); -
向
trades插入数据INSERT INTO trades VALUES (1, 'AMD', '2024-06-05 10:00:00', 119), (2, 'AMZN', '2024-06-05 10:05:00', 207), (3, 'AAPL', '2024-06-05 10:10:00', 203), (4, 'AMZN', '2024-06-05 10:15:00', 210);
-
查询
trades_iceberg,它反映trades的最新状态SELECT avg(price) FROM trades_iceberg WHERE symbol = 'AMZN';