SlideShare a Scribd company logo
1 of 46
Download to read offline
Embulkでcsv→postgres
2015年3月

Shunsuke Mihara
自己紹介①
• 1980年8月生まれ。

東京都墨田区出身。

• 某社内ビアバッシュの様子
自己紹介②
• 今年度後半、怒涛のタイ料理ブー
ムが到来し、OLばりにタイ料
理を食べまくりました。

トムヤムクンフォー →

• command+shift+[4]キーに
「control」追加でデスクトップ
キャプチャ地獄からおさらばで
きたのが最近一番うれしかった
トピック。
こういうイベントの運営側と発表者側を
ノープランで同時にやってはいけない
教訓
本題に入る前に、デザインスプリントの話
を少し
[初回共有時、発表タイトルに書いたので^^;]
「デザインスプリント」
で検索!
エッセンスを抽出して、使える
部分を使っていくと良いのでは
http://image.slidesharecdn.com/designsprintoverview-140824232812-phpapp02/95/design-
sprint-13-638.jpg?cb=1423509101
embulkについて
1.Why embulk?
興味をもった理由
fluentd! 私の発表前に誰かが説明してくれているはずの

※公式ホームページより
なかなかプロダクション環境に開発者がさらりと
入れるには若干敷居が高い。。
色々ステップが必
要
NWの向こう側
でもこんな感じのログで分
析したい、してもらいたい
kibana!kibana!
fluentdは、ログをtailで待ち受け続けて、書き込
まれたら出力先に流す。。。
inputをin_tail
にしている場合
fluentdは、ログをtailで待ち受け続けて、書き込
まれたら出力先に流す。。。
inputをin_tail
にしている場合
gzip圧縮されたログは手に入る。
じゃーローカルでダミーファイルにログをリダイ
レクトでぶっこんだら、それがtailされてファイル
がアウトされるんじゃないかと!
ダミー
じーっ(tail)
access.log.gz
zcat access.log.gz > ダミー
elasticsearch
(kibana)
実際やってみた!
結果
落ちた!
1∼2万行位入った所で、止まってしまう!
※fluentd,elasticsearch,それを入れてるローカルcentos(仮
想)のスペック、どこが悪いかは確認しきれていない。多
分、こっちの環境が悪い気がしてる。
うん十,百万は頑張って欲しいyo!
うーん、1000行ごとに時間おくとかやってみる
か、、でもログ量も結構いっぱいあるし、全クラ
スタ取り込むと時間かかるな。うーん面倒くさ
い。。。
うーん、1000行ごとに時間おくとかやってみる
か、、でもログ量も結構いっぱいあるし、全クラ
スタ取り込むと時間かかるな。うーん面倒くさ
い。。。
これが去年の7月
くらい
そして、面倒くさいまま半年が経ちました。。。
※途中、社内メンバに相談も挟みつつ。。
そうしたら、私のユースケースにぴったりっぽい
アプリが登場しました!
トレジャーデータ
万歳!
面倒くさがってよかった
embulkです
★★embulkでデータを収集するところまではで
きていないので、とりあえずはembulkを使ってみ
た所までを今日の発表とします。★★
2.CSVをpostgresにバルクロードする流れ
## 1 .csvを解析[ここでの目的:ファイル内容を見て設定ファイル生成]
$ embulk guess <部分的設定ファイル[.yml]> -o <設定ファイル[.yml]>
## 2. 解析結果を標準出力に一部出力確認[ここでの目的:コンバート内容確認]
$ embulk preview <設定ファイル[.yml]>
## 3. 実際に実行[ここでの目的:csvをpostgresに流し込む]
$ embulk run <設定ファイル[.yml]>
基本的な利用方法
今回は、CSV入力を受け取ってpostgresに出力する
今回取り込んでみるCSVはこちら
/home/s.mihara/sandbox/embulk/try327/csv/sample_01.csv.gz
部分設定ファイル
## 1 .csvを解析[ここでの目的:ファイル内容を見て設定ファイル生成]
$ embulk guess <部分的設定ファイル[.yml]> -o <設定ファイル[.yml]>
部分設定ファイル
## 1 .csvを解析[ここでの目的:ファイル内容を見て設定ファイル生成]
$ embulk guess <部分的設定ファイル[.yml]> -o <設定ファイル[.yml]>
実行してみると。。。
読み込んだファイルを元にして、decoders,parserが追記された
設定ファイル.ymlが出来上がる
.gzファイルだっただか
ら、gzipデコーダ追加
gzip解凍後がcsvファイ
ルだったから、csvパー
サー追加。
csv内容で判断してス
キーマ構成も作成。
設定ファイル
なかなか頭良い!
## 2. 解析結果を標準出力に一部出力確認
$ embulk preview 設定ファイル.yml
## 2. 解析結果を標準出力に一部出力確認
$ embulk preview 設定ファイル.yml
実行してみると。。。
設定ファイルの情報を元にして、
結果を一部標準出力
元CSV
z
OUT結果
ここで実行する前にpostgres用に
設定ファイル.ymlのoutputを書き換え。
前提条件として、postgresのoutputプラグインは導入済み

$ embulk gem install embulk-output-postgresql
ここで実行する前にpostgres用に
設定ファイル.ymlのoutputを書き換え。
## 3. 実際に実行
$ embulk run 設定ファイル.yml
## 3. 実際に実行
$ embulk run 設定ファイル.yml
実行してみると。。。
だーっとログが流れる。
ログがこちら
ログがこちら
create tableを実行し、copy句を利用して、標準出力を経由して
postgresに登録が行われた模様。
psqlで確認
CSVがしっかりと登録されていますね!
何かとりあえずcsvファイルがあったとして、
コマンド3発+α(設定ファイルちょっと書換)
くらいで、postgresにロードできるって事です
ね。
こりゃ楽!
ご清聴ありがとうございましたm(__)m

More Related Content

Viewers also liked

Viewers also liked (11)

Змагання санпостів
Змагання санпостівЗмагання санпостів
Змагання санпостів
 
Франко І.
Франко І.Франко І.
Франко І.
 
Бабин яр
Бабин ярБабин яр
Бабин яр
 
łUkasz sar
łUkasz sarłUkasz sar
łUkasz sar
 
Tilting of vehicle
Tilting of vehicleTilting of vehicle
Tilting of vehicle
 
Marketing presentation
Marketing presentationMarketing presentation
Marketing presentation
 
презентация2
презентация2презентация2
презентация2
 
презентация
презентацияпрезентация
презентация
 
Bryon Kucharski Presentation
Bryon Kucharski PresentationBryon Kucharski Presentation
Bryon Kucharski Presentation
 
haemoglobinopathies
haemoglobinopathieshaemoglobinopathies
haemoglobinopathies
 
Oauth2.0とか(認証と認可)_201403
Oauth2.0とか(認証と認可)_201403Oauth2.0とか(認証と認可)_201403
Oauth2.0とか(認証と認可)_201403
 

201503_LT_embulk_for_upload