1
0

More than 1 year has passed since last update.

Databricksの行フィルターを試してみる

Posted at

結構心待ちにしていた機能です。

これまでもダイナミックビューで同様のことは実現できていましたが、テーブルに対するビューを定義するので若干取り回しが大変だったのですが、テーブルにフィルターをアタッチする形になるのでフィルターの再利用もしやすくなります。

こちらでは行フィルター(row filter)を試します。

準備

事前にDSというグループを作成しておき、ユーザーAのみを追加しておきます。

対象のテーブルはtargetとします。以下のようにpickup_zipなどの郵便番号が含まれているテーブルです。ちなみにこちらはNYのタクシーの乗降記録です。
Screenshot 2023-09-13 at 10.56.05.png

Sharedクラスターを作成して起動します。シングルユーザークラスターでは本機能は動作しません。

ユーザーAの作業

USE main.default;

行フィルターの関数を定義します。このフィルターは、テーブルにアクセスするユーザーがグループDSに所属している場合には前レコードを返却しますが、そうではない場合にはzipコードが10153のレコードのみを返却します。

CREATE FUNCTION zip_filter(zip STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('DS'), true, zip='10153');

カタログエクスプローラで関数を確認することができます。
Screenshot 2023-09-13 at 10.57.42.png

テーブルにフィルターを適用します。

ALTER TABLE target SET ROW FILTER zip_filter ON (pickup_zip);

なお、フィルター適用されているかどうかを確認するにはテーブルにDESCRIBE EXTENDEDを実行します。

DESCRIBE EXTENDED target;

Row filterにどのテーブルのどの列にどのフィルターが適用されているのかが表示されます。
Screenshot 2023-09-13 at 11.07.58.png

テーブルtargetにクエリーを発行するとすべてのレコードが返却されます。
Screenshot 2023-09-13 at 11.11.06.png

ユーザーBの作業

ユーザーBはグループDSには属していません。

SELECT * FROM target;

行フィルターが動作して、pickup_zip10153のレコードしか返却されなくなっています。
Screenshot 2023-09-13 at 10.56.05.png

次は列マスク(column mask)を試してみます。

Databricksクイックスタートガイド

Databricksクイックスタートガイド

Databricks無料トライアル

Databricks無料トライアル

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0