介绍 Supabase ETL

发布: (2025年12月22日 GMT+8 22:09)
8 min read
原文: Dev.to

Source: Dev.to

Cover image for Introducing Supabase ETL

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 数据库中的每一次更改,并几乎实时地将其传送到您的分析目标。

  1. 创建 Postgres 发布,以定义要复制的表。
  2. 配置 ETL,将发布连接到目标。
  3. ETL 通过逻辑复制槽从发布中读取更改。
  4. 更改被批处理并写入您的目标。
  5. 您的数据可在目标中查询。

管道首先对所选表进行初始复制,然后切换到流式模式。您的分析保持新鲜,延迟在毫秒到秒之间。

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:添加目的地

  1. 点击 Add Destination 并选择目的地类型。
  2. (仅限 Analytics Buckets) 首先在 Storage 部分创建一个分析存储桶。
  3. 使用您的存储桶凭证配置目的地,并选择您的发布。
  4. 点击 Create,随后点击 Start 开始复制。

步骤 4:监控管道

仪表板会显示管道状态和延迟。您可以通过操作菜单启动、停止、重启或删除管道。

可用目的地

我们的目标是通过 Supabase ETL 让您能够将现有的数据系统连接到 Supabase。我们正在积极扩展支持的目的地列表。目前,官方支持的目的地有 Analytics BucketsBigQuery

Analytics Buckets

Analytics Buckets 是基于 Apache Iceberg 构建的专用存储桶,Apache Iceberg 是一种面向大规模分析数据集的开放表格式。您的数据以 Parquet 文件形式存储在 S3 上。

当您复制到 Analytics Buckets 时,每个表都会使用变更日志结构创建。每行都包含一个 cdc_operation 列,用于指示该变更是 INSERTUPDATE 还是 DELETE这种仅追加的格式保留了所有变更的完整历史。

您可以使用 PyIcebergApache SparkDuckDBAmazon 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 编写。请访问仓库: .

Back to Blog

相关文章

阅读更多 »