返回首页 访问原文
HogLake
介绍
HogLake 是产品分析公司 PostHog 推出的 PB 级开放表格式(open table format)/ 湖仓目录服务,于 2026 年 11 月 2 日 随博文《Why we're moving our warehouse off DuckDB》公开,代码开源在 GitHub PostHog/hoglake。
背景是:PostHog 在 5 个月前把托管数据仓库重建在 DuckDB + DuckLake 上,但数据涨到约 2 PB、1 万亿行、1530 万个快照 后,单表写入可能超过 3 分钟、目录统计行持续膨胀。于是 PostHog 改用 自家 Trino 分支 + HogLake,新 Trino 客户端会自动使用 HogLake。
解释
设计要点
- 目录即服务:所有目录 SQL 都在服务端,客户端只通过 REST 协议通信,看不到元数据库。
- 只用 Postgres 做元数据后端:快照、schema 演进、数据文件和统计都以行的形式存在 Postgres 中;数据以 Parquet 存在对象存储。
- 按写集范围提交:一次提交=一个快照,成本不随目录规模增长。
- 删除向量:行级删除用 deletion vector,每个数据文件一个活跃向量。
- 服务端负责维护:压缩、快照过期、物理清理都作为后台任务运行。
- 支持 时间旅行、变更流(changefeed)、Prometheus 指标与审计日志。
与 DuckLake / Iceberg 对比
| HogLake | DuckLake | Iceberg | |
|---|---|---|---|
| 元数据位置 | Postgres,藏在服务后面 | RDBMS,客户端直连 | 对象存储中的文件 + 目录指针 |
| 谁来提交 | 服务端 | 每个客户端(嵌入扩展) | 每个客户端(指针交换) |
| 引擎支持 | Trino 连接器、DuckDB 扩展、Python;Iceberg REST 外观在设计中 | DuckDB | 几乎通用 |
组件
服务端用 Kotlin/Ktor 实现,另有 Python 客户端 pyhoglake、DuckDB 扩展、React 管理控制台和复制守护进程 hedgerow。
用法
适用场景
- 数据量已到 TB~PB 级、DuckLake 单节点或目录性能吃紧的湖仓团队;
- 希望 元数据集中在 Postgres、由服务统一提交和维护,避免多客户端竞争的架构;
- 用 Trino 做分布式查询,同时希望保留 DuckDB 本地读写能力的场景。
上手方式
- 阅读 PostHog 博文 posthog.com/blog/moving-off-duckdb 了解迁移原因;
- 克隆 GitHub
PostHog/hoglake,部署 Postgres + HogLake 服务端; - 通过 Trino 连接器、DuckDB 扩展或
pyhoglake读写 Parquet 表; - PostHog 云用户:新开通的数据仓库(Trino 客户端)会自动使用 HogLake,旧的 DuckLake 目录继续受支持。
广告