Databricks Certified Data Engineer Associate 無料問題 5 / 10 ・ 分野3: Data Transformation and Modeling
Lakeflow Declarative Pipelines(旧 Delta Live Tables)で、BI 向けの Gold の表 orders_gold をストリーミングテーブルとして定義し、毎日取り込んでいる。金額の列に通貨の換算を足すよう定義の SELECT を書き換え、パイプラインを通常の更新で流した。この更新の直後の orders_gold について正しいものはどれか。
- 定義が既存の行と合わなくなったため、更新はエラーで止まり、表は書き換え前のまま残る
- 書き換えの後の更新で入った行は換算済みで、それより前に入った行は換算前のまま残る
- これまでの行も含めてソースから新しい定義で読み直され、表の行が換算済みにそろう
- これまでの行は換算前のまま残り、そのうえでソースのこれまでの行が換算済みで追記される
正解と解説を見る
正解: B
正解の理由
ストリーミングテーブルは、入力の各行を1回だけ扱う。いったん追加した行は、後の更新で読み直されない。公式の例でも、定義を LOWER から UPPER に変えると、既存の行は変わらず新しい行だけが大文字になる。通常の更新のあとは、書き換えの後に処理した行だけが新しい定義で換算されている。
違う選択肢
「これまでの行も含めてソースから新しい定義で読み直され、表の行が換算済みにそろう」… 公式は "A row that has already been appended to a streaming table will not be re-queried with later updates to the pipeline." と書いている。通常の更新で、これまでの行がソースから読み直されることはない。
「定義が既存の行と合わなくなったため、更新はエラーで止まり、表は書き換え前のまま残る」… 公式は制約(Limited evolution)の説明で "You can change the query without recomputing the entire dataset." と書いている。定義を変えても更新は止まらず、その後に入る行から新しい定義で処理される。
「これまでの行は換算前のまま残り、そのうえでソースのこれまでの行が換算済みで追記される」… 公式は "Without a full refresh, a streaming table only sees each row once" と書いている。ソースのこれまでの行は処理済みなので、通常の更新で読み直されて追記されることはない。
押さえどころ
ストリーミングテーブルでは、どの行がどの版の定義で処理されたかが行ごとに違いうる。公式はこれを「Limited evolution」の制約として挙げ、変更前に処理した行を処理し直すには full refresh が要ると書いている。Exam Guide の名前は Lakeflow Declarative Pipelines で、いまの docs では Lakeflow Spark Declarative Pipelines・Lakeflow pipelines とも呼んでいる。
Databricks Certified Data Engineer Associateの演習アプリ(無料10問・全問は解錠で)へ