テーブルには5つの列があり、数百万件のレコードが含まれています。列のカーディナリティ分布は以下のとおりです。

列C4とC5は、主にSELECTクエリのGROUP BY句とORDER BY句で使用されます。
一方、C1、C2、C3列は、SELECTクエリのフィルタ条件や結合条件で頻繁に使用されます。
アーキテクトは、クエリのパフォーマンスを向上させるために、このテーブルのクラスタリングキーを設計する必要があります。
Snowflakeの推奨事項に基づくと、複数列のクラスタリングキーを定義する際に、クラスタリングキーの列はどのように順序付けるべきでしょうか?
正解:C
説明
Snowflakeのドキュメントによると、テーブル1のクラスタリングを選択する際の考慮事項は以下のとおりです。
* クラスタリングが最適なのは、以下のいずれかの条件を満たす場合です。
費用に関係なく、可能な限り最速の応答時間を求めている。
* クエリのパフォーマンスが向上したことで、テーブルのクラスタリングとメンテナンスに必要なクレジットが相殺されます。
* クラスタリングは、クラスタリングキーが以下のタイプのクエリ述語で使用される場合に最も効果的です。
* フィルタ述語(例:WHERE句)
* 述語を結合する(例:ON節)
* グループ化述語(例:GROUP BY句)
* ソート述語(例:ORDER BY句)
* クラスタリングキーが上記のクエリ述語のいずれにも使用されていない場合、またはクラスタリングキーが、キーに関数または式を適用する必要がある述語 (DATE_TRUNC、TO_CHAR など) で使用されている場合、クラスタリングの効果は低下します。
* Snowflakeでは、ほとんどのテーブルにおいて、キーごとに最大3つまたは4つの列(または式)を推奨しています。
3~4列以上追加すると、メリットよりもコストの増加の方が大きくなる傾向があります。
これらの考察に基づくと、クラスタリングキー列として最適な選択肢はCです。C1、C3、C2。理由は以下のとおりです。
* これらの列は、クラスタリングに最も効果的な述語である SELECT クエリのフィルタ条件と結合条件で頻繁に使用されます。
* これらの列はカーディナリティが高く、つまり多くの異なる値を持つため、クラスタリングの偏りを軽減し、圧縮率を向上させるのに役立ちます。
* これらの列は互いに相関関係にある可能性が高く、そのため、類似の行を同じマイクロパーティションにまとめて配置し、スキャン効率を向上させるのに役立ちます。
* これらの列には関数や式を適用する必要がないため、クラスタリングに影響を与えることなく述語で直接使用できます。
参考文献: 1: テーブルのクラスタリングを選択する際の考慮事項 | Snowflake ドキュメント