Skip to content

Instantly share code, notes, and snippets.

@grimrose

grimrose/LT.md Secret

Last active June 5, 2017 15:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grimrose/1377fce36840b6ef7536d22dc63e7761 to your computer and use it in GitHub Desktop.
Save grimrose/1377fce36840b6ef7536d22dc63e7761 to your computer and use it in GitHub Desktop.
Embulk Meetup Tokyo #3 https://eventdots.jp/event/618872 #embulk

とあるマーケティング部隊でのembulkの活用事例

お前、誰よ

  • よしだ

  • とある人材紹介会社のマーケティング部門のデータエンジニア

  • 好きな言語: Groovy

  • 好きなIDE: IntelliJ IDEA

普段の仕事

  • 事業KPIの可視化を行うためのWebアプリケーションの設計から運用
  • Scalaを使って日次や月次の集計バッチを実行するアプリケーションの作成
  • 帳票や外部APIなどからデータベースへデータを投入するツールの作成
  • 部門の日常業務を改善するためのちょっとしたツールの作成

導入初期

データベースサーバの連携

当初、社内の基幹システムからデータを抽出するためにembulkを導入する予定だったが、 jdbcの接続URLがえげつない某DBに手間取っていて、古橋さんに助けていただいた。

古橋さんとのやり取り

最終的にembulk単体だけでは、複数のテーブルを並行してbulk load出来なかったため、 ScalaのFutureとscalikejdbcを使ったETLツールを作成した。

その後、データベース間の連携で利用されるようになっていった。

普及期

  • テストデータの事前ロード
  • マスタデータの洗い替え

JVMがインストールされていればwindowsでも動作するので、 管理画面を作るには工数がかかるマスタデータをCSVにして、 Tera TermのSSHポートフォワードを介してデータベースに投入。

事前準備のタスクやジョブを構成するDAGを作るためにGradleを利用。

順調にデータベース連携の対象のテーブルが増えていくが、liquid templateが導入されたため、 テーブル名を環境変数に埋め込んで対応することでスマートに解決出来た。

活用期

digdagと組み合わせて

  • 他のバッチのタスクと組み合わせて

    • 事前にデータ加工やファイルの取得、作業ディレクトリの作成等を実施。

    • Rubyでembulkへ渡すためのパラメータを生成して、Digdag.env.storeを呼ぶ。

  • for_each && _parallel: true

    • 導入初期に断念してた、複数のテーブルを並行してbulk load出来るようになった。

既存のExcelやCSVファイルをデータベースへ

  • サイズの小さいExcelならembulk-parser-roo-excel、またはembulk-parser-poi_excel

    • デフォルトのままだと一度メモリに全部乗っけてしまい、OOMで死んでしまうので、-J-Xmx=<JVMに割り当てるメモリサイズ>を付けておく。
  • サイズの大きいExcelは、一旦手作業でCSVにエクスポートしてから

  • たまにExcelのおせっかいで変換されてしまうので、注意しつつ作業。

  • embulk-filter-columnembulk-filter-rowでSQL Likeに抽出

    • 必要な項目、条件に一致したものだけデータベースやCSVへ。

オブジェクトストレージへのアクセス

さくらクラウドのオブジェクトストレージにあるデータを取得したかったので、embulk-input-s3embulk-input-riak_csを試したが、内部に使用されているAWS SDKのバージョンの関係か、上手く接続できなかったため、断念。

現在は、sacloud/s3cmdを使用してダウンロードしたものを、embulkでloadしています。

まとめ

  • embulkは、config.ymlを一つの関数とみなしてタスクの責務を閉じることが出来るので、様々なジョブ管理ツールと組み合わせやすかった。
  • 欲しい機能がある場合、pluginのページが充実してるので、試しやすかった。
  • twitterでembulkで困っていることをつぶやくと、いつの間にか実装されていることがある。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment