日々地道に成長

思いついたことを書いていきます。

【BigQuery】ビックデータのcsvファイル出力方法【GCS】

お疲れ様です。コーヒーです。

 

今回はBigQueryにおけるビッグデータの出力方法について解説していきます。

方法は複数あると思いますが、今回はその中でもおすすめの方法であるGCSへの出力方法を紹介しようと思います。

なお、embulkの[embulk-output-bigquery]を使用しての方法を試してみたのですが、ファイルの出力にとても時間がかかってしまったので、ビックデータの出力にはあまり向いていない方法だと思います。

使用するコマンドについて

bqコマンドとgsutilコマンドを使用するため、インストールしていない方はまず[Google Cloud SDK ]のインストールからお願いします。

cloud.google.com

BQからGCSへの出力する流れ

BQからGCSへの出力する流れはおおよそ以下のようになります。

  1. 出力するビックデータのテーブル作成
  2. 先ほど作成したテーブルをGCSへ分割出力
  3. 出力したビックデータを結合

それぞれの項目について詳しく解説していこうと思います。

 

1.出力するビッグデータのテーブル作成

こちらの段階では、出力するビッグデータをクエリで加工しテーブルを作成します。

BigQueryからGCSへ出力する際には、クエリの結果を直接出力することができません。

そのため、この段階であらかじめテーブルを作成しておく必要があります。

もともと出力したいビックデータのテーブルがある場合にはこの段階は飛ばしてもらっても大丈夫です。

2.BQテーブルをGCSへ分割出力

GCSへの出力にはbqコマンドを使用します。

一般的なビックデータでなければ以下方法で出力が可能です。

bq extract [出力対象テーブル名] [GCSのパス]

 サンプルとして入力すると以下のようになります。

bq extract dataset.table gs://sample/test.csv

しかし、上記方法ではビックデータの出力時には以下エラーになってしまいます。

Table gs://・・・・ too large to be exported to a single file. Specify a uri including a * to shard export. See 'Exporting data into one or more files' in https://cloud.google.com/bigquery/docs/exporting-data.

このエラーの解決方法はファイル名に*をつけることです。

bq extract dataset.table gs://sample/test_*.csv

こうすることで、自動で出力可能サイズに分割してくれます。

3.GCS上でビックデータの結合

上記方法で出力を行うともちろん複数ファイルに分かれてしまいます。

そのファイルを一つにまとめる必要があります。

やり方としてはgsutilコマンドの[compose]を使用します。

こちらのコマンドはGCS上のファイルをまとめる際に使用するコマンドです。

gsutil compose gs://sample/test_*.csv gs://sample/test.csv

 だだし、こちらのコマンドで結合できる上限は32ファイルまでです。

そのため32ファイル以上に分割が行われた場合には、複数回上記コマンドを使用して結合を繰り返してください。

 

以上でBQからGCSへのビックデータ出力方法は終了になります!

最後まで読んでいただきありがとうございました!!