带有 Iceberg 支持的 Supabase 分析存储桶
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
今天,我们正式推出Supabase Analytics Buckets 的私有 alpha 版本。这是一种新型的存储桶,专为分析而优化,并内置了对Apache Iceberg表格式的支持。
分析存储桶已集成到 Supabase Studio 中,支持表级视图而不是原始文件,并且可以使用新的Supabase Iceberg Wrapper进行查询,该程序也即将推出 alpha 版本。
为什么是冰山
Apache Iceberg 是一种高性能的开放表格式,适用于对象存储上的大规模分析。它将数据库的性能和功能与平面文件的灵活性完美结合。
我们选择 Iceberg 是因为它拥有无限深的数据模型(仅追加、不可变历史记录)、内置的快照和版本控制(时间旅行)以及对模式演化的支持。Iceberg 也是一个被整个生态系统广泛支持的开放标准。Supabase 致力于开放标准和可移植性,而 Iceberg 正好符合这一目标,它使用户能够自由地导入和导出数据,而无需受限于专有格式。
设置分析存储桶
项目一旦被纳入 Alpha 版本发布计划,即可通过 Studio 和 API 创建分析存储桶。要创建分析存储桶,请在 Studio 中访问Storage> 。New bucket
分析存储桶与标准 Supabase 存储桶是不同的存储桶类型。两者之间不能混用文件类型。
它们存储在一个新的系统表中:storage.buckets_iceberg。这些存储桶不包含在storage.buckets表中,其中的对象也不会显示在表中storage.objects。但是,listBuckets()为了与 Studio 和 API 用户保持一致,该端点会返回标准存储桶和分析存储桶的合并列表。
创建存储桶后,我们会看到连接详细信息。复制 `<namespace>` WAREHOUSE、 `<namespace> VAULT_TOKEN` 和CATALOG_URI`<table>` 的值,并使用您喜欢的方法创建 Iceberg 命名空间和表。以下示例使用 pyiceberg 创建命名空间market和表prices:
import datetime
import pyarrow as pa
from pyiceberg.catalog.rest import RestCatalog
from pyiceberg.exceptions import NamespaceAlreadyExistsError, TableAlreadyExistsError
# Define catalog connection details (replace variables)
WAREHOUSE= ...
VAULT_TOKEN = ...
CATALOG_URI= ...
# Connect to Supabase Data Catalog
catalog = RestCatalog(
name="catalog",
warehouse=WAREHOUSE,
uri=CATALOG_URI,
token=VAULT_TOKEN,
)
# Schema and Table Names
namespace_name = "market"
table_name = "prices"
# Create default namespace
catalog.create_namespace(namespace_name)
df = pa.table({
"tenant_id": pa.array([], type=pa.string()),
"store_id": pa.array([], type=pa.string()),
"item_id": pa.array([], type=pa.string()),
"price": pa.array([], type=pa.float64()),
"timestamp": pa.array([], type=pa.int64()),
})
# Create an Iceberg table
table = catalog.create_table(
(namespace_name, table_name),
schema=df.schema,
)
回到工作室,我们可以看到新创建的命名空间。0/1 connected tables
点击Connect并选择一个Target Schema映射表,将 Iceberg 表映射到该映射表中。建议为您的表创建一个独立的模式。请勿使用public默认模式,因为这会将您的表暴露给项目的 REST API。
查询分析存储桶
在 Supabase Studio 中查看分析存储桶会将您重定向到表编辑器。系统不会显示原始 Parquet 文件,而是显示一个由Supabase Iceberg Wrapper提供支持的表浏览器。
该封装器通过 SQL 接口公开 Iceberg 表,因此您可以使用 Studio 或任何 SQL IDE 来检查和查询数据。这使得分析数据感觉就像是 Supabase 项目的原生组成部分。
在这种情况下,访问数据的相应 SQL 查询语句为:
select
*
from market_analytics.prices;
写入分析存储桶
写入功能仍在开发中。我们正在积极构建Supabase ETL,它将允许您直接从 Postgres 写入 Iceberg 支持的存储桶。一旦上游iceberg-rust 客户端库添加了写入支持,我们也会立即为 Supabase Iceberg Wrapper 添加写入功能。这将完成写入 → 存储 → 查询的整个工作流程,所有操作都将在 Supabase 内部完成。
一旦上线,Iceberg 就能通过将记录移入分析存储桶,实现无限量的 Postgres 存储空间,所有操作均采用开放格式。此外,Iceberg 还让我们能够免费进行时间旅行。
Alpha 版本发布限制
分析存储桶功能目前处于私有 alpha 测试阶段,并存在以下限制:
- 每个项目两个分析桶
- 每个存储桶最多支持五个命名空间。
- 每个命名空间十个表
- 价格将在几周后公布。
- 您不能将标准对象存储在分析存储桶中。
路线图及后续计划
此次发布标志着 Supabase 全面迈向分析功能的第一步。在接下来的几个月里,我们将推出 SQL 目录支持,以便您可以直接从数据库探索 Iceberg 表元数据。Studio 也将获得更深入的集成,支持模式检查、列级筛选和时间回溯查询。我们的目标是将 Supabase 打造成功能齐全的 HTAP 后端,让您能够无缝地写入、存储和查询分析数据。
试试看
加入候补名单,即可提前获得访问权限,并开始使用 Supabase 中海量、可进行时间旅行的分析数据。
发布周 15
主舞台
第一天 - JWT 签名密钥简介
第二天 - 支持 Iceberg 的 Supabase 分析存储桶简介
构建阶段
文章来源:https://dev.to/supabase/supabase-analytics-buckets-with-iceberg-support-51a6




