-
よしだ
-
とある人材紹介会社のマーケティング部門のデータエンジニア
-
好きな言語: 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ならembulk-parser-roo-excel、またはembulk-parser-poi_excelで
- デフォルトのままだと一度メモリに全部乗っけてしまい、OOMで死んでしまうので、
-J-Xmx=<JVMに割り当てるメモリサイズ>
を付けておく。
- デフォルトのままだと一度メモリに全部乗っけてしまい、OOMで死んでしまうので、
-
サイズの大きいExcelは、一旦手作業でCSVにエクスポートしてから
-
たまにExcelのおせっかいで変換されてしまうので、注意しつつ作業。
-
embulk-filter-columnやembulk-filter-rowでSQL Likeに抽出
- 必要な項目、条件に一致したものだけデータベースやCSVへ。
さくらクラウドのオブジェクトストレージにあるデータを取得したかったので、embulk-input-s3、embulk-input-riak_csを試したが、内部に使用されているAWS SDKのバージョンの関係か、上手く接続できなかったため、断念。
現在は、sacloud/s3cmdを使用してダウンロードしたものを、embulkでloadしています。
- embulkは、
config.yml
を一つの関数とみなしてタスクの責務を閉じることが出来るので、様々なジョブ管理ツールと組み合わせやすかった。 - 欲しい機能がある場合、pluginのページが充実してるので、試しやすかった。
- twitterでembulkで困っていることをつぶやくと、いつの間にか実装されていることがある。