介绍 Analytics Buckets
Source: Dev.to

概览
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 来创建分析存储桶。
使用仪表板
- 在 Supabase 仪表板中进入 Storage。
- 点击 Create Bucket。
- 为存储桶输入名称。
- 将存储桶类型选择为 Analytics Bucket。
- 点击 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 需要使用两项服务进行身份验证:
- Iceberg REST Catalog – 管理表的元数据(模式、分区、快照)。
- 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。
- 按时间在 Postgres 中对表进行分区,保留滚动窗口(例如最近 90 天)。
- 使用 Supabase ETL 将所有数据流式传输到 Analytics Buckets。
- 从 Postgres 中删除旧的分区。
- 从 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 阶段免费。将数据迁出该地区时,将收取标准出站费用。
如需请求访问,请填写表单于 。
开始使用
- 申请 Private Alpha 的访问权限。
- 在仪表盘中创建 Analytics Bucket。
- 使用 PyIceberg、Spark 或您选择的工具进行连接。
- 设置 ETL,自动从 Postgres 流式传输数据。
将事务性工作负载和分析性工作负载分离。保持 Postgres 的高速。以 S3 价格存储历史数据。使用任何工具进行查询。