👏
GET_QUERY_OPERATOR_STATSを使ってみた
さらっと公式ドキュメントを眺めたので備忘録もかねてまとめます。
概要
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