发布时间:2026/9/7 17:50:31
Supabase Iceberg Wrapper:用 SQL 直接在 Postgres 中查询 Apache Iceberg 数据 Supabase Iceberg Wrapper:用 SQL 直接在 Postgres 中查询 Apache Iceberg 数据【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase本文围绕 Supabase Studio 中的 Iceberg Wrapper 集成文档 overview.md 展开,讲清楚三件事:Iceberg 表格式为什么适合大规模分析场景、Iceberg Wrapper 作为 Postgres 外部数据包装器(FDW)如何把 Iceberg 表“接”进数据库,以及 Supabase 在 Studio 中围绕该集成提供的完整落地路径——从创建 FDW、管理 namespace 与表,到将 Iceberg namespace 导入为本地 schema,最终让分析表直接出现在 SQL Editor 的表列表中。什么是 Iceberg Wrapper官方文档对它的定义很凝练:Apache Iceberg 是一种面向海量分析型数据集的开放表格式,支持 schema 演化、隐藏分区、时间旅行(time travel)和版本回滚,可以用 SQL 查询处理大规模数据。Iceberg Wrapper 是一个外部数据包装器(FDW),让你直接在 Postgres 数据库内查询 Apache Iceberg 表中的数据。该集成让你用标准 SQL 查询 Iceberg 表。将 Iceberg 连接到你的 Supabase 项目后,可以把 Postgres 的能力与 Iceberg 管理大规模分析负载的能力结合起来。换句话说,Iceberg 负责“存”——以开放格式把海量分析数据以数据文件的形式存放在对象存储(S3 兼容存储)上;Iceberg Wrapper 负责“查”——在 Postgres 侧注册一个 FDW 和一个 external server,让分析数据以外部表的形式出现在数据库元数据中。业务库(OLTP)和分析库(OLAP)不必物理合并,一条JOIN就能跨两边取数,而查询本身仍走标准 SQL。在 Studio 的代码中,该集成对应一个固定条目:在 Wrappers.constants.ts 中,iceberg_wrapper声明如下:handlerName为iceberg_fdw_handler,validatorName为iceberg_fdw_validator(见 WRAPPER_HANDLERS);底层数据库扩展名为icebergFdw;minimumExtensionVersion为0.5.3——从源码结构看,启用该集成要求项目的wrappers扩展版本不低于 0.5.3。useIcebergWrapperExtension 正是基于“wrappers扩展是否安装 版本是否达标”给出installed/needs-upgrade/not-installed三种状态,作为 UI 的前置校验。集成配置参数:Studio 定义的 Server Options与 Stripe、Slack 等 API 类 wrapper 不同,Iceberg wrapper 的 server options 全部指向“对象存储 目录(catalog)”这条链路。Wrappers.constants.ts 中定义了如下字段:参数名标签加密存储说明vault_aws_access_key_idAWS Access Key ID是访问 S3 兼容存储的 Access Key,写入 Vault 加密保存vault_aws_secret_access_keyAWS Secret Access Key是对应的 Secret Key,加密保存region_nameRegion Name否存储区域vault_aws_s3table_bucket_arnAWS S3 Table Bucket ARN是使用 AWS S3 Tables 时的 bucket ARN,加密保存vault_tokenToken是目录服务的认证 Token(加密保存)warehouseWarehouse否对应 Supabase 的分析桶(analytic bucket)名称s3.endpointS3 Endpoint否S3 数据端点catalog_uriCatalog URI否Iceberg 目录服务 REST 端点源码中有一处值得注意的设计注释:这些字段在配置层面“故意不标记为必填”,因为必填约束由创建 Iceberg wrapper 的专用表单负责执行,而在“编辑 wrapper”弹窗中所有字段都可选展示、便于只改部分项。此外,sourceSchemaOption被命名为Namespace,并带有描述“It should match the namespace of the Iceberg catalog.”——这体现了 Iceberg 的catalog → namespace → table三级结构与 Postgresschema → table二级的映射关系。创建流程:一步命令完成“凭证 FDW Server”Studio 中的创建动作由 useIcebergWrapperCreateMutation 封装,其内部是严格的三步编排:创建 S3 访问密钥:调用useS3AccessKeyCreateMutation为分析桶生成一对 S3 access/secret key(描述名为getAnalyticsBucketS3KeyName(bucketName)生成的桶专属名称),而不是让用户手动粘贴长期密钥;拼装 FDW 参数:wrapper_name取自getAnalyticsBucketFDWName(bucketName),server_name固定为${wrapperName}_server;vault_aws_access_key_id/vault_aws_secret_access_key填入第 1 步生成的密钥;vault_token优先取项目的 secret key,其次 service key(读取密钥需要SECRETS_READ权限);warehouse即分析桶名;计算端点:s3.endpoint和catalog_uri由 StorageSettings.utils.ts 基于项目的protocol与可选的自定义endpoint派生:getConnectionURL把路径设为/storage/v1/s3,作为 S3 数据端点;getCatalogURI把路径设为/storage/v1/iceberg,作为 Iceberg 目录的 REST 端点;未配置自定义 endpoint 时,基础地址回退为https://{projectRef}.storage.supabase.co。从源码结构看,这意味着 Supabase Storage 本身同时暴露 S3 兼容端点和 Iceberg REST Catalog 端点,Iceberg 表的数据文件与目录元数据都托管在同一存储桶体系中。以mode: skip提交:useFDWCreateMutation的mode参数取skip(fdw-create-mutation.ts)。注释明确:skip 模式表示跳过“把 schema/表绑定到外部数据”的最后一步——也就是说,创建 FDW 后并不会立刻看到任何表,绑定发生在后面的“导入外部 schema”环节(见下文)。整个创建 SQL 由supabase/pg-meta的getCreateFDWSql生成,并用事务包裹执行。对应到数据库层面,这一流程等价于:-- 1. 创建外部服务器(参数与上方 formState 一致) CREATE SERVER {wrapper_name}_server FOREIGN DATA WRAPPER {wrapper_name} OPTIONS ( vault_aws_access_key_id ..., vault_aws_secret_access_key ..., vault_token ..., warehouse {bucketName}, s3.endpoint https://.../storage/v1/s3, catalog_uri https://.../storage/v1/iceberg ); -- 2. (绑定阶段) 把 Iceberg namespace 导入为本地 schema IMPORT FOREIGN SCHEMA {namespace} FROM SERVER {wrapper_name}_server INTO {target_schema};管理 Iceberg 目录:Namespace 与表的 CRUDFDW 建好之后,Studio 在 Storage 页的分析桶详情里提供了一套目录管理能力,对应一组 REST 调用,全部挂在/platform/storage/{ref}/analytics-buckets/{id}路径下:列出 namespace:iceberg-namespaces-query.ts 请求.../namespaces,返回桶目录下的所有 namespace 名称列表;列出某 namespace 下的表:iceberg-namespace-tables-query.ts 请求.../namespaces/{namespace}/tables,返回表名列表;创建 namespace:iceberg-namespace-create-mutation.ts POST.../namespaces,请求体为{ namespace };遇到 409 会提示“A namespace named ... already exists in the catalog”,并对icebergNamespaces查询键做缓存失效;删除 namespace / 表:iceberg-namespace-delete-mutation.ts 与 iceberg-namespace-table-delete-mutation.ts 分别处理两个层级的删除;创建表:iceberg-namespace-table-create-mutation.ts POST.../namespaces/{namespace}/tables,请求体为{ name, fields },其中fields的类型直接取自 OpenAPI 的CreateNamespaceTableBody,即按列名 类型声明表结构。UI 侧的对应组件位于 AnalyticsBuckets 目录:NamespaceWithTables展示 namespace/表的层级浏览与行数据,CreateTable/CreateTableSheet负责可视化建表,BucketCallouts与SimpleConfigurationDetails展示桶的配置状态。导入外部 Schema:让 Iceberg 表进入 SQL Editor真正让“Iceberg 表在 Postgres 里可查”这一步,发生在 ImportForeignSchemaDialog 中。其提交流程为:表单校验目标 schema 名(targetSchema)必填且不与现有 schema 重名,默认值为fdw_analytics_{namespace};源字段sourceNamespace默认填入当前 namespace;createSchema先创建目标本地 schema;importForeignSchema调用IMPORT FOREIGN SCHEMA,把指定 Iceberg namespace 下的表导入为该 server 的外部表,落入目标 schema;通过getFDWs找到server_name匹配的 wrapper,再用getDecryptedParameters读出当前 server options 并更新 FDW,把supabase_target_schema指向刚创建的 schema,成功后提示“Successfully connected “{bucket}” to the database”。supabase_target_schema这个隐藏只读选项在 Wrappers.constants.ts 中统一定义(hidden: true, readOnly: true),是所有 Supabase wrapper 的公共机制:它决定了外部表落在哪个 schema,而 Iceberg wrapper 同时声明了canTargetSchema: true,允许用户在导入对话框中自行指定。完成导入后,Iceberg namespace 中的每张表都会以外部表的形式出现在 Studio 的数据库视图里,即可像普通表一样在 SQL Editor 中执行SELECT、JOIN,与 Postgres 原生表、RLS、视图体系无缝协作。小结与适用前提回到集成文档的三句话核心,配合源码可以得出完整的落地认知:概念层:Iceberg 提供 schema 演化、隐藏分区、时间旅行、版本回滚等分析型表格式能力;Iceberg Wrapper 以 FDW 形式让 Postgres 用标准 SQL 直查 Iceberg 表(overview.md);配置层:需要wrappers扩展 ≥ 0.5.3;server options 覆盖 AWS 凭证(经 Vault 加密)、S3 端点、Iceberg REST Catalog 端点、warehouse 名称等 8 个参数,Supabase 托管场景下端点由项目 ref 自动派生;操作层:创建 FDW(mode 为 skip)→ 管理 namespace/表 →IMPORT FOREIGN SCHEMA绑定到本地 schema,三步完成“连接 Iceberg 到 Supabase 项目”,之后分析负载即可与 Postgres 事务数据在同一个 SQL 世界内联合查询。需要说明的限制:本文所有参数、端点与流程均以当前仓库apps/studio下的实现为准,针对 Supabase 托管项目的 Storage 体系(自带 S3 兼容端点与 Iceberg REST Catalog 端点);若自建部署或更换为第三方 Iceberg Catalog(如 AWS S3 Tables),catalog_uri、vault_aws_s3table_bucket_arn等选项的取值需按实际环境配置。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/9/7 17:50:31

单片机毕设选题推荐:基于 STM32 或 51 单片机的 DHT11 与 MQ-2 空气质量监测装置设计 基于 STM32 或 51 单片机的室内粉尘、温湿度、烟雾综合监测系统(024506)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/7 17:50:31

单片机毕设选题推荐:基于 STM32/51 单片机的光敏采集与光照补光智能控制系统 基于 STM32/51 单片机的多路继电器环境执行驱动与蓝牙终端(024406)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/7 17:50:31

【计算机毕业设计单片机案例】基于 STM32 或 51 单片机的双工作模式垃圾桶检测系统设计 基于 STM32 或 51 单片机的状态可视化智能垃圾桶设计与实现(025006)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/7 18:40:35

CMSIS-DSP源码深度拆解:从FFT优化到工业固件落地实践

做嵌入式这些年,凡是跟电机控制、音频处理、振动分析、电能质量检测沾边的活,基本都绕不开 CMSIS-DSP 。早几年我也只把它当黑盒调用——FOC电流环里查一下PID,跑FFT时填一下结构体,完事。直到有一次要在没有硬件FPU的Cortex-M0…

2026/9/7 0:47:43

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/7 0:14:19

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/7 0:14:17

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/7 0:03:36

基于YOLOv8和PyQt5的麦穗稻穗检测识别系统设计与实现

这次我们来看一个把目标检测算法和桌面端工具结合得很典型的项目:基于 YOLOv8 PyQt5 的麦穗稻穗检测识别系统。这个项目本身不是新概念,但它的价值在于落地形态很完整。YOLOv8 负责核心的麦穗稻穗目标检测,PyQt5 负责提供可视化的桌面交互界…

2026/9/7 0:03:36

UL 1642锂电池安全标准全解析:测试项目、认证流程与避坑指南

简介:UL 1642是锂电池安全领域的重要规范,本中文版资源适合锂电池制造商、检测机构工程师及产品认证相关人员阅读,用于理解电池在设计与制造层面的安全要求、测试方法与合规要点。资源共1个PDF文件,压缩包大小834KB,便…

2026/9/7 0:03:36

BS EN 13814-1-2019游乐设施安全标准:设计与制造核心要点解析

简介:BS EN 13814-1:2019是英国采纳欧洲标准EN 13814-1:2019的正式版本,由BSI标准出版,重点规定游乐设施和游乐设备在设计与制造环节的安全准则,与BS EN 13814-2:2019、BS EN 13814-3:2019共同取代旧版BS EN 13814:2004。该标准面…

2026/9/7 16:23:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/6 19:33:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…