Embulk備忘録
Embulkとは
Embulkはトレジャーデータ株式会社が提供するオープンソースのETLツールで、Embulkそのものが各サービスの転送を標準でサポートするのではなく、ニーズに応じて転送元・転送先用のプラグインを導入することでETLを行います。EmbulkはWindowsの他、MacOS、Linuxにも対応していますが、いずれもコマンドライン上で動作するCLIツールです。
ETLとは
- Extract(抽出)
- Transform(変換)
- Load(格納)
の略で、データ統合時に発生する各プロセスの頭文字をとったもの
Embulk関連ページ
- EmbulkのGithubリポジトリ
- Embulkのサードパーティ製プラグイン
DWH(データウェアハウス)とは?
- 直訳するとデータの倉庫
- DWHの提唱者はDWHを「DWHは意思決定のため目的別に編成され、統合された時系列で、削除や更新しないデータの集合体」と定義している
- 基幹システムを含むさまざまなデータソースからデータを集めて格納し、人間がそれらのデータを用いて分析を行い、意思決定できる環境を提供するのがDWH
BI(ビジネスインテリジェンス)とは?
ビジネスインテリジェンスは、ビジネスに関するインテリジェンス、すなわち事業上の意思決定のために情報を分析して得られる知見およびそれを得る機構である。 より具体的には、企業などの組織のデータを収集・蓄積・分析・報告することにより経営上などの意思決定に役立てる手法や技術のことである。
Embulk & DWH & BIツール の関連性
Embulk(ETLツール)
- 概要: Embulkは、異なるデータソース間でデータをバルクロード(大量転送)するためのオープンソースのデータ転送ツールです。
- 役割: 主にデータのインポート/エクスポートを担います。これには、異なるデータベース、ストレージシステム、APIからデータを収集し、変換して、目的のデータウェアハウスにロードする作業が含まれます。
- 使用例: EmbulkはCSV、JSON、SQLデータベース、NoSQLデータベース、APIなど、多様なデータソースからのデータを統合するのに使われます。
データウェアハウス(DWH)
- 概要: データウェアハウスは、組織の様々なデータソースから集めたデータを統合、保存、管理するためのシステムです。
- 役割: 主にデータの集約、整理、長期保管を担います。データは分析のために最適化された形式で格納されます。
- 使用例: データウェアハウスはビジネスの意思決定を支援するために歴史的データを保存し、分析のためにアクセス可能な状態に保ちます。
BI(ビジネスインテリジェンス)ツール
- 概要: BIツールは、データ分析とビジュアライゼーションのためのアプリケーションやソフトウェアです。
- 役割: データを分析し、洞察を得ることで、ビジネスの意思決定を支援します。これにはデータの可視化、レポート作成、ダッシュボードの提供が含まれます。
- 使用例: BIツールは、データウェアハウスからのデータを使用してトレンドを分析し、KPI(主要業績評価指標)を追跡し、結果を視覚的に表示します。
関連性
-
データフロー: Embulkを使用してデータを収集し、変換した後、データウェアハウスにロードします。その後、BIツールがこのデータを利用して分析し、ビジュアライゼーションを提供します。
-
統合プロセス: これらのツールは一連のプロセスを形成し、データが収集され、保存され、分析される方法を決定します。各ツールはデータパイプラインの異なる段階で重要な役割を担い、全体的なデータ戦略の効率性と効果性を向上させます。
-
簡単に言えば、Embulkはデータの収集と統合を担い、DWHはそのデータを安全かつ効率的に保存・管理し、BIツールはそのデータから価値ある洞察を抽出してビジネス意思決定に役立てる、という関係性があります。これらのツールを組み合わせることで、データをより有効に活用し、ビジネスプロセスを最適化することが可能になります。
(Description by ChatGPT)
Embulkと相性の良いオンプレ構築可能なDWH向きOSS
1. Apache Hadoop / Apache Hive:
- 概要: Apache Hadoopは分散処理と大規模データストレージのためのオープンソースフレームワークです。Apache HiveはHadoop上に構築されたデータウェアハウスインフラです。
- 理由: HadoopとHiveはオンプレミス環境でのデータウェアハウス構築に適しています。Embulkを使用してHadoopシステムにデータをロードし、Hiveでデータを管理・分析することができます。
2. PostgreSQL:
- 概要: 高機能なオープンソースのリレーショナルデータベース管理システム。
- 理由: PostgreSQLはオンプレミス環境に容易に設置でき、データウェアハウスとしての機能拡張が可能です。Embulkを利用して、データのインポートやエクスポートを行うことができます。
3. ClickHouse:
- 概要: 高速な列指向のデータベースシステムで、オンプレミス環境に適しています。
- 理由: ClickHouseはリアルタイムのデータ分析に強みを持ち、Embulkを通じてデータをロードすることが可能です。
4. Greenplum Database:
- 概要: オープンソースの大規模データウェアハウスソリューションで、複数のデータベースサーバーを連携させて動作します。
- 理由: Greenplumはオンプレミスでの大規模なデータウェアハウス構築に適しており、Embulkを使ってデータをロードすることができます。
embulkのpostgresqlプラグインでPostgreSQL v14以上を使用するときのJDBC Driverの設定
問題点
- PostgreSQL v14から認証方式が変更されたため、v42以上のJDBCドライバを使用していないと互換性に関する以下のエラーが発生する。
Error: java.lang.RuntimeException: org.postgresql.util.PSQLException: The authentication type 10 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it is using an authentication scheme supported by the driver.
解決策
- 以下のページから最新のJDBC Driverをダウンロードする
- inもしくはoutの
driver_path
パラメータに先程ダウンロードしたJDBC Driverのパスを指定する
in:
type: postgresql
...
driver_path: /path/to/postgresql-42-◯.◯.jar
out:
type: postgresql
...
driver_path: /path/to/postgresql-42-◯.◯.jar
dockerを使用している場合
- ローカルPCにJDBC Driverをダウンロードする
- compose.yamlのvolumesでマウント設定する
.
|-compose.yaml
|-embulk/
| |-Dockerfile.embulk
| |-postgresql-42.7.0.jar
| |-config
| | |-config.yml
version:3.8
services:
embulk:
container_name: embulk-etl
volumes:
- ./embulk/config:/usr/src/app/config
- ./embulk/postgresql-42.7.0.jar:/usr/src/app/postgresql-42.7.0.jar
- config.ymlでコンテナ内でのJDBC Driverへのパスをdriver_pathに設定する
-
WORKDIR /usr/src/app
の場合
in:
type: postgresql
...
driver_path: /usr/src/app/postgresql-42-◯.◯.jar
out:
type: postgresql
...
driver_path: /usr/src/app/postgresql-42-◯.◯.jar
config.ymlにmetadataを含めることが可能かどうか
- 以下のように、
in
とout
以外にmetadata
というパラメータを付加しても特にエラーは吐かなかった
in:
type: file
...
out:
type: postgresql
...
metadata:
name: 商品マスタ変換
description: 商品マスタを変換する
csvのカラム名とPostgresqlのカラム名を異なるものにする方法
- in側のcolumnsでnameとsrcを設定することで別名のカラム同士を接続することができる
in:
type: file
path_prefix: /usr/src/app/data/item_master/
parser:
type: csv
charset: UTF-8
newline: LF
delimiter: ','
quote: '"'
escape: '"'
trim_if_not_quoted: false
skip_header_lines: 1
columns:
- {name: id, src: item_id, type: string}
- {name: name, src: item_name, type: string}
- {name: price, src: item_price, type: long}
out:
type: postgresql
host: dwh-db
port: 5432
user: postgres
password: postgres
database: dwh_db
table: item_master
# mode: insert
mode: merge
column_options:
id: {type: VARCHAR(20) PRIMARY KEY}
name: {type: VARCHAR(50) NOT NULL}
price: {type: INT NULL}
driver_path: /usr/src/app/postgresql-42.7.0.jar
metadata:
name: 商品マスタ変換
description: 商品マスタを変換する
プラグインの種類
1. Input plugin
- 役割:データソース(例えばデータベース、ファイル、APIなど)からデータを読み込む。
2. Output plugin
- 役割:読み込んだデータを目的のデータストアやサービス(例えばデータベース、ファイルシステム、クラウドストレージなど)に書き込む。
3. Filter plugin
- 役割:データを変換、フィルタリング、加工する。データの加工や変換処理を行い、入力データを出力データに適切にマッピングする。
4. File parser plugin
- 役割:ファイル形式(CSV、JSON、Excelなど)を解析し、Embulkが処理できるデータ形式に変換する。
5. File decoder plugin
- 役割:圧縮されたファイルや特定のエンコーディング形式を持つファイルをデコードする。
6. File formatter plugin
- 役割:出力データを特定のファイル形式(CSV、JSON、Excelなど)にフォーマットする。データを出力する際に適切な形式で書き出すために使用されます。
7. File encoder plugin
- 役割:データを圧縮したり、特定のエンコーディング方式でエンコードする。出力データを圧縮やエンコードして、データ転送量を減らしたり、セキュリティを高めるために使用されます。
8. Executor plugin
- 役割:Embulkのタスクの実行方法を制御する。これはデータの読み込みや書き込みプロセスをどのように並列化または分散させるかを決定するために使用されます。
(Description by ChatGPT)
組み込みプラグイン一覧
組み込みプラグインとは
-
embulk gem install 〇〇
が必要ないプラグイン
1. Input plugin
- Local file input plugin: ローカルファイルシステム上のファイルからデータを読み込む。
2. Output plugin
- File output plugin : ローカルファイルシステムにデータを書き出す。
- stdout: 標準出力にデータを書き出す。
3. Filter plugin
- Embulkの初期バージョンには、ビルトインのフィルタプラグインは含まれていません。
4. File parser plugin
- CSV parser plugin: CSV形式のデータを解析する。
- JSON parser plugin: JSON形式のデータを解析する。
5. File decoder plugin
- Gzip decoder plugin: gzip形式のデータをデコード(解凍)する。
- BZip2 decoder plugin: bzip2形式のデータをデコードする。
6. File formatter plugin
- csv: データをCSV形式にフォーマットする。
7. File encoder plugin
- gzip: データをgzip形式で圧縮する。
- bzip2: データをbzip2形式で圧縮する。
8. Executor plugin
- local: ローカルマシン上でEmbulkタスクを実行する。
(Description by ChatGPT)
- 各組み込みプラグインの詳細は以下のページが分かりやすかった
よく使いそうなプラグイン一覧
1. Input plugin
- MySQL
- PostgreSQL
- Oracle
- JDBC
- File (csv, json)
- http
2. Output plugin
- PostgreSQL
- AzureBlobStorage
- Multi(出力先として複数設定できる)
3. Filter plugin
4. File parser plugin
5. File decoder plugin
- 特になし
6. File formatter plugin
7. File encoder plugin
- 特になし
8. Executor plugin
- 特になし
Embulkのチュートリアル
1. embulkがセットアップされた環境で、以下のコマンドを実行
embulk example
2. cwd(Current Working Directory)直下にembulk-exampleというディレクトリができていることを確認する
3. embulk-exampleディレクトリの構成は以下の通り
embulk-example
|-seed.yml
|-csv/
| |-sample_01.csv.gz
フォルダ/ファイル名 | 説明 |
---|---|
embulk-example | embulkのトライアル用サンプルディレクトリ |
seed.yml | テンプレートconfigファイル |
csv/ | 変換対象のcsvファイルを格納するフォルダ |
sample_01.csv.gz | 変換対象サンプルcsvファイル |
4. 以下のコマンドを実行
a. sample_01.csv.gzからconfigの内容を推測し、seed.ymlを基にconfig.ymlを生成するコマンド
embulk guess embulk-example/seed.yml -o config.yml
b. バルクロードトランザクションをドライランし、プレビューするコマンド
-
バルクロードトランザクション:
- データをバルク(一括)で効率的に転送する処理
-
ドライラン
- 実際にデータを転送する前にその転送プロセスを「試運転」すること
embulk preview config.yml
c. バルクロードトランザクションを実行するコマンド
embulk run config.yml
- embulk-exampleでは「csv to stdout」のconfigが生成されるため、以下のデータがターミナル上に表示されたら成功
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,