介绍 Analytics Buckets

发布: (2025年12月19日 GMT+8 22:45)
8 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for Introducing Analytics Buckets

概览

Supabase 正在推出 Analytics Buckets,您可以使用它们在 Supabase Storage 中存储海量数据。Postgres 对您的应用非常好,但它并非为分析工作负载而设计。

Analytics Buckets 是 Supabase 中专为分析工作负载设计的专用存储类型,基于 Apache Iceberg 和 Amazon S3 构建。它们以列式 Parquet 格式存储数据,该格式针对扫描、聚合和时间序列查询进行了优化。

可以把它们视为数据的冷存储,并附带查询引擎。

  • 您的热事务数据仍保留在 Postgres 中。
  • 您的历史数据和分析工作负载放在 Analytics Buckets 中。
  • 您可以使用熟悉的工具查询两者。

他们的作用是什么?

Analytics Buckets 为您提供:

  • 成本效益高的存储 – 使用 S3 计费而非数据库存储(针对大型数据集,已记录的存储成本可节省 30‑90 %)。
  • 开放表格格式 – Apache Iceberg 意味着没有供应商锁定;可使用任何兼容工具查询您的数据。
  • 模式演进 – 在不重新写入数据的情况下更改表的模式。
  • 时间旅行 – 查询数据的历史快照;随时查看表在任意时间点的样子。
  • 完整审计历史 – 每一次更改都会被保留;跟踪何时、何人以及如何进行的更改。

何时使用 Analytics Buckets 与 Postgres

Analytics Buckets 和 Postgres 是互补的;它们适用于不同的工作负载。

在以下情况下保留数据在 Postgres 中

  • 您的应用需要低延迟读取。
  • 数据经常变更且一致性很重要。
  • 数据集规模为中小型。
  • 您需要实时访问数据。

在以下情况下使用 Analytics Buckets

  • 您存储的是数百万或数十亿行数据。
  • 您执行需要扫描大表的重型分析查询。
  • 您需要低成本的长期存储。
  • 您希望从多个工具查询数据。
  • 您需要完整的审计历史和时间旅行功能。

许多团队同时使用两者。将最近 90 天的数据保留在 Postgres 中,所有数据归档到 Analytics Buckets,并在需要时查询历史数据。

工作原理

Analytics Buckets 使用 Apache Iceberg,这是一种为大规模分析数据集而创建的开源表格式。其内部工作方式如下:

  • 数据存储在 S3 上的 Parquet 文件中。
  • Iceberg 管理元数据(模式、分区、快照)。
  • Iceberg REST Catalog 提供查询接口。
  • 您可以使用任何兼容 Iceberg 的工具进行连接。

计算与存储的分离意味着您可以独立扩展两者——存储 PB 级数据,并仅查询所需的数据。

创建分析存储桶

您可以通过仪表板或使用 SDK 来创建分析存储桶。

使用仪表板

  1. 在 Supabase 仪表板中进入 Storage
  2. 点击 Create Bucket
  3. 为存储桶输入名称。
  4. 将存储桶类型选择为 Analytics Bucket
  5. 点击 Create

您可以定义列并设置数据类型(包括带有精度和标度的 decimal 等复杂类型)。外部数据包装器(foreign‑data‑wrapper)模式会自动配置。表创建完成后,您可以像管理 Postgres 表一样管理分析存储桶。

使用 SDK

import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'https://your-project.supabase.co',
  'your-service-key'
)

await supabase.storage.createBucket('my-analytics-bucket', {
  type: 'ANALYTICS',
})

连接到 Analytics Buckets

Analytics Buckets 需要使用两项服务进行身份验证:

  1. Iceberg REST Catalog – 管理表的元数据(模式、分区、快照)。
  2. S3‑compatible storage – 存储实际的 Parquet 数据。

您使用 Supabase 服务密钥对目录进行身份验证,并使用 S3 凭证对存储进行身份验证。

使用 Supabase ETL 进行流式数据

Analytics Buckets 与 Supabase ETL 紧密协作。ETL 捕获来自你的 Postgres 数据库的更改,并以近实时的方式将其流式传输到 Analytics Buckets。

这为你提供了:

  • 自动复制你的 Postgres 表。
  • 在你的分析桶中实现近实时数据。
  • 完整的变更日志,记录每一次插入、更新和删除。
  • 无需手动数据迁移或计划任务。

要设置复制,请为你想要复制的表创建一个 Postgres 发布(publication),然后在仪表盘的 Replication 部分添加一个 Analytics Buckets 目标。

从 Postgres 查询

您可以使用 Foreign Data Wrappers 直接从 Postgres 查询 Analytics Buckets。这使您能够将 Postgres 中的热数据与 Analytics Buckets 中的历史数据进行关联。

-- Create a foreign server for your Iceberg data
CREATE SERVER iceberg_server
FOREIGN DATA WRAPPER iceberg_wrapper
OPTIONS (
  aws_access_key_id 'your-access-key',
  aws_secret_access_key 'your-secret-key',
  region_name 'us-east-1'
);

-- Import tables from your analytics bucket
IMPORT FOREIGN SCHEMA "analytics"
FROM SERVER iceberg_server
INTO iceberg;

-- Query historical data
SELECT *
FROM iceberg.events
WHERE event_timestamp > '2024-01-01';

数据分层模式

一种常见的架构是 数据分层:将近期数据保存在 Postgres 中,将历史数据归档到 Analytics Buckets。

  1. 按时间在 Postgres 中对表进行分区,保留滚动窗口(例如最近 90 天)。
  2. 使用 Supabase ETL 将所有数据流式传输到 Analytics Buckets。
  3. 从 Postgres 中删除旧的分区。
  4. 从 Postgres 查询近期数据;从 Analytics Buckets 查询历史数据。

好处

  • 保持你的 Postgres 数据库小且快速。
  • 存储成本下降。
  • 分析查询在针对扫描优化的数据上运行。

兼容工具

Analytics Buckets 与任何支持 Iceberg REST Catalog API 的工具兼容:

  • PyIceberg
  • Apache Spark
  • DuckDB
  • Amazon Athena
  • Trino
  • Apache Flink
  • Snowflake(通过外部表)
  • BigQuery(通过 BigLake)

定价与可用性

Analytics Buckets 在私有 Alpha 阶段免费。将数据迁出该地区时,将收取标准出站费用。

如需请求访问,请填写表单于 。

开始使用

  1. 申请 Private Alpha 的访问权限。
  2. 在仪表盘中创建 Analytics Bucket。
  3. 使用 PyIceberg、Spark 或您选择的工具进行连接。
  4. 设置 ETL,自动从 Postgres 流式传输数据。

将事务性工作负载和分析性工作负载分离。保持 Postgres 的高速。以 S3 价格存储历史数据。使用任何工具进行查询。

Back to Blog

相关文章

阅读更多 »