閱讀英文

共用方式為

专用计算上的精细访问控制(以前是单用户计算)

本文介绍数据筛选功能,该功能可对在专用计算上运行的查询进行精细访问控制。 专用计算是指配置有 专用 访问模式的全用途或作业计算。 请参阅访问模式

数据筛选功能使用无服务器计算自动运行。

为什么专用计算上的某些查询需要数据筛选?

Unity Catalog 可让你使用以下功能在列和行级别控制对表格数据的访问(也称为精细访问控制):

查询从引用的表或应用筛选器和掩码的查询表中排除数据的视图时,可以使用以下任何计算资源,但不受限制:

  • SQL 仓库
  • 标准计算(以前共享计算)

但是,如果使用专用计算来运行此类查询,则计算和工作区必须满足特定要求:

  • 专用计算资源必须位于 Databricks Runtime 15.4 LTS 或更高版本上。

  • 必须为作业、笔记本和DLT启用无服务器计算功能的工作区。

    若要确认你的工作区区域是否支持无服务器计算,请参阅区域可用性受限的功能

如果专用计算资源和工作区满足这些要求,则每当查询使用精细访问控制的视图或表时,都会自动运行数据筛选。

对具体化视图、流式表和标准视图的支持

除了动态视图、行筛选器和列掩码外,数据筛选还能够在不支持 Databricks Runtime 15.3 及以下版本专用计算的以下视图和表上进行查询:

在运行 Databricks Runtime 15.3 及更低级别的专用计算中,对视图运行查询的用户必须对视图引用的表和视图具有 SELECT ,这意味着无法使用视图提供精细的访问控制。 在支持数据筛选的 Databricks Runtime 15.4 上,查询视图的用户不需要访问引用的表和视图。

数据筛选如何适用于专用计算?

每当查询访问以下数据库对象时,专用计算资源都会将查询传递给无服务器计算来执行数据筛选:

  • 基于用户没有 SELECT 权限的表生成的视图
  • 动态视图
  • 定义了行筛选器或列掩码的表
  • 具体化视图和流式表

在下图中,用户对 SELECTtable_1view_2(应用了行筛选器)具有 table_w_rls 权限。 用户对 SELECT 引用的 table_2 没有 view_2 权限。

显示数据筛选工作原理的示意图

table_1 上的查询完全由专用计算资源处理,因为不需要筛选。 对 view_2table_w_rls 的查询需要执行数据筛选才能返回用户有权访问的数据。 这些查询由无服务器计算上的数据筛选功能进行处理。

筛选的数据使用工作区内部云存储上的临时文件在无服务器计算和专用计算之间传输。

会产生哪些成本?

客户需要为用于执行数据筛选操作的无服务器计算资源付费。 有关定价信息,请参阅平台层和加载项

可以查询系统计费使用情况表,以查看已收取的费用。 例如,以下查询按用户细分计算成本:

SELECT usage_date,
sku_name,
 identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by FGAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2024-08-01' AND '2024-09-01'
 AND billing_origin_product = 'FINE_GRAINED_ACCESS_CONTROL'
GROUP BY 1, 2, 3 ORDER BY 1;

查看启用数据筛选时的查询性能

专用计算的 Spark UI 显示可用于了解查询性能的指标。 对于你针对计算资源运行的每个查询,“SQL/数据帧”选项卡会显示查询的图形表示形式。 如果查询涉及数据筛选,则 UI 会在图形底部显示“RemoteSparkConnectScan”操作程序节点。 该节点显示了可用于调查查询性能的指标。 请参阅在 Apache Spark UI 中查看计算信息

显示 RemoteSparkConnectScan 节点的 SparkUI

展开“RemoteSparkConnectScan”操作程序节点,查看可解决以下问题的指标

  • 数据筛选花费了多长时间? 查看“总远程执行时间”。
  • 数据筛选后还剩下多少行? 查看“行数输出”。
  • 数据筛选后返回了多少数据(以字节为单位)? 查看“行数输出大小”。
  • 有多少数据文件已经过分区修剪,因此不必从存储中读取? 查看“已删除的文件”和“已删除文件的大小”。
  • 有多少数据文件无法修剪,因此必须从存储中读取? 查看“已读取的文件”和“已读取文件的大小”。
  • 在必须读取的文件中,有多少个文件已在缓存中? 查看“缓存命中大小”和“缓存未命中大小”。

限制

  • 不支持对应用了行筛选器或列掩码的表执行写入或刷新表操作。

    具体而言,不支持 INSERT,DELETEUPDATEREFRESH TABLEMERGE 等 DML 操作。 只能从这些表中读取 (SELECT)。

  • 在 Databricks Runtime 16.2 及更低版本中,在调用数据筛选时,默认会阻止自联接,因为这些查询可能会返回同一远程表的不同快照。 要启用这些查询,可以在运行这些命令的计算设备上将spark.databricks.remoteFiltering.blockSelfJoins设置为false

    在 Databricks Runtime 16.3 及更高版本中,快照在专用和无服务器计算资源之间自动同步。 正因为此同步,使用数据筛选功能的自联接查询会返回相同的快照,并默认启用。 例外情况是具体化视图,以及使用 Delta Sharing 共享的任何视图、具体化视图和流式处理表。 对于这些对象,默认情况下会阻止自联接,但可以通过在运行这些命令的计算上设置为 spark.databricks.remoteFiltering.blockSelfJoins false 来启用这些查询。

    如果为具体化视图以及任何视图、具体化视图和流式处理表启用自联接查询,则必须确保没有对要联接的对象的并发写入。

  • Docker 镜像中不支持。

  • 如果在 2024 年 11 月之前使用防火墙部署工作区,则必须打开端口 8443 和 8444,才能在专用计算上启用精细访问控制。 请参阅 网络安全组规则