SnowPro Advanced: Architect 無料問題 9 / 10 ・ 分野4: Performance Optimization
表 SALES には CLUSTER BY (sale_date) が定義され、表 EVENTS にはクラスタリングキーが無い。クラスタリングの状態とエラーを調べるため、次の4つ(A〜D)を実行した。このうちエラーになる2つの組み合わせはどれか。 A: SELECT SYSTEM$CLUSTERING_INFORMATION('sales'); B: SELECT SYSTEM$CLUSTERING_INFORMATION('sales', '(region_id)', 5); C: SELECT SYSTEM$CLUSTERING_INFORMATION('events'); D: SELECT SYSTEM$CLUSTERING_INFORMATION('events', '(event_type)');
- B と C
- C と D
- A と B
- A と D
正解と解説を見る
正解: A
正解の理由
SYSTEM$CLUSTERING_INFORMATION の2つめの引数には、列か式の並び、またはクラスタリングのエラーの件数のどちらか一方を渡す。公式は、両方を1回の呼び出しに含めることはできないと書いているので、列と件数を並べた B はエラーになる。また、クラスタリングキーの無い表では列の引数が必須で、省くとエラーが返る。キーの無い EVENTS で列を省いた C もエラーになる。
違う選択肢
「A と B」… B はエラーになるが、A はならない。A の SALES にはクラスタリングキーがあり、キーのある表では列の引数を省ける。省いたときは、定義済みのキー(sale_date)でクラスタリングの情報が返る。もう1つのエラーは、キーの無い EVENTS で列を省いた C である。
「C と D」… C はエラーになるが、D はならない。列の引数は、キーが定義されているかに関係なく表のどの列にも使え、公式は将来のクラスタリングを決める材料にできると書いている。キーの無い EVENTS でも、列を括弧の中に入れて渡した D は情報を返す。もう1つのエラーは、2つの引数を両方渡した B である。
「A と D」… A はキーのある表で列を省いた呼び出し、D はキーの無い表で列を渡した呼び出しで、どちらも決まりどおりに情報を返す。キーの有無と引数の決まりを両方とも逆に読んでいる。
押さえどころ
列の指定は1列だけでも括弧の中に入れる。件数を省くと、返る JSON の clustering_errors には直近の10件が入る。候補の列の並びを渡せば、キーを変える前にその列でのまとまり具合を確かめられる。