模擬問題集 › GCP-PDE › 練習問題 14

GCP-PDE 練習問題 14|データ ワークロードの保守と自動化

Professional Data Engineer・無料公開(全 200 問中 15 問を無料公開中)

問題
BigQuery 上でホストされている組織のデータレイクを監視しています。取り込みパイプラインは Pub/Sub からデータを読み取り、BigQuery のテーブルに書き込みます。取り込みパイプラインの新しいバージョンがデプロイされた後、1 日あたりの保存データ量が 50% 増加しました。Pub/Sub のデータ量は変わっておらず、一部のテーブルのみ日次パーティションのデータサイズが 2 倍になっていました。データ増加の原因を調査して修正する必要があります。 どうすればよいですか?

選択肢と解説

  • 1
    1. 日次パーティションのデータサイズが 2 倍になった BigQuery テーブルで重複行を確認する。2. 影響を受けたテーブルの重複を排除する SQL ジョブを毎日実行するようスケジュールする。3. 他のテーブルで同じことが発生した場合に再利用できるよう、重複排除スクリプトを他の運用チームと共有する。
  • 2
    1. デプロイされたパイプラインのコードエラーを確認する。2. パイプラインの BigQuery シンクへの複数回の書き込みを確認する。3. 新しいパイプラインのリリース当日の Cloud Logging のエラーを確認する。4. エラーがなければ、タイムトラベルを使用して BigQuery テーブルを前回のリリース前の内容に復元する。
  • ✓
    1. 日次パーティションのデータサイズが 2 倍になった BigQuery テーブルで重複行を確認する。2. BigQuery 監査ログを確認してジョブ ID を特定する。3. Cloud Monitoring を使用して、特定した Dataflow ジョブがいつ開始されたかと、パイプラインのコード バージョンを確認する。4. 複数のパイプラインが 1 つのテーブルにデータを取り込んでいる場合は、最新のもの以外のすべてのバージョンを停止する。
  • 4
    1. 前回のデプロイをロールバックする。2. タイムトラベルを使用して BigQuery テーブルを前回のリリース前の内容に復元する。3. Dataflow ジョブを再起動し、サブスクリプションをリリース時のタイムスタンプにシークしてメッセージを再生する。

解説

【正解】C

【0からの解説】
①前提知識
・Dataflow の Pub/Sub 読み取り:Dataflow のパイプラインが Pub/Sub のトピックを指定して読み取る場合、コネクタはパイプラインごとに専用の一時サブスクリプションを作成します。そのため、旧バージョンと新バージョンのジョブが同時に動いていると、それぞれがすべてのメッセージを受け取り、同じデータを 2 回書き込むことになります。新バージョンを「更新(update)」ではなく別ジョブとして起動し、旧ジョブを停止(ドレイン)し忘れると、このような二重書き込みが起こります。
・Cloud Audit Logs(監査ログ):誰が・どのジョブが・いつ BigQuery のテーブルに書き込んだかなどの操作を記録します。テーブルへの書き込み元のジョブや呼び出し元を特定するのに使えます。
・Cloud Monitoring:Dataflow ジョブの指標(開始時刻、スループット、要素数など)を確認でき、どのジョブがいつから動いているかを把握できます。
・パイプラインの停止:ストリーミング ジョブは「ドレイン」で停止すると、取り込み済みのデータを処理し終えてから停止するため、データを失わずに止められます。

②要件と制約の整理
(1) 新しいパイプラインのデプロイ後に保存量が 50% 増えた。
(2) Pub/Sub の入力量は変わっていないのに、一部のテーブルだけ日次パーティションがちょうど 2 倍になった。
(3) 求められているのは原因の調査と修正。
→ 入力が同じで出力がちょうど 2 倍なので、同じメッセージがそのテーブルに 2 回書き込まれている、つまり旧バージョンと新バージョンのパイプラインが並行して同じテーブルに書き込んでいる可能性が高いと推測できます。

③正解(C)が要件を満たす理由
C は、まず影響テーブルの重複行を確認して「二重書き込み」という仮説を検証し、次に BigQuery の監査ログから書き込んでいるジョブ ID を特定し、Cloud Monitoring でそれらの Dataflow ジョブの開始時刻とコード バージョンを突き合わせて、同じテーブルに複数バージョンのパイプラインが書き込んでいることを確かめます。最後に最新バージョン以外を停止することで、原因そのもの(停止し忘れた旧パイプライン)を取り除きます。証拠に基づいて根本原因を特定し、再発しない形で修正する手順になっており、(3) の「調査して修正する」に最も合致します。

【誤りの選択肢】
A:重複行の確認は良いのですが、その後は毎日重複排除の SQL を実行するという対症療法に終わり、旧パイプラインが動き続けるため重複データは毎日発生し続けます。重複排除クエリの料金と運用の手間も増え、原因の修正になっていません。
B:二重稼働しているパイプラインはエラーを出さないため、コードエラーや Cloud Logging のエラーを探しても原因が見つからない可能性が高いです。そのうえ「エラーがなければ」タイムトラベルでリリース前の状態に戻すと、リリース後に取り込んだ正当なデータまで失われます。原因のパイプラインも止めていないため、重複は再び発生します。
D:原因を調査せずにロールバックしており、「調査して修正する」要件を満たしません。ロールバックしても並行して動いている旧ジョブが残っていれば問題は解決しません。また、タイムトラベルの期間は最大 7 日で、シークによる再生にはメッセージの保持設定が必要なため、確実に元に戻せるとは限らず、作業のリスクと手間が大きくなります。

【参考】
Pub/Sub から Dataflow に読み取る
Cloud Audit Logs の概要 | Cloud Logging
実行中の Dataflow パイプラインを停止する
← 練習問題 13練習問題 15 →
GCP-PDE の模擬問題集は全 200 問

本番形式の練習テスト 4 回を、試験モード/演習モードで受験できます。 全問に解説付き、ドメイン別の弱点分析にも対応。模試プラン(月額 ¥980)からご利用いただけます。

GCP-PDE の模試を受ける料金プランを見る

GCP-PDE の無料公開問題

問題 1問題 2問題 3問題 4問題 5問題 6問題 7問題 8問題 9問題 10問題 11問題 12問題 13問題 14問題 15