弊社のエンジニアリングを支える記事を随時公開。https://timers-inc.com/engineering2016-05-16Embulk-parser-pluginとかを開発した話Tweetはじめましてインターンの学生エンジニアな五段です。弊社は最近収集されるデータをgoogleのBigQueryに入れるようになりました。その時に各情報からBigQueryに入れると気に使ったミドルウェアであるEmbulk周りをお手伝いさせていただいた時に得た知見をまとめようと思います。今回はRubyほぼ未経験な自分がRubyで開発したEmbulkparserの話です。Embulkとはバルク処理に特化したデータ転送ミドルウェアです。プラグイン方式でデータ入力先からデータ先を豊富にあり万が一なかったとしても簡単に作ることができます。BigQueryとは2012年にGoogleからリリースされたカラム型データストアです。数テラ数ペタでも数秒でデータ抽出を行ってくれるサービスで、かなりの低価格で提供されています。今回作るものデータは普通のタブ区切りのログテキストなのですが今回は流し込まれたデータの中にJSONデータが一部含まれていたので、そのJSONをパースする機能と不必要なカラムを削る機能を持つパーサープラグインです。タブ区切りですが、中にJSONのデータとBigQueryに送らなくても良いデータが幾つかあります。/api/hogehoge/foobar/propro/postEmbulkはYamlで設定ファイルを作成します。none}CSVのパーサーと同じ感じになるようにしてます。typeにJSONカラム指定用のjsonとアウトプットしないカラム用のnoneで指定するようにしました。配列オプションに設定を書いてもらう感じです。テンプレートファイル作成Embulkにはプラグイン作成用のテンプレートを生成してくれるコマンドがあるのでそれを用います。embulk-parser-parser_col_json/.gitignore......いろいろと生成されますが今回のパーサープラグインの場合メインでコードを書き込むのは./embulk-parser-parser_col_json/lib/embulk/parser/parser_col_json.rbの中です。実装周り実際に実装したのが下のソースです。endendruby素人感が拭えないコードですが、現状ちゃんと動いてるようです。self.transaction以下が読み込まれたYamlファイルを処理する部分です。今回は、アウトプットする形がJsonによって変わるので読み込まれたものを一行ずつforeachして最終的な物に何をアウトプットするカラムをColumn.new(index,カラム名,型)で追加していきます。run以下が実際のファイルを処理する箇所です。doでひとつひとつ処理していきます。previewで動作確認してみます。none}実際に実行したのが以下の物です。分けれて、削られてますね。|+---------------------+---------------+-----------+-------------------+----------------+----------------+まとめいかがでしょうか?まだまだ修正するべき所は多いですが、必要としていた機能の実装はできました。EmbulkのPlugin開発はまだ日本語ドキュメントが豊富というわけではないですが、なかなか簡単にできます。EmbulkのプラグインはRuby初心者でも簡単に動くものが作れますので、もし既存のもので不便があったら開発してみるのも手かもしれません。言語を使って既存のデータベース資産と向き合うみなさん、こんにちは。サーバエンジニアの長南です。3つであなたの意図はもっと伝わる。こんばんわサーバサイドエンジニアのjonnyです。RemoteConfigをSwiftyに扱うライブラリ作ってみたお久しぶりです。iOSエンジニアのすーです。チームメンバーがF...2016-04-22テストに投資した時間が、チームにどのような利益をもたらすか?はじめまして。»プロフィール子育てアプリFamm(ファム)を運営する、株式会社Timersのエンジニアブログです。最新の技術情報を日々発信していきます。iOSもっと見る月別アーカイブTimersでは各職種を積極採用中!急成長スタートアップで、最高のものづくりをしよう。募集の詳細をみるスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。