ユーザーが見ることができる行を制限する
行フィルタは、ユーザーまたはグループがテーブルをクエリしたときに見ることができる行を制限します。テーブルを複製することなく
目的
行フィルタは、特定のユーザーまたはグループがテーブルのどの行を見ることができるかを決定します。テーブルは1つのままです:同じ名前、同じ列、データの1つのコピーです。そのテーブルをクエリする2人は異なる結果を得ることがあります。それぞれが独自のフィルタを持っているからです。
「マリーはcountry = 'France'の行だけを見ることができる」というフィルタは、マリーがそのテーブルをクエリしたときに、フランスの行が返ってきて、それ以外は単に存在しません。彼女はエラーや警告、または行が隠されたことを知らせる通知を受け取りません:テーブルは彼女にとって小さなテーブルのように見えます。彼女が実行するカウント、集計、およびジョインは、彼女が見ることができる行のみに基づいて計算されます。他の人のビューは変わりません:そのテーブルにフィルタがない同僚は、依然としてすべてを見ることができます。
1つのフィルタは1つのテーブルをカバーし、あなたがそれを割り当てるユーザーとグループに適用されます。それらはLakehouse Managerの行フィルタセクションにあり、プロジェクト内のすべてのフィルタをリストします。
行フィルタは、Trinoクエリパスで強制されます。これはAnalytics Managerのクエリとダッシュボード、およびTrino消費者が使用します。同じテーブルを別の方法で読む人はフィルタリングされず、すべての行を見ることができます:PySparkまたはPyIcebergを使用するノートブック、または直接カタログとオブジェクトストレージへのアクセスです。
行フィルタは、SQLを通じてデータが消費される方法に対する制御であり、基盤となるストレージへのアクセスを制限する代替手段ではありません。テーブルへのアクセスを本当に制限する必要がある人は、そのテーブルの直接ストレージ資格情報を保持してはなりません。テーブルをフィルタリングする前に、ノートブックやETLを実行するチームに伝えてください。誰も自分のパスに存在しない保護を想定しないようにしてください。
指示
行フィルタを作成する
Lakehouse Manager の Row filters セクションに移動し、+ New filter をクリックします。モーダルには2つのステップがあります:フィルタ自体、そしてそのフィルタが適用される人々です。
ステップ1では、3つの情報を入力します:
- フィルタ名:リストを意図に沿って読めるようにするための名前
- 対象テーブル:データセットからテーブルを選択
- フィルタ条件:この条件に一致しない行は、割り当てられたユーザーやグループには表示されません
条件を記述する方法は2つあります:ビルダーモード(デフォルト)と SQLモード です。
ビルダーモードで条件を構築する
ビルダーモードはシンプルなモードで、特定の要件を満たすために必要な場合を除き、このモードを使用します。ドロップダウンから列を選択(その型は名前の横に表示されます)、演算子を選択し、値を入力します。生成されたSQL は、値が入力されるとすぐに条件の下に表示され、実際に保存する条件を常に確認できます。
2行目の条件を追加するには、+ Add condition をクリックします。2つの条件からは、それらを結合する方法を選択できます:Match ALL conditions (AND) または Match ANY condition (OR) です。その選択肢はフィルタ内のすべての条件に適用されるため、ビルダーモードでは1つのANDグループまたは1つのORグループを提供し、2つの混合は提供しません。両方の条件が必要な場合や、その他のネストが必要な場合は、SQLモードで行います。
使用可能な演算子は、列の型によって異なります:
空の値 には独自の演算子があります。空の値と列を比較して空行を見つけることはできず、プラットフォームは静かに何も一致しないフィルタを保存するのではなく、その旨をお知らせします。Is empty と is not empty はテーブルを正確に分割します:その行数は常に合計に達します。
値は列に対して書き込みながらチェックされます。 日付列を 01/02/2024 と比較すると、その列が必要とするフォーマットがすぐに通知されます。フィルタを保存してから、制限された人が実行するすべてのクエリを壊すのではなく、日付は 2024-01-01 が必要で、タイムスタンプは 2024-01-01 10:30:00 が必要で、時刻は 09:30:00 が必要です。タイムゾーンを持つ値は、静かにシフトされるのではなく、拒否されます:列が実際に保持しているローカルの時計値を送信します。
条件には次の制限があります:
SQLモードで条件を記述する
ビルダーで表現できない条件については、Switch to SQL mode をクリックし、SQL式として直接条件を記述します。例えば country = 'France' AND lower(dept) = 'sales' です。ビルダーで構築したものはすべて引き継がれるため、通常の手順はビルダーで開始し、その限界に達したときに切り替えることです。
これは単純な条件です:WHERE はありません、セミコロンはありません、ステートメントはありません。保存する前にチェックされ、他のテーブルを参照する、サブクエリを使用する、コメントやステートメント区切りを含む、許可されたリスト外の関数を呼び出す場合は拒否されます。許可された関数は、安価な行ごとのものです:テキスト処理、coalesce、cast、日付の切り詰めなどです。集計、正規表現、JSON関数は利用できません、なぜなら行フィルタはそのテーブルに対するすべてのクエリの各行で実行され、安価でなければならないからです。
列名はSQLでそのように動作します:引用符なしの名前は大文字と小文字を区別せず、名前を引用符で囲むと、実際に重要な列に到達できます。
SQLモードからビルダーモードに戻ると、SQLが破棄されます。 ビルダーはSQLが表現できるすべての条件を表現できないため、空の条件から開始するのではなく、あなたの条件の近似値から開始します。それが起こる前にプラットフォームは警告します。
フィルタを割り当て、その影響を確認する
Next をクリックしてステップ2に進みます。フィルタの概要が開きます:名前、データセット、テーブル、条件 が、保存されるときと同じように表示されます。
その下に、Impact が報告され、その条件がそのテーブルに現在どのような影響を与えるかを示します。例えば "このフィルタで227,712行の528,363行が表示され、300,651行が非表示になります" です。これはカウントのみで、行データではありません。そのため、内容を読むべきではないテーブルを見ても安全です。誰かに割り当てる前に読んでください:これは、何も保持しない条件や、すべてを保持する条件を最も安価にキャッチする方法です。
次に、principals(このフィルタが適用されるユーザーとグループ)を選択します。フィルタには複数のユーザーとグループを指定できます。グループのメンバーシップはフィルタが公開されるたびに解決され、フィルタを書くときではなく、来月制限付きグループに追加された人は、フィルタを変更する必要なく、その時点からフィルタリングされます。
Save and activate で完了するか、Save as inactive でフィルタを保存し、必要に応じて有効にします。
複数のフィルタが結合する方法
同じ人と同じテーブルに対して複数のフィルタが適用される場合、すべてのフィルタが同時に適用され、行が表示されるにはすべてのフィルタを満たす必要があります。 フィルタは誰かが見るものを広げません:2番目のフィルタを追加することは、常に行を取り除くだけです。
これは最も一般的な驚きの原因です。2つのフィルタがそれぞれ合理的なように見えます:「EMEAのみ」 と 「北米のみ」 は、空のテーブルを表示するために交差します。同じ条件に2回ターゲットされることは、直接指定された場合と、あなたが所属するグループを通じて指定された場合の両方で無害です:同じ条件が2回適用されると、同じ行が非表示になります。
日常的なフィルタの管理
Row filters リストはプロジェクト全体をカバーし、各フィルタについて、アクティブ/非アクティブのトグル、名前、principals、データセット、テーブル、条件を表示します。編集、複製、削除 アクションがあります。
- 非アクティブ化 フィルタをトグルで非アクティブ化すると、制限が適用されなくなり、フィルタはリストに残り、いつでも再度アクティブ化できます。
- 編集 フィルタを変更すると、その条件またはprincipalsが変更されます。
- フィルタは1つのテーブルをカバーします。 同じ条件を別のテーブルに適用するには、フィルタを複製し、コピーの対象テーブルを変更します。
行フィルタはプロジェクトの構成の一部であるため、構成エクスポートと一緒にエクスポートでき、保護するデータセットと一緒に別のプロジェクトにインポートできます。
権限
2つのことは別々に制限され、互いに含意しません:フィルタの管理はポリシーについて述べ、影響カウントはデータについて述べます。
知っておくべきこと
- 保存は即時ではありません。 フィルタはクエリエンジンに公開され、その独自のサイクルでフィルタを取得するため、新しい、変更された、非アクティブ化された、または削除されたフィルタは、クエリがそれを反映する前に数秒かかります。フィルタを保存し、制限された人としてすぐにクエリを実行すると、未フィルタリングの行がまだ表示される場合があります:フィルタが機能しなかったと結論付ける前に、再試行してください。
- 公開できないフィルタは誰も制限しません。 フィルタが解決できなくなったグループをターゲットにしている場合、プラットフォームはその制限を公開できず、ターゲットとなった人はすべての行を表示します。フィルタはまだリストに表示され、アクティブであるように読み取られます。制限が本当に重要な場合は、リストを読むのではなく、制限された人の1人としてクエリを実行して確認してください。
- フィルタを保存した後に削除された列はカバーされません。 保存時、条件が名前を付けた列は物理的に存在するテーブルと照合されるため、カタログが知っているがテーブルが知らない列は拒否され、テーブルを再同期することで修正されます。後で削除された列は自動的に再チェックされません:フィルタを開くとその影響が再計算され、問題が表面化します。
トラブルシューティング
さらに詳しく
当社のソリューションを実装するためのトレーニングや技術的なアシスタンスが必要な場合は、営業担当者にお問い合わせください、またはこのリンクをクリックして見積もりを依頼し、当社のプロフェッショナルサービスの専門家にプロジェクトのカスタム分析を依頼してください。
専用のDiscordチャネルで、Data Platformを開発しているチームと直接質問したり、フィードバックを送信したり、交流したりしてください。
OVHcloudサービスについてサポートが必要な場合は、ヘルプセンターでリクエストを作成してください。
ユーザーコミュニティに参加してください。

