SnowPro Advanced: Architect 無料問題 7 / 10 ・ 分野3: Data Engineering
スキーマ STG には永続の表 ORDERS があり、ほかの処理が使っている。ある ETL のセッションで、CREATE TEMPORARY TABLE STG.ORDERS (...) を実行して作業用の表を作り、続けて同じセッションで INSERT INTO STG.ORDERS で10行を入れ、最後に DROP TABLE STG.ORDERS を実行した。公式ドキュメントに合うものはどれか。
- INSERT の10行は永続の ORDERS に入り、DROP TABLE は一時表を落とす
- INSERT の10行は一時表に入るが、DROP TABLE は同じ名前の永続の ORDERS のほうを落とす
- 同じスキーマに同じ名前の表があるので CREATE TEMPORARY TABLE がエラーになり、以後の文は永続の ORDERS に効く
- INSERT も DROP TABLE も一時表に効き、永続の ORDERS は行も表も変わらずに残る
正解と解説を見る
正解: D
正解の理由
一時表はセッションに属するので、同じスキーマの名前の一意性に縛られず、同じスキーマに同じ名前の永続の表があっても作れる。公式は、一時表はそのセッションの中で同じスキーマの同じ名前のほかの表より優先され、既存の表を隠すと書いている。そのあとセッションの中でその名前に対して行う問い合わせやほかの操作は、すべて一時表だけに効く。INSERT の10行も DROP TABLE も一時表に効き、ほかの処理が使っている永続の ORDERS は変わらない。
違う選択肢
「同じスキーマに同じ名前の表があるので CREATE TEMPORARY TABLE がエラーになり、以後の文は永続の ORDERS に効く」… 公式は、一時表はセッションに属するので同じ一意性の決まりに縛られず、同じスキーマに一時表と一時表でない表を同じ名前で作れると書いている。CREATE TEMPORARY TABLE はエラーにならない。
「INSERT の10行は一時表に入るが、DROP TABLE は同じ名前の永続の ORDERS のほうを落とす」… 公式は、セッションの中でその表に行う問い合わせとほかの操作は、すべて一時表だけに効くと書いている。DDL も例外ではなく、DROP TABLE が落とすのは一時表である。
「INSERT の10行は永続の ORDERS に入り、DROP TABLE は一時表を落とす」… 一時表は同じ名前の表をセッションの中で隠すので、INSERT も一時表に入る。DML だけが永続の表に向かうことはない。
押さえどころ
公式は、この優先は、セッションの中で表を落として Time Travel で戻すときや、CREATE OR REPLACE で表を作るときに特に注意が要ると書いている。CREATE OR REPLACE は表を落として作り直す操作なので、一時表が同じ名前で残っていると、思った表に効かない。