50
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

Organization

BigQueryにデータをバッチでインポートする

BigQueryにデータをインポートする際はBigQuery Streamingを利用するfluentd-plugin-bigqueryがとてもとても便利ですが、BigQuery Streamingは来年から有料になります。

ストレージの課金が容量(GB)単位なのに対してBigQuery StreamingはInsertされた行数(0.01$/10万行)単位で課金されるようになるのでデータの流量が多いサービスを運営している場合はその費用が気になるところです。

なのでfluentd-plugin-bigqueryと比べると自動化するのが少々面倒ですが、BigQueryにデータをバッチでインポートする方法を考えてみます。

BigQueryにデータをインポートする

例えばFluentdで集約したアクセスログを1時間毎に区切ってgzip圧縮して保存したファイルをBigQueryにインポートするとして、

fluent.conf
<match access_log>
   type file
   path /var/log/bigquery/access_log
   time_slice_format %Y-%m-%dT%H
   time_format %Y-%m-%dT%H:%M:%S
   time_slice_wait 10m
   format json
   buffer_chunk_limit 4g
   compress gzip
</match>

BigQueryのテーブルスキーマはこんな感じにしておきます。

schema.json
[
  {
    "name": "time",
    "type": "INTEGER"
  },
  {
    "name": "remote_addr",
    "type": "STRING"
  },
  {
    "name": "uri",
    "type": "STRING"
  },
  {
    "name": "user_agent",
    "type": "STRING"
  },
  {
    "name": "referer",
    "type": "STRING"
  }
]

GCS(Google Cloud Storage)にからBigQueryにデータをインポートする

ローカルにあるデータをそのままBigQueryに流し込むこともできるのですが、非常に時間がかかります(テストで150MBのデータ放り込もうとしたけど30分経っても終わらず)。一方で一旦GCSにインポートしGCSからBigQueryに流し込むとすぐ終わるのでこちらの方法がオススメです。

# GCSのaccess_logバケットにデータを放り込む
gsutil cp /var/log/bigquery/access_log.2014-12-23T09_0.log.gz gs://access_log/

BigQueryにテーブルを作成してGCSに保存したデータをBigQueryに流し込みます。

# テーブル作成
bq mk project_id:dataset.table ./schema.json
# データ投入
bq load --source_format=NEWLINE_DELIMITED_JSON project_id:dataset.table gs://access_log/access_log.2014-12-23T09_0.log.gz ./schema.json

まとめ

  • BigQuery Streamingは来年から有料
  • BigQueryにデータをインポートする際は一旦GCSに放り込んでからやると高速でよい
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
50
Help us understand the problem. What are the problem?