2025.04.09 コラム
【テックコラム】BigQuery Data Transfer Service の運用にまつわる Tips ~デバッグ編~
こんにちは、DataCurrent の不破です。
今回は、BigQuery Data Transfer Service の運用中にエラーが発生した場合のデバッグ方法についてご紹介したいと思います。
BigQuery Data Transfer Service とは、Amazon S3 や Google Cloud Storage 等、様々なデータソースから BigQuery にデータを転送することができる機能です。
私自身、実際に業務の中で BigQuery Data Transfer Service を活用する機会は年々増えています。従来はシステム間のデータ連携を行うとなると、場合によっては自分でプログラムを書いて、実行環境を用意して、cronを設定してバッチ実行…という手順を踏む必要がありましたが、今では BigQuery Data Transfer Service のコンソール上でポチポチと設定するだけで簡単にデータ転送を行うことができるので、とても便利で有難く感じています。
Google の BigQuery リリースノートを見ると、ここ数か月の間にも利用可能なデータソースに Google Analytics 4(プレビュー)等複数のサービスが追加されるなど頻繁にアップデートが行われており、BigQuery と外部データソースとの連携がますます強化されている印象です。
※この記事は、2025年3月時点に執筆したものであることをご留意ください。
BigQuery Data Transfer Service のデバッグ方法
普段 BigQuery Data Transfer Service を利用してデータ転送を実施していると、時々転送エラーに遭遇することがあります。
例えば Cloud Storage 上のファイルを BigQuery に転送する場合、以下のような原因でエラーになるケースがあります。
- 転送先に指定した BigQuery テーブルが存在しない
- 転送先の BigQuery テーブルのスキーマと、転送元のファイルのスキーマが一致していない
- etc…
エラーが発生した場合、まずは原因を確認するためにコンソール上で転送設定の実行履歴を見に行きます。
- BigQuery > 「データ転送」をクリックして、BigQuery Data Transfer Service のコンソールを開く
- 該当の転送設定を開く
- 「実行履歴」のタブからエラーとなっている該当の実行ジョブを開く
- ログを確認する

例えば、BigQuery テーブルが存在せずエラーが発生した場合は、BigQuery Data Transfer Service のログに以下のようなメッセージが表示され原因を特定することができます。
Not found: Table {プロジェクト名}:{データセット名}.{テーブル名}
一方でスキーマの不一致によるエラーが発生した場合は、ログには以下のようなメッセージが表示されます。ところがこのログを見ても、どのファイルでエラーが発生しているのか、何がエラーの原因となっているのかを特定することができません。
※画面右側のログ画面からログエクスプローラへのリンクもありますが、ここで表示されるログも上記と同じ内容のため詳細を確認することはできません。
BigQuery job bqts_xxxxx (table sample_table) failed with error INVALID_ARGUMENT: Error while reading data, error message: CSV processing encountered too many errors, giving up. Rows: 2; errors: 1; max bad: 0; error percent: 0; JobID: 123456789123:bqts_xxxxx. Check BigQuery job details for more information.
そこで、次に確認したいのが BigQuery ジョブのログです。メッセージの中にも「Check BigQuery job details for more information.」と書かれている通り、BigQuery Data Transfer Service の裏側では BigQuery の転送ジョブが動いており、そのログを確認することでより詳細な原因を確認することができます。
下記の手順で、Cloud Logging のログエクスプローラから該当する BigQuery ジョブのログを確認します。クエリを作成するために、事前に上記のメッセージから JOB ID(「bqts_xxxxx」の箇所)をメモしておきます。
- ロギング > 「ログエクスプローラ」をクリックして開く
- 下記の形式でクエリを作成する
resource.type="bigquery_project" logName="projects/{プロジェクトID}/logs/cloudaudit.googleapis.com%2Fdata_access" protoPayload.metadata.jobInsertion.job.jobName="projects/{プロジェクトID}/jobs/{上記でメモしたJOB ID}"
- ログエクスプローラのクエリ欄に貼り付けて実行する(必要に応じて期間を調整)
- 「!!」のつくエラーログを開き「ネストされたフィールドを開く」をクリックする
- ログを「jobStatus」で検索し、その配下にある「errors」の内容を確認する


ログの階層に含まれる「errors」内のメッセージを辿っていくと、以下のように、エラーが発生しているファイル名とエラーの原因が記載されたメッセージを確認することができます。この例では、「gs://xxxx/xxxx/dir1/test_10.csv」のファイルに含まれる「id」カラムのスキーマが INT64 にも関わらず、「NaN」という文字列の値が存在するためエラーとなっていることが分かります。
message: "Error while reading data, error message: Unable to parse; line_number: 3 byte_offset_to_start_of_line: 65 column_index: 0 column_name: "id" column_type: INT64 value: "NaN" File: gs://xxxx/xxxx/dir1/test_10.csv"
転送対象のファイルが複数あったり、何万行もあるデータの中で数十個のエラーが発生しているようなケースにおいては、ゼロベースでエラーの原因を特定するには限界があります。エラーが複数のファイルで発生している場合でも、BigQuery ジョブのログを見ることでエラー毎にファイル名と原因を確認できます。
規模の大きい転送処理になればなるほどエラーが発生した際のデバッグも難しくなりますが、BigQuery ジョブのログを見ることでどこがボトルネックになっているのかを絞り込むことができますので、Cloud Logging のログエクスプローラも合わせて活用されることをお勧めいたします。
まとめ
今回は、BigQuery Data Transfer Service のデバッグ方法についてご紹介させて頂きました。
BigQuery Data Transfer Service でエラーが発生した際に、何が原因か分からず困っているという場合に是非参考にしてみてください。
最後に
自社に専門人材がいない、リソースが足りない等の課題をお持ちの方に、エンジニア領域の支援サービス(Data Engineer Hub)をご提供しています。 お困りごとございましたら是非お気軽にご相談ください。
本記事に関するお問い合わせは下記にて承ります。
株式会社DataCurrent
info@datacurrent.co.jp