🌊
Ubuntu20.04にEmbulk入れて遊んでみた
本当は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