SnowPro Advanced: Administrator 無料問題 7 / 10 ・ 分野4: Performance Monitoring and Tuning
管理者が、直近1週間にウェアハウス WH_BI で取り消された文の件数を、利用者ごとに SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY から数えたい。取り消しには、利用者が自分で止めたものと、タイムアウトで止められたものが混じる。公式の使い方の注意に沿う絞り込みはどれか。
- EXECUTION_STATUS が失敗を示し、ERROR_CODE が NULL の行を数える
- ERROR_MESSAGE が 'SQL execution canceled' の行を数える
- QUERY_RETRY_CAUSE が NULL でない行を、取り消された文として数える
- EXECUTION_STATUS が 'CANCELED' を示す行を数える
正解と解説を見る
正解: B
正解の理由
QUERY_HISTORY は、直近1年の問い合わせの履歴を、時間・セッション・ユーザー・ウェアハウスなどの切り口で調べられる ACCOUNT_USAGE のビューである。公式は、このビューの一般の使い方の注意として、取り消された問い合わせは EXECUTION_STATUS の値ではなく、ERROR_MESSAGE の文面(SQL execution canceled)で見分けると書いている。だから、取り消された文を数えるには、ERROR_MESSAGE がこの文面の行を WAREHOUSE_NAME と期間で絞り、USER_NAME ごとに数える。状態の列で絞ると、取り消された文を正しく拾えない。
違う選択肢
「EXECUTION_STATUS が 'CANCELED' を示す行を数える」… 公式は、取り消された問い合わせは EXECUTION_STATUS の値では見分けず、ERROR_MESSAGE の文面で見分けると書いている。状態の列に取り消しを示す値を期待して絞ると、数えたい行を拾えない。
「EXECUTION_STATUS が失敗を示し、ERROR_CODE が NULL の行を数える」… 取り消しを、エラーコードの無い失敗として見分けるという説明は公式に無い。公式が示す見分け方は、ERROR_MESSAGE の SQL execution canceled という文面である。
「QUERY_RETRY_CAUSE が NULL でない行を、取り消された文として数える」… QUERY_RETRY_CAUSE は、文が流し直されたときにその原因のエラーを持つ列で、流し直しが無ければ NULL になる。取り消された文を見分ける列ではない。
履歴を読むときの注意
このビューの反映には最大45分の遅れがある。クライアントが自動で出した文で絞りたいときは、INFORMATION_SCHEMA の QUERY_HISTORY 表関数を使う。外部関数の呼び出しの数や送受信の量の列は、文の中の外部関数の数や、1回にまとめて送る行の数、一時的なエラーによる流し直しなどで変わる。