COLUMN mask 子句

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime 12.2 及更高版本 check marked yes Unity Catalog

重要

此功能目前以公共预览版提供。

指定每当从表中获取行时应用于列的函数。 该列的所有未来查询将会收到对该列计算该函数(而不是该列的原始值)的结果。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以便决定是否编辑该值。

可以在以下情况下添加列掩码:

重要

从数据源提取每一行后,就会立即应用掩码。 所有表达式、谓词或排序将在屏蔽后应用。 例如,屏蔽列与另一个表中的另一列之间的联接会将屏蔽的值用于联接比较。

有关如何使用列掩码的详细信息,请参阅使用行筛选器和列掩码筛选敏感表数据

语法

MASK func_name [ USING COLUMNS ( other_column_name [, ...] ) ]

参数

  • func_name

    至少具有一个参数的标量 SQL UDF

    SQL UDF 的第一个参数与屏蔽列 1:1 映射。 掩码列的类型必须可强制转换为 SQL UDF 参数类型。 如果 func_name 需要更多参数,则参数必须由 USING COLUMNS 子句提供。

    函数的返回类型必须可转换为屏蔽列的数据类型。

  • other_column_name

    (可选)指定掩码列的表的其他要传递到 func_name 的列。 每个 other_column_name 必须可转换为 func_name 的相应参数。

    使用列掩码根据用户对 table_name 执行查询、column_identifier 的值和 other_column(可选)来选择性地匿名化 column_identifier 的值。

示例

你可以在使用行筛选器和列掩码筛选敏感表数据中找到更多示例。

-- Create a table with a masked column
> CREATE FUNCTION mask_ssn(ssn STRING) RETURN CASE WHEN is_member('HumanResourceDept') THEN ssn ELSE '***-**-****' END;
> CREATE TABLE persons(name STRING, ssn STRING MASK ssn);
> INSERT INTO persons('James', '123-45-6789';

-- As a non-member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  ***-**-****

-- As a member of 'HumanResourceDept'
> SELECT * FROM persons;
  James  123-45-6789