SnowPro Advanced: Data Engineer 無料問題 6 / 10 ・ 分野3: Storage and Data Protection
表 WEB_EVENTS は CLUSTER BY (event_date) でクラスタリングしている。表全体ではなく、2026-09-01 以降の範囲だけについて、event_date でどれだけまとまっているかの平均の深さを求めたい。求められる呼び出しはどれか。
- SELECT SYSTEM$CLUSTERING_DEPTH('WEB_EVENTS', '(event_date)', 'WHERE event_date >= ''2026-09-01''');
- SELECT SYSTEM$CLUSTERING_INFORMATION('WEB_EVENTS', '(event_date >= ''2026-09-01'')');
- SELECT SYSTEM$CLUSTERING_INFORMATION('WEB_EVENTS', '(event_date)', 'event_date >= ''2026-09-01''');
- SELECT SYSTEM$CLUSTERING_DEPTH('WEB_EVENTS', '(event_date)', 'event_date >= ''2026-09-01''');
正解と解説を見る
正解: D
正解の理由
SYSTEM$CLUSTERING_DEPTH は第3引数に述語(predicate)を取り、深さを求める列の値の範囲を絞れる。公式は、この述語の先頭に WHERE のキーワードを付けないこと、引数はすべて文字列で単一引用符で囲むこと、述語の中の文字列は単一引用符を2つ重ねてエスケープすることを定めている。列の引数は、クラスタリングキーのある表では省けるが、書けばその列で求める。
違う選択肢
「SELECT SYSTEM$CLUSTERING_DEPTH('WEB_EVENTS', '(event_date)', 'WHERE event_date >= ''2026-09-01''');」… 述語に WHERE を付けている。公式は、predicate は WHERE のキーワードで始めない、と書く。
「SELECT SYSTEM$CLUSTERING_INFORMATION('WEB_EVENTS', '(event_date)', 'event_date >= ''2026-09-01''');」… SYSTEM$CLUSTERING_INFORMATION には範囲を絞る引数が無い。第2引数は列・式か、返すエラーの数のどちらかで、両方を同時に渡すこともできない。
「SELECT SYSTEM$CLUSTERING_INFORMATION('WEB_EVENTS', '(event_date >= ''2026-09-01'')');」… 第2引数の括弧の中は、絞り込みの条件ではなく、クラスタリングの情報を求める式として扱われる。event_date >= ... という真偽の式でのまとまり方を求めることになり、範囲は絞れない。
押さえどころ
クラスタリングキーの無い表でも、列を渡せばどちらの関数も使え、キーの候補を比べるのに使える(キーの無い表で列を省くとエラーになる)。深さは表の出来の目安であって、公式は、最終的にはクエリの性能がいちばんの指標だとしている。空の表の深さは0、データのある表では1以上になる。