Databricksでクエリプロファイルを使って実行計画を可視化する方法
はじめに
Databricksでは、クエリプロファイルを使うことで、実行計画や処理の流れを可視化し、効率的に処理が行われているかを確認できます。
本記事では、ビュー作成とそのSELECTを実行し、クエリプロファイルを使ってPushdownが効いているかを確認する手順を紹介します。
※本記事の説明や画面キャプチャは2025年9月時点のものです。
DatabricksでのSQL実行方法
はじめに、DatabricksでSQLを実行する方法についてご説明します。
Databricksでは、ノートブックやSQLエディタでSQLを実行できます。状況に応じて使い分けが可能です。
ノートブックでの実行
-
%sql
マジックコマンド
ノートブックのセルで%sql
と書くと、SQLを実行できます。
%sql
SELECT * FROM table1;
- PythonモードでのSQL実行
デフォルトのPython環境でSQLを実行する場合は、spark.sql()
を使用します。
spark.sql("SELECT * FROM table1").show()
- ノートブック上部からデフォルト言語を「SQL」に設定することも可能です。
SQLエディタでの実行
DatabricksのSQLエディタを使用すると、GUI上でSQLを実行できます。
ビューの作成と確認
簡単なビューを作成してみます。
ビューを使うと、特定の条件を絞ったデータの処理がデータベースエンジン側でどのように実行されるか(Pushdownの挙動)を確認できます。
ここでは例として、baby_data
というテーブルに対してビューを作成します。
ビューの作成クエリ
CREATE OR REPLACE VIEW workspace1.default.baby_data_view (
YEAR COMMENT '年',
FIRST_NAME COMMENT '名前',
COUNTRY COMMENT '国',
SEX COMMENT '性別',
COUNT COMMENT 'カウント' ) AS
SELECT
Year,
First_Name,
Country,
Sex,
Count
FROM workspace1.default.baby_data
WHERE Count > 10;
ビューの確認
作成したビューは通常のテーブルと同じようにSELECT
で確認できます。
SELECT * FROM workspace1.default.baby_data_view;
また、作成したビューの定義(列名、コメントなど)はカタログから確認できます。
クエリプロファイルの確認
Databricksでは、クエリの実行計画を「クエリプロファイル」で可視化できます。
これにより、各ステップの処理時間や処理行数、Pushdownの有無を確認でき、パフォーマンス分析やボトルネックの特定に役立ちます。
確認方法は複数あります。
クエリー履歴から
サイドバーにある「クエリー履歴」では、ノートブックやSQLエディタで実行したクエリの履歴を確認できます。
ただし、 「クエリー履歴」で確認できるクエリは、「SQLウェアハウス」 または 「サーバレスコンピュート」 に接続して実行したクエリのみとなります。クラスターに接続して実行したクエリは「クエリー履歴」に残らないため、注意が必要です。
「クエリー履歴」からはクエリプロファイルを以下の手順で確認できます。
-
「クエリー履歴」に表示されたクエリをクリックすると、クエリの詳細パネルが画面の右側に表示されます。
-
クエリの詳細パネル下部の「クエリープロファイルを表示」をクリックすると、DAGを確認できます。処理にカーソルを合わせたりクリックすることで、各処理の所要時間や処理行数などの情報を確認できます。
SQLエディタから
クエリ実行後に、ページの下部に、経過時間と返された行数が表示されます。そのリンクをクリックすると、クエリの詳細パネルが開きます。
ノートブックから
ノートブックからもクエリプロファイルを確認できますが、上述の通り、SQLウェアハウスまたはサーバレスコンピュートに接続されている状態で実行したクエリのみが、以下の方法でクエリプロファイルにアクセスできます。
(Databricksのドキュメントより抜粋:)
ノートブックから : ノートブックが SQLウェアハウスまたはサーバレス コンピュートに接続されている場合は、クエリを含むセルの下のリンクを使用してクエリプロファイルにアクセスできます。
セルの下の「パフォーマンスを表示」リンクをクリックして表示されるクエリを選択すると、クエリの詳細パネルが開きます。
Pushdownの確認
Pushdownとは、フィルタや集計などの処理をデータベースエンジン側で先に実行する仕組みです。
これにより、Sparkが全データを読み込む前に条件を適用できるため、クエリのパフォーマンスが向上します。
ただし、Pushdownが効くかどうかはデータソースに依存します。
- Pushdownが効くデータソース:Parquet, Delta, Cassandra, JDBC
- Pushdownが効かないデータソース:text、JSON、XML
(参考:https://www.databricks.com/discover/pages/optimize-data-workloads-guide )
This aims at pushing down the filtering to the “bare metal” — i.e., a data source engine. That is to increase the performance of queries since the filtering is performed at a very low level rather than dealing with the entire data set after it has been loaded to Spark’s memory.
To leverage the predicate pushdown, all you need to do is add filters when reading data from source tables. Predicate pushdown is data source engine dependent. It works for data sources like Parquet, Delta, Cassandra, JDBC, etc., but it will not work for data sources like text, JSON, XML, etc.
今回作成したビューでは WHERE Count > 10
という条件がPushdownされます。
作成したビューのSELECTを実行した後、クエリプロファイルの最下流にあるテーブルスキャンを確認すると、Filters
にWHERE条件が反映されており、Pushdownが効いていることを確認できます。
おわりに
本記事では、Databricksでビューを作成し、クエリプロファイルを使ってPushdownを確認する方法を紹介しました。
Databricksのクエリプロファイルを活用することで、SQLが効率的に実行されているかどうかを可視化することができ、パフォーマンス改善やチューニングの判断に役立ちます。
参考文献
Discussion