发布于 2026-01-06 6 阅读
0

Supabase Analytics Buckets with Iceberg Support DEV's Worldwide Show and Tell Challenge Presented by Mux: Pitch Your Projects!

带有 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,
)
Enter fullscreen mode Exit fullscreen mode

回到工作室,我们可以看到新创建的命名空间。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;

Enter fullscreen mode Exit fullscreen mode

写入分析存储桶

写入功能仍在开发中。我们正在积极构建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