シングル ユーザー コンピューティングでのきめ細かなアクセス制御

この記事では、単一ユーザー コンピューティング (汎用または単一ユーザー アクセス モードで構成されたジョブ コンピューティング) で実行されるクエリに対するきめ細かいアクセス制御を可能にするデータ フィルター機能について説明します。 「アクセス モード」を参照してください。

このデータ フィルター処理は、サーバーレス コンピューティングを使用してバックグラウンドで実行されます。

シングル ユーザー コンピューティングに対する一部のクエリでデータ フィルター処理が必要な理由

Unity カタログでは、次の機能を使用して、列と行レベル (詳細なアクセス制御とも呼ばれます) で表形式データへのアクセスを制御できます。

ユーザーが参照されるテーブルからデータを除外したり、フィルターやマスクを適用しているテーブルにクエリを行ったりする場合、次のコンピューティング リソースを制限なく利用できます。

  • SQL ウェアハウス
  • 共有コンピューティング

ただし、シングル ユーザー コンピューティングを使用してこのようなクエリを実行する場合は、コンピューティングとワークスペースが特定の要件を満たしている必要があります。

単一ユーザーのコンピューティング リソースとワークスペースがこれらの要件を満たしている場合、きめ細かなアクセス制御を使用するビューまたはテーブルに対してクエリを実行するたびに、データ フィルター処理が自動的に実行されます。

具体化されたビュー、ストリーミング テーブル、標準ビューのサポート

動的ビュー、行フィルター、列マスクに加えて、データ フィルターを使用すると、Databricks Runtime 15.3 以下を実行している単一ユーザー コンピューティングでサポートされていない次のビューとテーブルに対するクエリも有効になります。

  • 標準ビュー

    Databricks Runtime 15.3 以下を実行するシングル ユーザー コンピューティングでは、ビューでクエリを実行するユーザーは、ビューによって参照されるテーブルとビューを持っている SELECT 必要があります。つまり、ビューを使用してきめ細かいアクセス制御を提供することはできません。 Databricks Runtime 15.4 とデータ フィルター処理では、ビューでクエリを実行するユーザーは、参照先のテーブルとビューへのアクセス許可を必要としません。

  • ストリーミング テーブル

  • 具体化されたビュー

シングル ユーザー コンピューティングでのデータ フィルター処理のしくみ

クエリが次のデータベース オブジェクトにアクセスするたびに、単一ユーザーのコンピューティング リソースがクエリをサーバーレス コンピューティングに渡してデータ フィルター処理を実行します。

  • ユーザーが SELECT 権限を持っていないテーブル上に構築されたビュー
  • 動的ビュー
  • 行フィルターまたは列マスクが定義されているテーブル
  • 具体化されたビューとストリーミング テーブル

次の図では、ユーザーは行フィルターが適用された table_1view_2table_w_rlsSELECT 権限を持っています。 ユーザーは、view_2 によって参照される table_2には SELECT 権限を持っていません。

データ フィルター処理のしくみを示す図

フィルター処理は必要ないため、クエリ table_1 は単一ユーザーのコンピューティング リソースによって完全に処理されます。 view_2 および table_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) のみ可能です。

  • データ フィルターが呼び出されると、自己結合は既定でブロックされますが、これらのコマンドを実行するコンピューティングで spark.databricks.remoteFiltering.blockSelfJoins を false に設定することで許可できます。

    1 人のユーザー コンピューティング リソースで自己結合を有効にする前に、データ フィルター機能によって処理される自己結合クエリが同じリモート テーブルのさまざまなスナップショットを返す可能性があることに注意してください。