LoginSignup
1
0

embulkとdigdagでwindow環境にデータ分析基盤を作ってみようとした話

Last updated at Posted at 2023-07-14

記事を作成した背景

どうもこんにちは。私は某企業でデータ活用部門にてお仕事をしているmasahiro54と申します。
この度触れたことのない、データ基盤作りに関わるということで、勉強がてら記事を書くことにしました。
(outputしたほうが身に付く気がするので。)

そして、まずはメジャーなツールである「embulk」「digdag」をローカル環境で触ってみようと考えました。

今回目指すモノ

以下の図の通りに、embulkを用いて以下のデータ連携を行います。

  1. csv → 分析DB
  2. 別のDB → 分析DB

記事用1.png

そしてdigdagにてembulkを実行するところが今回のゴールです。

作業前の状態

環境(ざっくりです。)

※全体的に古めの環境ですが、こちらのほうがやりやすかったので最新にはしていません。

  • windows11
  • java 1.8.0_371
  • PostgreSQL13
  • digdag 0.9.42
  • embulk 0.10.0

作業前の状態

以下の通りです。

  • csv(input)
    input_csv.png

  • 分析外のDB

input_DB.png

  • 分析DB

もともとのDB.png

やってみたこと

embulk

下準備

  1. 以下のコマンドでembulk(ver.0.10.0)をインストールします。
    • 「embulk-0.10.0.jar」を「embulk-latest.jar」にすれば最新版にできます。
    • (恐らく以下で正しいと思いますが。。。当時のメモからコピペしてるので間違っていたら申し訳ないです。)
PowerShell -Command "& {Invoke-WebRequest http://dl.embulk.org/embulk-0.10.0.jar -OutFile embulk.bat}"
  1. pluginのインストール
    postgresqlの操作をするため、以下の2つのプラグインをインストールします。コマンドは
    ※csvはデフォで出来ました。
  • embulk-input-postgresql
  • embulk-output-postgresql

コマンドはそれぞれ以下です。

embulk gem install embulk-input-postgresql
embulk gem install embulk-output-postgresql
  1. JDBCドライバの更新
    以下のディレクトリの該当するプラグインのフォルダを開き、「default_jdbc_driver」の中のJDBCドライバを最新のものに置き換えます。
    (私は「postgresql-9.4-1205-jdbc41.jar」→「postgresql-42.6.0.jar」に置き換えました。)
.embulk\lib\gems\gems

※ちなみにpostgresqlのJDBCドライバはこちらから取得しました。(https://jdbc.postgresql.org/)

ymlファイルの作成

今回は以下の2点を作成しました。

  • csvからDBにデータを送るためのymlファイル
  • DBから別のDBにデータを送るためのymlファイル
csvからDBにデータを送るためのymlファイル

※パスワードは適当な文字列を入れてます。
 ご自身の環境のパスワードを入れてください。

in:
  type: file
  path_prefix: C:aaa\\bbb\\ccc\\sample_2_csv_pipeline_test.csv # 入力ファイルのパスを記載してください。
  parser:
    charset: UTF-8
    newline: CRLF
    type: csv
    delimiter: ','
    skip_header_lines: 1
    columns:
    - {name: id, type: string}
    - {name: value, type: string}
out:
  type: postgresql
  host: localhost
  user: postgres
  password: poiuytrewq
  database: data_pipeline_test_B #分析用DB
  table: service_dummy
  mode: insert
DBから別のDBにデータを送るためのymlファイル
in:
  type: postgresql
  host: localhost
  user: postgres
  password: poiuytrewq
  database: data_pipeline_test_A #分析以外の用途のDB
  query:
    select *
    FROM service_dummy #入力元のデータを引っ張るSQL
out:
  type: postgresql
  host: localhost
  user: postgres
  password: poiuytrewq
  database: data_pipeline_test_B #分析用DB
  table: service_dummy 
  mode: insert

digdag

下準備

  1. 以下のコマンドでdigdag(ver.0.9.42)をインストールします。
    • 「digdag-0.9.42.jar」を「digdag-latest.jar」にすれば最新版にできます。
    • (embulkとコマンドが違いますが気にしないでください。多分、ほぼ同じ形でも行けると思います。ちなみに当時、下準備の順番はdigdag → embulkの順で行いました。)
PowerShell -Command "& {[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::TLS12; mkdir -Force $env:USERPROFILE\bin; Invoke-WebRequest http://dl.digdag.io/digdag-0.9.42.jar -OutFile $env:USERPROFILE\bin\digdag.bat}"
  1. digファイル作成
    以下のdigファイルを作成しました。
timezone: "Asia/Tokyo"

_export:
  sh:
    shell: ["powershell.exe"]

# schedule:
#   daily>: 10:00:00

+step1:
  sh>: embulk run csv_to_db.yml

+step2:
  sh>: embulk run db_to_db.yml

+step3:
  echo>: Fin.

結果

以下の通り、更新されました。
処理後output_DB.png

まとめ

  • とりあえず、embulkとdigdagの簡単な使い方はわかりました。
  • 応用すれば、会社のデータ基盤でも使えそうです。
  • とはいえこれだけだとかなりシンプルな動きしかできなさそうなので、さらに工夫を凝らした仕組みを構築してみたいです。。。

今後やってみたいこと

  • embulkにクラウド環境へのデータ連携
  • データソースからDWHに格納し、BIで可視化するまで。
  • 分析用DBにおけるデータの洗い替えのパフォーマンス実験。
    • Update
    • Delete → Insert
    • Drop → Create
1
0
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
1
0