4
3

More than 5 years have passed since last update.

bigqueryの前処理するには何が良いか

Last updated at Posted at 2014-12-08

予め断っておくが、答えはない。むしろ質問で、以下の様なニーズを満たすソリューションはないものかと探している。
まあ、bigqueryなどにデータを入れる前に、データを適切な形にする前処理ストの為の適切なツールは何かという問いだ。

汚いデータは当たり前

最近ニコニコデータセットを、BigQueryに入れようとして、悪戦苦闘している。
特にコメントには苦労する。大体この手のユーザーが自由に入力出来る系のデータは、仕様通りにデータは入っていた試しが無い。

例えば、タブ区切りでコメントデータを用意してインポートしたところ次のようなデータが見つかった。

本来データが入るところに改行記号が大量に入っているそのためパースに失敗し、BigQueryのロードが止まる。
エラーハンドリングを、何万とかに設定してもエラーで止まる。最終的に、エラーが9千万あっても無視するようにしてデータを入れた。

簡単に前処理がしたい

このような場合に備えて簡単に前処理がしたい。

pythonの擬似コードで書くとこんな感じ

import re
def remove_char(line): #手軽に関数化
   return re.sub('[\n\t]','',line)

lines=read('gs://foo/bar.*.gz') #手軽にデータを読める
lines=[remove_char(l) for l in lines] #大量の処理をするのに上で定義した関数が使える
save(lines,"gs://dest/bar.*.gz") #手軽にデータを書き出せる

みたいな感じで、ファイルの分散はよきに計らってくれて、開発者は、ロジックにだけ集中すれば良いようなのがあると良いな。
そういうのどういうのがあるか教えてほしい。

こういうのだったら嬉しい。

  • Google Cloud Storage(gcs)のファイルを直接読んで、結果を直接gcsに書き出せる
  • 基本的にやりたい処理の部分を書けば後はそのフレームワークが面倒を見てくれる。
  • ユーザー独自の関数を簡単に利用できる。上の例でのremove_charみたいな処理が簡単に出来る

googleの今度出すGoogle Cloud DataFlowがそんな感じだと良いな。
あるいはapache sporkがそんな感じだろうか(gcsがs3だと思うが)。
昔だったらpigを使っていたと思うが、最近はとんと見かけない。
SQLを使っても出来るだろうが、ロジックの部分が綺麗にかけないことが多い。

4
3
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
3