内容提要
Apache Iceberg 社区新增两项 REST Catalog 规范:读限制和目录标签。读限制允许目录将行、列过滤策略委托给受信引擎执行,适用于引擎直连目录场景;目录标签通过键值元数据在联邦目录间传递治理上下文(如 PII 标记),由消费方目录本地执行策略。两者分别解决委托执行与跨目录治理可移植性问题,是开放湖仓统一治理的重要进展。
延伸解读
读限制的适用边界与信任前提
读限制适用于引擎直连目录的场景,但要求引擎是受信任的。文章指出,用户控制运行时的Spark或DuckDB属于不可信引擎,因为用户可以执行任意代码或直接访问底层数据;而安全配置的Trino部署是受信任引擎的例子,因为它原生支持行过滤和列掩码。信任的建立不在协议内,需要管理员根据环境使用mTLS、OAuth等机制,客户端声明不足以建立信任。
策略表达能力的限制
读限制的初始规范定义了有限的词汇表:九种预定义的列投影操作和标准化的行过滤表达式(如比较或集合成员)。许多企业策略依赖子查询、查找表或自定义UDF,这些无法在词汇表中表达。这意味着只有当目录能将策略结果归约到标准词汇时,策略才能被表示,否则会丢失策略语义。因此,读限制更适合源目录策略简单的场景。
目录标签的语义与治理责任
目录标签通过键值元数据在联邦目录间传递治理上下文,如PII标记。但标签是不透明的键值对,标准未定义共享语义或稳定标识符,且标签的 lineage 不超出源目录。消费目录只收到解析后的键和值,不知道标签的意图是用于发现、访问控制还是成本归因。因此,标签使元数据可移植,但语义不可移植,企业需要共享约定或显式映射来一致解释标签。
三种治理模式的选型建议
文章对比了三种模式:集中式执行适用于不可信引擎,由目录通过安全过滤服务返回已授权数据;读限制适用于受信任引擎,目录将行和列限制委托给引擎执行;目录标签适用于异构系统间的联邦,消费目录使用本地身份和策略执行控制。选型取决于目标端:不可信引擎选集中式,受信任引擎选读限制,另一目录选目录标签作为开放策略交换的基础。
Q&A
Apache Iceberg 最近新增了哪两项 REST Catalog 规范?
读限制(read restrictions)和目录标签(catalog labels)。
读限制(read restrictions)主要解决什么问题?
读限制解决的是将策略执行委托给受信引擎的问题。当引擎直接访问目录时,目录可以评估策略并将行、列过滤限制返回给受信引擎,由引擎执行这些限制。
目录标签(catalog labels)是如何工作的?
目录标签允许目录通过 Open API 在表和列级别交换轻量级键值元数据。当消费方目录通过联邦加载生产方目录的表时,生产方目录返回标签,消费方目录将标签映射到自己的分类或标签模型,然后使用本地身份和策略评估访问并在自己的运行时中执行控制。
读限制和目录标签分别适用于什么场景?
读限制适用于引擎直连目录且源目录策略简单、受信引擎可以执行结果的场景;目录标签适用于异构系统之间联邦、消费方目录有自己的治理系统并需要可重用上下文的场景。
读限制规范目前有哪些局限性?
读限制的初始规范定义了有限的词汇表:九种预定义的列投影操作和标准化的行过滤表达式。许多企业策略依赖子查询、查找表或自定义 UDF,无法用该词汇表表达,因此策略只有在目录能将其结果归约到标准词汇表时才能被表示。此外,规范定义了受信引擎必须执行什么,但没有定义目录如何建立信任,信任机制(如 mTLS、OAuth)仍在协议之外。
目录标签在语义和血缘方面有什么限制?
目录标签是不透明的键值对,标准没有定义共享语义或稳定标识符,标签的血缘不会超出源目录。消费方目录只收到解析后的键和值,不知道标签是用于发现、访问控制、成本归属还是其他目的。因此标签使元数据可移植,但含义不可移植,企业仍需共享约定或显式映射来一致地解释标签。