👏

GET_QUERY_OPERATOR_STATSを使ってみた

2022/12/21に公開

さらっと公式ドキュメントを眺めたので備忘録もかねてまとめます。

概要

GET_QUERY_OPERATOR_STATSの関数についてSnowflakeの公式ドキュメンを機械翻訳にかけました.

クエリ内の個々のクエリ演算子に関する統計を返します。この関数は、過去 14 日間に実行された任意のクエリに対して実行できます。

この情報を使用して、クエリの構造を理解し、パフォーマンスの問題を引き起こすクエリ演算子 (結合演算子など) を特定できます。

たとえば、この情報を使用して、最も多くのリソースを消費しているオペレーターを特定できます。別の例として、この関数を使用して、入力行よりも多くの出力行を持つ結合を特定できます。これは、 「爆発的な」結合(意図しないデカルト積など) の兆候である可能性があります。

これらの統計は、Snowsightのクエリプロファイルタブでも利用できます。このGET_QUERY_OPERATOR_STATS()関数は、プログラムインターフェイスを介して同じ情報を利用できるようにします。

つまり、Snowsightで見ることができたクエリプロファイルの結果をSQLでも確認できるというものですね。

お試し

簡単なクエリをSnowflakeに投げて挙動を確認してみます。下記は実際にSnowflakeに投げたサンプルクエリとなります。

use role accountadmin;

-- 01a91bd3-0000-a7d1-0000-01a9018fd886
select
    1 as id

union

select
    2 as id
;
set lqid = '01a91bd3-0000-a7d1-0000-01a9018fd886';

select * from table(get_query_operator_stats($lqid));

返ってきた出力は下記です。

各カラムの説明は下記のものになります。各カラムの詳細はSnowflakeの公式ドキュメントを見ていただければと思います。

カラム名 説明
QUERY_ID 実行されたクエリID
STEP_ID クエリプランのステップの識別子
OPERATOR_ID クエリ内で一意となるオペレーターのID
PARENT_OPERATOR_ID 親演算子の識別子. 最後の演算子はNULL
OPERATOR_TYPE クエリ演算子のタイプ(TableScanor などFilter)
OPERATOR_STATISTICS 演算子に関する統計
EXECUTION_TIME_BREAKDOWN 実行時間
OPERATOR_ATTRIBUTES オペレーターに関する情報

おもったこと

今回のクエリにquery_historyからquery_idを取得すればウェアハウスサイズなども取れてモニタリングが良さげになるのかなと思いました。

参考文献

Discussion