ETL処理とは
ETLはextract, transform, loadの頭文字を取って繋げた用語である。extract, transform, loadは日本語に直訳すると抽出、加工、読み込みになる。
ETL処理とは、何らかのデータ(テキストファイル、csvファイル、etc...)に対してETLが示す処理を行うことである。
ELT処理とは
ELT処理はETL処理とは順番が異なるのみである。E,L,Tが示す処理の内容はETLと変わらない。
cliboaとは
BrainPad社内で開発・運用が行われていたETL処理機能の共通基盤部分をアプリケーションフレームワークとして設計・実装し直したものがcliboa(クリボア)である。
GitHub
https://github.com/BrainPad/cliboa
PyPI
https://pypi.org/project/cliboa/
cliboaに置けるETL処理の定義
cliboaではextract(抽出)は何らかの箱からデータをダウンロードすること、transform(加工)はダウンロードしたデータを加工すること、load(読み込み)は抽出、加工したデータをいずれかの箱にアップロードすることとして定義している。下記に概念図を示す。
cliboaの特徴
- Pythonで実装されている。
- Yamlファイルを書くだけで簡易なETL処理を稼働させることが可能である。
- PythonでETL処理を拡張実装することが可能である。
クイックスタート
必要な環境
Debian, Ubuntu, CentOSなどのLinuxOS上で動作する。
インストール方法
version3.0以上のpythonを用意した後、pipコマンドでインストール。
sudo pip3 install cliboa
インストール完了後、cliboadminというコマンドが実行可能になる。cliboadminを任意のディレクトリで実行する。
$ cd /usr/local
$ cliboadmin init sample
$ cd sample
$ cliboadmin create simple-etl
ファイル・ディレクトリ構成
cliboadminによって初期化されたプログラム構成は下記の通り。
├── Pipfile
├── bin
│ └── clibomanager.py
├── common
│ ├── environment.py
│ ├── __init__.py
│ └── scenario
├── conf
├── logs
└── project
│ └── simple-etl
│ ├── scenario
│ └── scenario.yml
└── requirements.txt
PyPIパッケージのインストール
requirements.txtにcliboaを動かすのに必要なpythonパッケージ一式が定義されているので、pipコマンドで指定してインストールする。
$ cd sample
$ pip3 install -r requirements.txt
ETL処理のシナリオを書く
project/simple-etl/scenario.ymlに例として下記の処理を書く。
処理内容
sftpサーバーからtest.csv.gzをダウンロード、ダウンロードしたファイルを解凍、解凍したtest.csvをsftpサーバーにアップロード
scenario:
- step:
class: SftpDownload
arguments:
host: localhost
user: root
password: pass
src_dir: /usr/local
src_pattern: test.csv.gz
dest_dir: /tmp
- step: FileDecompress
arguments:
src_dir: /tmp
src_pattern: test.*\.csv.*\.gz
- step:
class: SftpUpload
arguments:
host: localhost
user: root
password: pass
src_dir: /tmp
src_pattern: test.*\.csv
dest_dir: /usr/local
実行
実行前に下記を整えておく
- localhostをsftpサーバー化
- id=root, password=passでsftpサーバーにログイン可能
- /usr/local以下にtest.csv.gzを用意
下記のコマンドで実行
cd sample
pipenv run python3 bin/clibomanager.py simple-etl
もしくは
python3 bin/clibomanager.py simple-etl
実行後、下記のようになっていれば成功である。
- /usr/local以下に置いたtest.csv.gzが/tmp以下に展開されtest.csvになっている。
- /usr/local以下にtest.csvが存在する