git cloneすればembulkやgolangのインストールは不要です
以下のリポジトリにハンズオンを用意しています。dockerやmakeコマンドを用意して環境構築をスキップできるようにしているので、ぜひcloneしてハンズオンをしてみてください。
ハンズオンの手順
ここに列挙してある手順を実行したらpostgresにテーブルを作ってデータを登録し、そのデータをEmbulkを使ってcsv化することができます。
うまくいかない箇所などありましたらコメントいただけたらと思います。記載漏れの可能性があります。
git clone https://github.com/tkanata/embulk-hands-on-postgresql2csv.git
docker-compose build
docker-compose up -d
-
make init
a. postgresにテーブルを生成するmakeコマンドです。 - config.ymlの作成
a. 今回はすでに作成済みですが、削除して自分で書いてみるのもいいと思います。 -
docker exec -it embulk bash
a. dockerコンテナの中に入るコマンド。 -
embulk run config.yml
a. コンテナ内でのembulkコマンドの実行。これで./output_file/
直下にteas.csvが生成されるはず。
DB構築
docker-compose up
あるいはdocker-compose up -d
コマンドを叩くことでpostgresの環境が構築されます。
テーブルの生成についてはentというgolangのライブラリを用いて行なっていきます。
entでテーブル生成
make init
あるいはmake init-arm64
コマンドを叩いたらposrgresにテーブルが生成されるようになっています。
postgresqlからcsvを生成するconfig.ymlの作成
in:
type: postgresql
host: postgres
port: 5432
user: postgres
password: password
database: embulk-handson
table: teas
select: "*"
out:
type: file
path_prefix: ./output_file/
sequence_format: "teas."
file_ext: csv
formatter:
type: csv
delimiter: ","
newline: CRLF
newline_in_field: LF
charset: UTF-8
quote_policy: MINIMAL
quote: '"'
escape: "\\"
null_string: "\\N"
default_timezone: "Asia/Tokyo"
header_line: true
docker-composeを利用している場合、ホストマシンのサービスにアクセスする際にはサービス名(postgres)を利用できるため、inputの設定のhostはpostgresを指定しています。
ここをlocalhostにしてしまうと、Dockerコンテナ内のlocalhostを探してしまうため、DBへの接続エラーが発生してしまいます。
config.yml削除して再作成したら、docker-compose build
コマンドを再実行してください。
Dockerfileを読むとわかるのですが、ホストマシン(つまりあなたが今使っている手元のPC)にあるconfig.ymlをDockerコンテナにCOPYするコマンドが記載されています。
config.ymlがDockerコンテナ内に存在しないとembulkコマンドは失敗するので注意してください。
git cloneした時のconfig.ymlを使っている場合は最初に実行したbuildコマンドでconfig.ymlがDockerコンテナにCOPYされているので再度buildコマンドを実行する必要はありません。
Embulkの実行
docker exec -it embulk bash
を実行し、Dockerコンテナの中に移動します。
Dockerコンテナに移動できたら、embulk run config.yml
を叩くことでembulkが実行されます。
実行すると指定したディレクトリにcsvが生成されているはずです。
Embulkをローカルにインストールしたい方は以下を参考にするといいかと思います
intel版のMacを使っている方はbrew install embulk
でインストールできます。
M1Macを使用している場合は、このコマンドではインストールできません。
下記記事を参考にして、intel環境のシェルでインストールしてください。
M1 macでIntelな環境のシェルを使ったCronジョブを流したりする
embulk-input-postgresqlというプラグインのインストール
Embulkでpostgresqlからデータを取得するためには、embulk-input-postgresql
というプラグインが必要となります。
https://github.com/embulk/embulk-input-jdbc/tree/master/embulk-input-postgresql
プラグインをインストールする前にプラグインを管理する準備をしましょう
Embulkはさまざまなpluginをインストールすることで各種DBからデータを抽出したり、任意のcsvを生成するように拡張することができます。
pluginのインストールはGemのインストールという形で行われます。
GemはGemfileにて管理されるのですが、GemfileによるGemの管理をしやすくするのがmkbundleというコマンドです。
embulk mkbundle bundle
というコマンドを実行すると、実行場所にbundle
というディレクトリが作成されます。
bundle直下にはGemfileなどが生成され、このGemfileを編集することでGemを管理することができます。
bundle/Gemfileにてgemの管理を行うためには、以下のようにbundleディレクトリ配下でpluginをインストールします。
bundle add PLUGIN-NAME
最後に、bundleディレクトリ直下で以下を実行してgemをインストールします。
bundle install