Databricks SQLのクエリーフィルター

[Query filters \| Databricks on AWS](https://docs.databricks.com/sql/user/queries/query-filters.html) [2022/8/22時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

クエリーフィルターを用いることで、ビジュアライゼーションで表示されるデータの量をインタラクティブに限定することができます。クエリーフィルターは、[クエリーパラメーター](https://docs.databricks.com/sql/user/queries/query-parameters.html)と似ていますが、いくつか主要な違いがあります。クエリーフィルターはクエリー*実行後*にデータを絞り込みます。これによって、小規模なデータセットを取り扱っている状況、あるいは、クエリー実行が時間とコストを消費する状況におけるフィルターを理想的なものにします。

以下では、Databricks SQLにおけるメリットのいくつかを説明します。

- 以前のクエリーフィルターはクライアントサイドでのみ動作しましたが、これらの新たなフィルターは、パフォーマンスを最適化するために、動的にクライアントサイドあるいはサーバーサイドで動作します。
- シンプルなUIエクスペリエンス: フィルターを追加するために **+Add filter** をクリックし、ドロップダウンからカラムを選択します。カラムの固有値でフィルタリングをするために、別のクエリーを作成し、アクセスを許可し、更新する必要はありません。
- フィルターでどの値が選択されているのかを参照するために「適切な値のハイライト」を有効化すると、他のフィルターを選択した際の結果を返却します。例えば、`State`と`City`の両方のフィルターを選択するユーザーを考えます。ユーザーが「適切な値のハイライト」を有効にして、`State`で`California`を選択すると、`City`フィルターでCaliforniaの市のみがハイライトされます。ハイライトされない選択肢は、ドロップダウンの`Filtered out`メニューオプション配下に配置されます。
- テキスト入力フィルター: テキスト入力検索に基づいてカラムの結果をフィルタリングします。検索がマッチするモードは3つあります。完全一致、部分一致、先頭一致です。
- 先週、先月などの事前定義済みの日付レンジを用いてクイックに日付を選択することができます。
- 日付フィルターを作成する際にデフォルトの日付レンジを設定できます。
- また、ダッシュボード上でクエリーフィルターを使用することもできます。デフォルトでは、フィルターウィジェットはクエリーに追加されたフィルターがあるそれぞれのビジュアライゼーションの傍に表示されます。フィルターウィジェットをダッシュボードレベルのクエリーに紐づけるには、[Dashboard filters](https://docs.databricks.com/sql/user/dashboards/index.html#dashboard-filters)をご覧ください。

# 機能の説明

クエリーを実行した後に、**+Add filter**をクリックします。
![](https://docs.databricks.com/_images/query-filter.png)

**+Add filter**をクリックすると、以下のフィルターと設定を適用できるポップアップメニューが表示されます。
![](https://docs.databricks.com/_images/filter-menu.png)

- Column: フィルターを適用するカラム。
    - 現在は文字列、数値、日付がサポートされています。
    - 選択したカラムに日付が含まれている場合、ユーザーは日、月、年で時間を区切ることができます。
- Type: 適用するフィルターのタイプを指定します。
    - Single Select: 1つの値のみでフィルタリングします。
    - Multi Select: 複数の値でフィルタリングします。
    - Text Input: 特定のカラムで値にマッチする文字列を入力します。`Contains`、`Exact Match`、`Starts With`をサポートしています。
    - Date / timeピッカー、レンジピッカー: 日付データ型に対して日付あるいは期間を選択することができます。
- Sort Order: フィルタードロップダウンの並び順を指定します。`Ascending`と`Descending`を選択することができます。
- Highlight relevant values (y/n): フィルターにおける選択が他のフィルターでどのような値を返すのかを容易に確認できるようにします。例えば、`State`と`City`の両方のフィルターを選択するユーザーを考えます。ユーザーが「適切な値のハイライト」を有効にして、`State`で`California`を選択すると、`City`フィルターでCaliforniaの市のみがハイライトされます。ハイライトされない選択肢は、ドロップダウンの`Filtered out`メニューオプション配下に配置されます。
- Default value: 日付方のカラムが選択され、時間を区切る値(日、月、年)が指定されてると、ユーザーはフィルターのデフォルトの日付や期間を選択することができます。デフォルト値は、クエリーがリフレッシュされると自動で適用されます。
![](https://docs.databricks.com/_images/highlight-values.png)

# 制限

- クエリーフィルターはデータセット全体に適用されることに注意してください。しかし、クエリーフィルターのドロップダウンセレクターは64,000のユニークな値に限定されます。64,000より多いのユニークな値でフィルタリングしたい場合には、**Text**パラメーターを使用することをお勧めします。
- 参照しているテーブルのすべてのカラムではなく、クエリーによって返却されるカラムにのみフィルタリングをおこなうことができます。
- フィルターは、返却された結果に含まれるカラムから固有の選択肢のリストを表示します。結果が限定(`Limit 1000`によるクエリー実行など)されていると、フィルターはそれら1000行の結果からのユニークな値を表示します。
- クエリーに適用されたフィルターは、優れたパフォーマンスを実現するためにクライアントサイドあるいはサーバーサイドで実行され、ダッシュボードに適用されるフィルターは常にサーバーサイドで実行されます。

# コードベースのクエリーフィルターの活用(レガシーな方法)

特定の値にフォーカスするためには、対象のカラムを`` `<columnName>::filter` ``で置き換えてください。以下に例を示します。

```sql:SQL
SELECT action AS `action::filter`, COUNT(0) AS "actions count"
FROM events
GROUP BY action
```

マルチセレクトのフィルターが必要であれば、カラムを`` `<columnName>::multi-filter` ``で置き換えます。

```sql:SQL
SELECT action AS `action::multi-filter`, COUNT (0) AS "actions count"
FROM events
GROUP BY action
```

また、ダッシュボードでクエリーフィルターを使うこともできます。デフォルトでは、フィルターウィジェットはクエリーに追加されたフィルターがあるそれぞれのビジュアライゼーションの傍に表示されます。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)