SnowPro Advanced: Architect 無料問題 6 / 10 ・ 分野2: Snowflake Architecture
スキーマ RAW には、2日前から使っている表 ORDERS、1時間前に作った表 TMP、自動取り込み(AUTO_INGEST = TRUE)のパイプ P_ORD がある。P_ORD は3時間前に CREATE OR REPLACE PIPE で作り直した。どの表も保持期間は1日である。CREATE SCHEMA RAW_6H CLONE RAW AT(OFFSET => -63600) を実行したときの結果として、公式ドキュメントに合うものはどれか。
- 成功する。TMP は中身の無い表として入り、P_ORD は今の定義のまま入る
- 失敗する。指定した時点より後に、自動取り込みの P_ORD を作り直しているため
- 成功する。TMP は時点に無かったので入らず、AUTO_INGEST = TRUE の P_ORD は作り直す前の定義で入る
- 失敗する。指定した時点にまだ無かった表 TMP が、今のスキーマに入っているため
正解と解説を見る
正解: B
正解の理由
公式の Time Travel を使うクローンの説明は、データベースやスキーマのクローンが失敗する場合として、AT | BEFORE で指定した時点より後に、AUTO_INGEST = TRUE のパイプが CREATE OR REPLACE PIPE で作り直されたか落とされた場合を挙げている。この制限は、REST API で手で取り込むパイプ(AUTO_INGEST = FALSE)には当たらない。P_ORD は自動取り込みのパイプで、6時間前より後の3時間前に作り直しているので、このクローンは失敗する。なお、指定した時点に無かった子の物は、クローンに入らないだけで、それで失敗するわけではない。
違う選択肢
「失敗する。指定した時点にまだ無かった表 TMP が、今のスキーマに入っているため」… 公式は、クローンするデータベースやスキーマの子の物のうち、指定した時点に無かったものはクローンに入らないと書いている。時点に無かった TMP があることは、失敗の理由にならない。
「成功する。TMP は中身の無い表として入り、P_ORD は今の定義のまま入る」… どちらの点も違う。時点に無かった TMP はクローンに入らず、P_ORD は時点より後に作り直した自動取り込みのパイプなので、クローンは失敗する。
「成功する。TMP は時点に無かったので入らず、AUTO_INGEST = TRUE の P_ORD は作り直す前の定義で入る」… TMP の扱いは合っているが、P_ORD が違う。AUTO_INGEST = TRUE のパイプを指定した時点より後に作り直していると、作り直す前の定義で入るのではなく、クローンそのものが失敗する。
押さえどころ
Time Travel を使うクローンは、ほかにも、指定した時点が今の子の物のどれかの保持期間を超えているときに失敗する。過去の時点でスキーマを写す手順を組むなら、自動取り込みのパイプを作り直した時刻と、子の表の保持期間を先に確かめる。AT | BEFORE を付けないクローンは、文を始めた時刻を AT の値として内部で使う。