Skip to content

確認問題|Associate ② データ取り込み

教材 02-ingestion.md の内容に基づく確認問題です(全10問)。 まず問題を解き、下の「解答・解説」で答え合わせをしてください。

問題

Q1. Auto Loader(自動ローダー)の実体と、それを利用するためのフォーマット指定の組み合わせとして正しいものはどれか。

  • A. バッチ用の SQL コマンドであり、FILEFORMAT = cloudFiles で指定する
  • B. Structured Streaming ソースであり、spark.readStream.format("cloudFiles") で指定する
  • C. Lakeflow のマネージドコネクタであり、format("managed") で指定する
  • D. Delta Lake のテーブル関数であり、SELECT * FROM autoloader(...) で指定する

Q2. Auto Loader が「処理済みファイルを追跡し、障害時も 1 回だけの処理(exactly-once)を保証する」仕組みに関する説明として正しいものはどれか。

  • A. 処理済みファイルのメタデータをチェックポイントとして RocksDB に永続化し、重複処理を防止する
  • B. 処理済みファイルの一覧を毎回ディレクトリを全スキャンして突き合わせることで重複を防止する
  • C. exactly-once を実現するには、ユーザーが独自に状態管理コードを実装する必要がある
  • D. チェックポイントはソースファイル側に書き戻され、Delta テーブルには保存されない

Q3. Auto Loader のスキーマ推論(Schema Inference)の既定の挙動と、型を推論させる方法の組み合わせとして正しいものはどれか。

  • A. 既定で数値・日付を含めて型推論され、cloudFiles.inferColumnTypes=false で文字列に固定する
  • B. 既定ですべての列が文字列型として推論され、cloudFiles.inferColumnTypes=true でネストされた列などの型を推論する
  • C. 既定でスキーマは推論されず、必ず .schema() を明示指定しなければならない
  • D. 既定で VARIANT 型として推論され、cloudFiles.schemaHints で文字列へ戻す

Q4. Auto Loader でスキーマ進化(Schema Evolution)を機能させるために必要な設定はどれか。

  • A. checkpointLocation を指定して推論スキーマの履歴を保存する
  • B. cloudFiles.schemaLocation を指定して推論スキーマの変遷を保存する
  • C. pathGlobFilter を指定して新しい列を含むファイルだけを対象にする
  • D. COPY_OPTIONS('mergeSchema'='true') を指定する

Q5. Auto Loader のファイル検知モードに関する説明として正しいものはどれか。

  • A. 既定はファイル通知モードで、大規模時にはディレクトリ一覧モードへ切り替えるとコストを削減できる
  • B. 既定はディレクトリ一覧モードで、ディレクトリをスキャンして新規ファイルを検出する。大規模時はクラウドのイベント通知を使うファイル通知モードが推奨される
  • C. 両モードとも RocksDB を使わずにファイルを検出するため、チェックポイントは不要である
  • D. ファイル通知モードはファイルの処理順序を保証するために使われる

Q6. スキーマと一致しない、または解析できないデータを取りこぼさず退避する _rescued_data(rescuedDataColumn)の主な目的はどれか。

  • A. 既に処理済みのファイルを記録して重複読み込みを防止すること
  • B. 想定外・解析失敗のデータを退避してデータ損失を防止すること
  • C. ネストされた JSON を自動的にフラット化すること
  • D. スキーマ進化が起きた際にストリームを強制的に失敗させること

Q7. COPY INTO の冪等性(idempotency)に関する説明として正しいものはどれか。

  • A. 同じ COPY INTO を繰り返し実行すると、既読ファイルも含めて毎回すべて再読み込みされる
  • B. 既読ファイルはスキップされるが、COPY_OPTIONS('force'='true') を指定すると冪等性が無効化され既読ファイルも再読み込みされる
  • C. 冪等性を有効にするには VALIDATE ALL を毎回指定する必要がある
  • D. 一度読み込んだファイルの内容が後から変更されると、自動的に差分だけが再読み込みされる

Q8. COPY INTO のターゲットや読み込むファイルの指定に関する説明として正しいものはどれか。

  • A. ターゲットは既存の Delta テーブルで、FILES(最大 1000 ファイル)と PATTERN(glob)は併用できない
  • B. ターゲットは任意のビューでよく、FILESPATTERN は同時に指定して絞り込める
  • C. ターゲットには空のスキーマレステーブルを指定できず、必ず全列を定義しておく必要がある
  • D. FILES は最大 1000 フォルダを指定でき、PATTERN は正規表現で指定する

Q9. あるチームは、クラウドオブジェクトストレージに毎分数千〜数百万件の新しいファイルが継続的に到着するデータを、低レイテンシで増分取り込みしたい。Python も利用できる。最も適した方法はどれか。

  • A. COPY INTO を短い間隔でスケジュール実行し、FILES で毎回全ファイルを列挙する
  • B. Auto Loader(spark.readStream.format("cloudFiles"))を用い、ファイル通知モードで継続的にストリーミング取り込みする
  • C. COPY INTOCOPY_OPTIONS('force'='true') 付きで実行し、毎回全件を再読み込みする
  • D. VALIDATE ALL を付けた COPY INTO を継続実行してストリーミングを模倣する

Q10. SQL ユーザーが、数千程度のファイルを対象に周期的なバッチ取り込みを手軽に行いたい。取り込み前に、実際には書き込まずに解析可否やスキーマ・制約だけを確認したい。適切な組み合わせはどれか。

  • A. Auto Loader を使い、cloudFiles.schemaEvolutionMode='failOnNewColumns' で検証する
  • B. COPY INTO を使い、VALIDATE(例: VALIDATE ALL)モードで書き込まずに解析・スキーマ・制約を検証する
  • C. COPY INTO を使い、COPY_OPTIONS('force'='true') を付けると書き込みを行わず検証だけになる
  • D. Auto Loader を使い、checkpointLocation を省略すると書き込みが行われず検証だけになる

解答・解説

Q1. 正解: B Auto Loader は新規ファイルの到着を自動検知して段階的・効率的に処理する Structured Streaming ソースで、cloudFiles というフォーマット(インターフェース)として提供される。spark.readStream.format("cloudFiles") で利用する。SQL コマンドは COPY INTO の説明であり、A は誤り。

Q2. 正解: A Auto Loader は処理済みファイルのメタデータを、スケーラブルなキーバリューストアである RocksDB にチェックポイントとして永続化し、重複処理を防止する。exactly-once は自動で実現され、ユーザーによる状態管理は不要(Cは誤り)。従来方式のようなディレクトリ全再スキャンには依存しにくい(Bは誤り)。

Q3. 正解: B 既定では列は文字列型(string)として推論される。ネストされたデータやその他の列型を推論したい場合は cloudFiles.inferColumnTypes=true を指定する。既定が型推論やスキーマ推論なし、VARIANT というのはいずれも教材の記述と異なる。

Q4. 正解: B スキーマ進化には、推論したスキーマの変遷(履歴)を保存する cloudFiles.schemaLocation(スキーマの場所)が必要。checkpointLocation は処理済みファイルの状態を保存する場所であり役割が異なる。COPY_OPTIONS('mergeSchema'='true') は COPY INTO 側のオプション。

Q5. 正解: B 既定はディレクトリ一覧モードで、入力ディレクトリをスキャンして新規ファイルを検出する。ファイル数が増えるとリスティングコストが増えるため、大規模時はクラウドのイベント通知(通知サービス+キュー)を使うファイル通知モードが推奨され、クラウド費用を削減できる。なお Auto Loader はファイルの処理順序を保証しない(Dは誤り)。

Q6. 正解: B_rescued_data(rescuedDataColumn)は、スキーマと一致しない・解析できないデータを取りこぼさず退避する特別な列で、目的はデータ損失防止。処理済みファイルの記録はチェックポイントの役割、ストリームを失敗させるのは schemaEvolutionMode='failOnNewColumns' の挙動で、いずれも別概念。

Q7. 正解: BCOPY INTO は再試行可能かつ冪等で、既読ファイルは(内容が後から変わっていても)スキップされる。COPY_OPTIONS('force'='true')(既定 false)を指定すると冪等性が無効化され、既読ファイルも再読み込みされる。VALIDATE は冪等性を有効化するためのものではない。

Q8. 正解: ACOPY INTO のターゲットは既存の Delta テーブル。FILES(読み込むファイル名リスト、最大 1000 ファイル)と PATTERN(glob 指定)は併用できない。空のスキーマレステーブルは COPY INTO でのみ書き込め、mergeSchema により推論ロードも可能なので C は誤り。PATTERN は glob であり正規表現ではない。

Q9. 正解: B 数千を超えるファイルが継続的に到着し、低レイテンシで大規模に増分取り込みするシナリオは Auto Loader が最適。数百万〜数十億ファイルでもスケールし、大規模時はファイル通知モードでクラウド費用を抑えられる。COPY INTO は少〜中規模の定期バッチ向きで、1 回で最大 1000 ファイルの制約があり本シナリオには不向き。

Q10. 正解: B SQL 中心で数千程度のファイルを周期的なバッチ取り込みするなら COPY INTO が手軽。取り込み前に書き込まず検証だけしたい場合は VALIDATE(例: VALIDATE ALL)モードを使い、解析可否・スキーマの一致/展開要否・NULL 許容と CHECK 制約を検証できる。force は冪等性無効化のためのオプションで検証用ではない。