SnowPro Advanced: Data Engineer 無料問題 1 / 10 ・ 分野1: Data Movement
同じ外部ステージのファイルを、夜間は COPY INTO で一括ロードし、日中は自動取り込みの Snowpipe でも取り込むように作った。後日、同じファイルの行がテーブルに二重に入っていることが分かった。原因の説明として正しいのはどれか。
- 夜間の COPY INTO はテーブルの、日中の Snowpipe はパイプのメタデータの履歴で重複を防ぎ、互いの読み込みを見ていないため
- 日中の Snowpipe は、夜間の COPY INTO が読み込んだファイルについても、通知を受けるたびに同じファイルを最初から読み直すため
- 夜間の COPY INTO と日中の Snowpipe は、同じファイルが後から書き換えられると、どちらも別のファイルとして読み直すため
- 夜間の COPY INTO と日中の Snowpipe の履歴はどちらもテーブルに残るが、保持が64日と14日で食い違うため
正解と解説を見る
正解: A
正解の理由
一括ロードの履歴はロード先テーブルのメタデータに64日保存され、Snowpipe の履歴はパイプのメタデータに14日保存される。COPY INTO はテーブル側のロードのメタデータで読み込み済みのファイルを飛ばし、Snowpipe はパイプに紐づくファイルのメタデータで同じファイルの読み直しを防ぐ。重複を防ぐ仕組みがそれぞれ自分の側の履歴にしか基づかないため、同じファイルを両方で読む設計では、片方が読んだファイルをもう片方が読み込み済みと見なさず、行が二重に入る。
違う選択肢
「夜間の COPY INTO と日中の Snowpipe は、同じファイルが後から書き換えられると、どちらも別のファイルとして読み直すため」… Snowpipe はパイプのメタデータにファイルのパスと名前を持ち、後から変更されて eTag が変わった同じ名前のファイルも読み直さない。書き換えが二重の原因にはならない。
「夜間の COPY INTO と日中の Snowpipe の履歴はどちらもテーブルに残るが、保持が64日と14日で食い違うため」… 一括ロードの履歴はテーブルのメタデータに64日、Snowpipe の履歴はパイプのメタデータに14日残る。どちらもテーブルに残るのではなく、置き場所そのものが違う。
「日中の Snowpipe は、夜間の COPY INTO が読み込んだファイルについても、通知を受けるたびに同じファイルを最初から読み直すため」… Snowpipe はパイプのメタデータで読み込んだファイルを覚え、同じファイルの読み直しを防ぐ。通知を受けるたびに最初から読み直す動きはしない。
つまずき方
両者の履歴を突き合わせるのは、パイプの ALTER PIPE … REFRESH だけである(テーブルとパイプの両方のロード履歴を確かめて二重の読み込みを防ぐ)。夜間の一括ロードと通知による自動取り込みを同じファイルに向けない設計にするのが基本になる。