列
適用対象:
Databricks SQL
Databricks Runtime 12.2 LTS 以降
Unity Catalog のみ
テーブルから行が取得されるたびに列に適用される関数を指定します。 その列の後続のすべてのクエリは、列の元の値の代わりに、その列に対してその関数を評価した結果を受け取ります。 これは、値を編集するかどうかを決定するために関数で呼び出し元ユーザーの ID またはグループ メンバーシップを検査できる、きめ細かいアクセス制御の目的に役立ちます。
列マスクは、次の場合に追加できます。
- CREATE TABLE を使ってテーブルを作成します。
- ALTER TABLE … ADD COLUMN を使用して列をテーブルに追加する。
- ALTER TABLE … ALTER COLUMN を使用して列を変更する。
重要
マスクは、データ ソースから各行がフェッチされるとすぐに適用されます。 式、述語、または順序は、マスクの後に適用されます。 たとえば、マスクされた列を別のテーブルにある別の列に結合すると、結合の比較にはマスクされた値が使われます。
列マスクの使用方法の詳細については、 Azure Databricks テーブルを参照してください。
構文
MASK func_name [ USING COLUMNS ( other_column_name | constant_literal [, ...] ) ]
パラメーター
-
少なくとも 1 つのパラメーターを持つスカラー SQL UDF。
SQL UDF の最初のパラメーターは、マスクされた列と 1:1 でマップされます。 マスクされた列の型は、SQL UDF パラメーター型にキャスト可能である必要があります。
func_nameに追加のパラメーターが必要な場合は、USING COLUMNS句によって引数を指定する必要があります。関数の戻り値の型は、マスクされた列のデータ型にキャスト可能である必要があります。
-
必要に応じて、
func_nameに渡すマスクされた列のテーブルの追加の列を指定します。 各other_column_nameは、func_nameの対応するパラメーターにキャスト可能である必要があります。列マスクを使って、
column_identifierに対してクエリを実行しているユーザー、table_nameの値、省略可能なcolumn_identifierに基づいて、other_columnの値を選択的に匿名化します。 constant_literal
関数パラメーターと一致する型の定数パラメーターを指定します。 サポートされている型は、
STRING、数値 (INTEGER、FLOAT,DOUBLE、DECIMAL…)、BOOLEAN、INTERVAL、NULLです。
例
その他の例については、 Azure Databricks テーブルを参照してください。
-- 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 mask_ssn);
> INSERT INTO persons VALUES('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
-- Create a masking function with multiple parameters. When applied first parameter will be the column that masking function applies to
> CREATE FUNCTION mask_pii_regional(value STRING, region STRING)
RETURN IF(is_account_group_member(region || '_HumanResourceDept'), value, 'REDACTED');
-- Create a table with a masked column. Masking function first parameter will be the column that is masked.
-- The rest of the parameters should be specified in `USING COLUMNS (<columnList>)` clause
> CREATE TABLE persons(name STRING, address STRING MASK mask_pii_regional USING COLUMNS (region), region STRING);
> INSERT INTO persons('James', '160 Spear St, San Francisco', 'US')
-- As a non-member of 'US_HumanResourceDept'
> SELECT * FROM persons;
James | REDACTED | US
-- As a member of 'US_HumanResourceDept'
> SELECT * FROM persons;
James | 160 Spear St, San Francisco | US