介绍 Supabase ETL
Source: Dev.to

Supabase ETL 是一个变更数据捕获(CDC)管道,可将你的 Postgres 表实时复制到分析目的地。它使用逻辑复制从你的 Postgres 数据库读取更改,并将其写入外部目的地。在 Supabase 仪表盘中,设置只需几分钟。
首批支持的目的地是 Analytics Buckets(基于 Iceberg)和 BigQuery。
Supabase ETL 是开源的——代码托管在 GitHub 上 。
为什么要将 OLTP 与 OLAP 分离?
Postgres 在事务性工作负载(例如读取单个用户记录或插入订单)方面表现出色。当需要扫描数百万行进行分析时,Postgres 会变慢。
像 BigQuery 这样的列式系统,或基于 Apache Iceberg 等开放格式构建的系统,专为此设计。它们能够:
- 以 数量级更快 的速度聚合海量数据集
- 更高效地压缩数据
- 处理复杂的分析查询,而这些查询会让事务型数据库捉襟见肘
Supabase ETL 为您提供两全其美的方案: 在保持 Postgres 应用快速响应的同时,解锁专为分析构建的强大系统的强大分析能力。
工作原理
Supabase ETL 捕获您 Postgres 数据库中的每一次更改,并几乎实时地将其传送到您的分析目标。
- 创建 Postgres 发布,以定义要复制的表。
- 配置 ETL,将发布连接到目标。
- ETL 通过逻辑复制槽从发布中读取更改。
- 更改被批处理并写入您的目标。
- 您的数据可在目标中查询。
管道首先对所选表进行初始复制,然后切换到流式模式。您的分析保持新鲜,延迟在毫秒到秒之间。
Source: …
设置 ETL
您可以完全通过 Supabase 仪表板配置 ETL。无需编写代码。
步骤 1:创建发布
发布定义了要复制的表。可以使用 SQL 或通过 UI 创建:
-- Replicate specific tables
CREATE PUBLICATION analytics_pub
FOR TABLE events, orders, users;
-- Or replicate all tables in a schema
CREATE PUBLICATION analytics_pub
FOR TABLES IN SCHEMA public;
步骤 2:启用复制
在 Supabase 仪表板中,依次进入 Database → Replication,然后点击 Enable Replication。
步骤 3:添加目的地
- 点击 Add Destination 并选择目的地类型。
- (仅限 Analytics Buckets) 首先在 Storage 部分创建一个分析存储桶。
- 使用您的存储桶凭证配置目的地,并选择您的发布。
- 点击 Create,随后点击 Start 开始复制。
步骤 4:监控管道
仪表板会显示管道状态和延迟。您可以通过操作菜单启动、停止、重启或删除管道。
可用目的地
我们的目标是通过 Supabase ETL 让您能够将现有的数据系统连接到 Supabase。我们正在积极扩展支持的目的地列表。目前,官方支持的目的地有 Analytics Buckets 和 BigQuery。
Analytics Buckets
Analytics Buckets 是基于 Apache Iceberg 构建的专用存储桶,Apache Iceberg 是一种面向大规模分析数据集的开放表格式。您的数据以 Parquet 文件形式存储在 S3 上。
当您复制到 Analytics Buckets 时,每个表都会使用变更日志结构创建。每行都包含一个 cdc_operation 列,用于指示该变更是 INSERT、UPDATE 还是 DELETE。这种仅追加的格式保留了所有变更的完整历史。
您可以使用 PyIceberg、Apache Spark、DuckDB、Amazon Athena 或任何支持 Iceberg REST Catalog API 的工具查询 Analytics Buckets。
BigQuery
BigQuery 是 Google 的无服务器数据仓库,专为大规模分析而构建。它能够处理 PB 级数据,并且能够很好地与现有的 BI 工具和数据管道集成。
当您复制到 BigQuery 时,Supabase ETL 为每个表创建一个视图,并使用底层的版本化表来高效支持所有操作。您查询视图,ETL 负责其余工作。
添加和删除表
您可以在管道运行后修改被复制的表。
添加表
ALTER PUBLICATION analytics_pub ADD TABLE products;
删除表
ALTER PUBLICATION analytics_pub DROP TABLE orders;
更改发布后,请从仪表板的操作菜单重新启动管道,以使更改生效。
注意: 当您从发布中删除表时,ETL 不会 从目标中删除数据。这是有意为之,以防止意外的数据丢失。
何时使用 ETL 与 只读副本
只读副本 在需要扩展并发查询时有帮助,但它们仍然是 Postgres,且并不会加速分析。
ETL 将数据迁移到为分析而构建的系统,带来:
- 对大数据集的更快查询
- 通过压缩降低存储成本
- 在生产工作负载和分析之间实现完全隔离
你可以两者兼用:只读副本用于应用读取扩展,ETL 用于分析。
需要了解的事项
- 复制通过 Supabase 仪表板管理;无需额外的基础设施。
- 延迟通常以毫秒到秒为单位进行测量,取决于网络和目标负载。
- 对于非常大的表,初始快照可能需要更长时间;后续更改会持续流式传输。
- Supabase ETL 是开源的——欢迎贡献和反馈。
ETL 约束
- 表必须有主键 – 对于 Postgres 逻辑复制是必需的。
- 不支持生成列。
- 自定义数据类型会被复制为字符串。
- 模式更改不会自动传播到目标。
- 数据原样复制,不进行转换。
- 在初始复制阶段,变更会累计在 WAL 中,并在流式复制开始后重新播放。
我们正在致力于模式更改支持、额外的目标,并评估不同的流式技术,以提升灵活性和性能。
定价
| 项目 | 成本 |
|---|---|
| 连接器 | 每个连接器每月 $25 |
| 处理的变更数据(首次同步后) | 每 GB $15 |
| 初始复制 | 免费 |
开始使用
Supabase ETL 处于私有 Alpha 阶段。
如需请求访问,请联系您的客户经理或在仪表板中填写表单。
如果您想深入代码,ETL 框架是开源的,并使用 Rust 编写。请访问仓库: .