4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

BigQueryのEXPORT DATAにおいて最小ファイル数でGCSにエクスポートする方法

Last updated at Posted at 2025-12-07

はじめに

こんにちは。データ・AIシステム本部 MA部の平井です。
本日はBigQueryのEXPORT DATAにおいて最小ファイル数でGCSにエクスポートする方法についてお話ししたいと思います。

背景

MA部では在庫などのZOZOTOWNのデータ更新をトリガーに配信を行うパーソナライズ配信システムを開発、運用しています。
パーソナライズ配信システムではAlloyDBをデータベースとして活用していて、配信に必要なデータマートをBigQueryで集計し、AlloyDBに連携するという処理があります。

BigQueryのEXPORT DATAステートメントを利用し、GCS上にCSVファイルをエクスポートし、AlloyDBのCSVファイルインポート機能を利用してデータ連携しています。

課題

実際にデータ連携を実行してみると、連携データサイズが大きくないにも関わらず複数ファイルがGCSにエクスポートされていることがわかりました。

公式ドキュメントには1ファイルで出力できる最大サイズは1GBと記載されているので1GBまでは1ファイルで出力されると考えられますが、実際は異なりました。

AlloyDBのCSVファイルインポート機能では複数ファイルを指定出来ないため、ファイル数に応じてインポートオペレーションが増え、連携処理時間に影響を与えていたのが課題でした。

解決策

クエリにDISTINCTORDER句、LIMIT句を追加すると出力できるファイルを制限できるという情報があったので、試してみたところ最小ファイル数でエクスポートすることに成功しました。(参考記事)

上記を追加するとBigQuery内部のワーカーを制限でき、それによって最小ファイル数でエクスポートしてくれるようです。

検証

上記の条件を記載しないと3つのファイルに分割されてエクスポートされてしまいます。

スクリーンショット 2025-12-07 16.35.09.png

また各ファイルサイズを合計しても1GBに満たないこともわかります。

スクリーンショット 2025-12-07 16.39.05.png

以下の画像から分かるようにそれぞれクエリに条件を加えると1ファイルでエクスポートされていることがわかります。

DISTINCT
スクリーンショット 2025-12-07 16.43.53.png

ORDER BY
スクリーンショット 2025-12-07 16.43.42.png

LIMIT
スクリーンショット 2025-12-07 16.43.31.png

最後に

クエリに条件を加えて最小ファイル数でGCSにエクスポートすることができました。
また、ファイル数が制限されてAlloyDBへのCSVインポートオペレーション数も制限され、余計な処理を削減できました。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?