SnowPro Advanced: Data Engineer 無料問題 7 / 10 ・ 分野4: Data Governance
表 EVENTS に行アクセスポリシーを付けた。付ける前は、SELECT COUNT() FROM EVENTS が数ミリ秒で返り、ポイント検索の多い問い合わせには検索最適化サービスを検討していた。ポリシーを付けたあとの説明として正しいものはどれか。
- COUNT(*) は統計を使って即答し、検索最適化はポリシーのある表にも使える
- COUNT(*) は統計を使わずに数え、検索最適化はポリシーのある表には使えない
- COUNT(*) は統計を使わずに数え、検索最適化はポリシーのある表にも使える
- COUNT(*) は統計を使って即答し、検索最適化はポリシーのある表には使えない
正解と解説を見る
正解: C
正解の理由
Snowflake は表や列の統計を持ち、COUNT() や MAX のような単純な問い合わせにミリ秒で答える。しかし行アクセスポリシーのある表では、問い合わせが読んでよい行の部分集合を先に決める必要があるので、この統計と最適化は一般に使えず、予想より時間がかかることがある。返る値も、そのロールに許された行だけに基づく。一方、検索最適化サービスは、マスキングポリシーや行アクセスポリシーを使う表でも問い合わせの性能を上げられると公式が書いている。
違う選択肢
「COUNT() は統計を使わずに数え、検索最適化はポリシーのある表には使えない」… 統計が使われないのは合っているが、検索最適化サービスはポリシーのある表でも使える。公式は、マスキングポリシーや行アクセスポリシーを使う表の性能を上げうると明記している。
「COUNT() は統計を使って即答し、検索最適化はポリシーのある表にも使える」… 検索最適化の説明は合っているが、行アクセスポリシーのある表では、許された行を決めてから数える必要があるので、統計による即答は一般に使われない。
「COUNT() は統計を使って即答し、検索最適化はポリシーのある表には使えない」… どちらも逆である。統計による即答は使われなくなり、検索最適化サービスはポリシーのある表でも性能を上げうる。
つまずき方
ポリシーを付けたあとに件数の確認が遅くなったり、ロールによって件数が違ったりしても、障害ではなく仕様である。返る件数はポリシーの無い本当の値ではなく、許された行の数になる。取り込みの件数を照合する処理は、ポリシーで絞られないロールで実行するか、照合の前提を見直す。ポリシーの本体の副問い合わせや結合を減らし、WHERE の条件を簡単にすることも、公式が勧める性能の指針である。