🌊

Ubuntu20.04にEmbulk入れて遊んでみた

2023/02/23に公開

本当はtroccoの記事を書こうと思ったんですが、Embulkの気分だったのでこっち書きます。

Emblkとは

Embulkについての説明はネットにいくらでも落ちてるので詳細な割愛しますが、簡単に説明すると、トレジャーデータ社が提供しているOSSのETLツールで、データを収集するツールです。
Embulkのプラグインを使って色々なデータを取得し、それなDWHなどに転送します。

Embulkのインストール

0. 環境準備

いつも通りOCIのFreeTierインスタンスでOSはUbuntuです。

NAME="Ubuntu"
VERSION="20.04.5 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.5 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

1. インストール

インストールは公式手順に従います。
公式が正義!

インストール
$ sudo apt update -y && sudo apt upgrade -y
$ curl --create-dirs -o ~/.embulk/bin/embulk -L "https://dl.embulk.org/embulk-latest.jar"
$ chmod +x ~/.embulk/bin/embulk
$ echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc
バージョン確認
ubuntu@embulk:~$ embulk --version
embulk 0.9.24
ubuntu@embulk:~$

はい。これでインストール完了です。
過去にLogstashを入れことがありますが、それより簡単で驚きました。
これだけだとつまらないので実際に動かしてみます。

CSVファイルをSnowflakeに転送してみる

全てを一から設定するのは手間なのでとっても便利なguessコマンドでymlファイルを生成します。

適当なCSVファイルを用意する

test.csv
"1","test1"
"2","test2"
"3","test3"
"4","test4"
"5","test5"

seed.ymlを作成する

seed.yml
---

in:
  type: file
  path_prefix: ./test.csv
  parser:
    type: csv
out:
  type: stdout

guessコマンドでファイル生成

ubuntu@embulk:~$ embulk guess seed.yml -o config.yml
2023-02-23 08:18:41.509 +0000: Embulk v0.9.24
2023-02-23 08:18:43.613 +0000 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
2023-02-23 08:18:49.290 +0000 [INFO] (main): Gem's home and path are set by default: "/home/ubuntu/.embulk/lib/gems"
2023-02-23 08:18:51.801 +0000 [INFO] (main): Started Embulk v0.9.24
2023-02-23 08:18:52.107 +0000 [INFO] (0001:guess): Listing local files at directory '.' filtering filename by prefix 'test.csv'
2023-02-23 08:18:52.108 +0000 [INFO] (0001:guess): "follow_symlinks" is set false. Note that symbolic links to directories are skipped.
2023-02-23 08:18:52.113 +0000 [INFO] (0001:guess): Loading files [./test.csv]
2023-02-23 08:18:52.186 +0000 [INFO] (0001:guess): Try to read 32,768 bytes from input source
2023-02-23 08:18:52.301 +0000 [INFO] (0001:guess): Loaded plugin embulk (0.9.24)
2023-02-23 08:18:52.390 +0000 [INFO] (0001:guess): Loaded plugin embulk (0.9.24)
2023-02-23 08:18:52.412 +0000 [INFO] (0001:guess): Loaded plugin embulk (0.9.24)
2023-02-23 08:18:52.493 +0000 [INFO] (0001:guess): Loaded plugin embulk (0.9.24)
in:
  type: file
  path_prefix: ./test.csv
  parser:
    type: csv
    charset: UTF-8
    newline: LF
    delimiter: ','
    quote: '"'
    escape: '"'
    trim_if_not_quoted: false
    skip_header_lines: 0
    allow_extra_columns: false
    allow_optional_columns: false
    columns:
    - {name: c0, type: long}
    - {name: c1, type: string}
out: {type: stdout}

Created 'config.yml' file.
ubuntu@embulk:~$

previewコマンドでdry-runしてみます

問題なくtest.csvの中身を読めています。

ubuntu@embulk:~$ embulk preview config.yml
2023-02-23 08:19:21.006 +0000: Embulk v0.9.24
2023-02-23 08:19:23.114 +0000 [WARN] (main): DEPRECATION: JRuby org.jruby.embed.ScriptingContainer is directly injected.
2023-02-23 08:19:28.811 +0000 [INFO] (main): Gem's home and path are set by default: "/home/ubuntu/.embulk/lib/gems"
2023-02-23 08:19:31.325 +0000 [INFO] (main): Started Embulk v0.9.24
2023-02-23 08:19:31.620 +0000 [INFO] (0001:preview): Listing local files at directory '.' filtering filename by prefix 'test.csv'
2023-02-23 08:19:31.685 +0000 [INFO] (0001:preview): "follow_symlinks" is set false. Note that symbolic links to directories are skipped.
2023-02-23 08:19:31.690 +0000 [INFO] (0001:preview): Loading files [./test.csv]
2023-02-23 08:19:31.699 +0000 [INFO] (0001:preview): Try to read 32,768 bytes from input source
+---------+-----------+
| c0:long | c1:string |
+---------+-----------+
|       1 |     test1 |
|       2 |     test2 |
|       3 |     test3 |
|       4 |     test4 |
|       5 |     test5 |
+---------+-----------+
ubuntu@embulk:~$

snowflakeへ転送する設定を行う

config.yml
in:
 省略
out:
  type: snowflake
  host: {Snowflakeのアカウント}
  user: {Snowflakeログイン時のユーザ名}
  password: {Snowflakeログイン時のパスワード}
  warehouse: COMPUTE_WH
  database: DEMO_DB
  schema: PUBLIC
  table: test_csv
  mode: insert

embulk runを実行する

設定したymlを実行するにはembulk run {ymlファイル名}コマンドを使います。

embulk run config.yml

Snowflakeのテーブルを確認する

問題なく取り込めています。
ちなみにTEST_CSVテーブルは事前に作成しておりません。
embulk runの実行で作成されています。
事前にテーブルを用意しなくて済むので楽でした。

いかがでしたでしょうか。
私も初めてEmbulkに触れてみましたが、躓くことなく操作できました。
興味がある方は是非触ってみてください。

Discussion