Embulkにパッチを当てるための備忘録です。
Embulkのoutput pluginのリトライ処理を直しました。
github.com
SQL Serverのinput pluginにパッチを当てるために利用
github.com
github.com
事前準備
Embulkを使えるようにします。
curl --create-dirs -o /bin/embulk -L "https://github.com/embulk/embulk/releases/download/v0.9.23/embulk-0.9.23.jar" && chmod +x /bin/embulk
Ruby
fork
git clone git@github.com:embulk/embulk-output-bigquery.git
bundle install
bundle installをしないとプラグインが見つかりません。
embulk plugin developer guide (WIP) · GitHub
cd embulk-output-bigquery
./bin/embulk bundle install
適当なYMLファイルを作ります。
example.yml
in: type: file path_prefix: /usr/src/app/embulk-output-bigquery/example/example.csv parser: type: csv charset: UTF-8 newline: CRLF null_string: 'NULL' skip_header_lines: 1 comment_line_marker: '#' columns: - {name: date, type: string} - {name: timestamp, type: timestamp, format: "%Y-%m-%d %H:%M:%S.%N", timezone: "+09:00"} - {name: "null", type: string} - {name: long, type: long} - {name: string, type: string} - {name: double, type: double} - {name: boolean, type: boolean} out: type: bigquery project: '<project>' dataset: '<dataset>' table: 'ShopContentsControl' schema_file: embulk-output-bigquery/example/schema.json mode: replace auth_method: json_key json_keyfile: /usr/src/app/embulk-output-bigquery/example/service_acoount.json gcs_bucket: 'beam-test-tani' auto_create_dataset: false with_rehearsal: false auto_create_gcs_bucket: false open_timeout_sec: 1800 send_timeout_sec: 1800 read_timeout_sec: 1800 retries: 5 compression: NONE source_format: NEWLINE_DELIMITED_JSON job_status_max_polling_time: 36000 default_timezone: "Asia/Tokyo"
実行
Rubyの場合は-Iオプションを使います。
./bin/embulk run -I lib ./example/example.yml
Java
fork
git clone git@github.com:embulk/embulk-input-jdbc.git
ビルド
マルチプロジェクトになってるため、ルートプロジェクでビルドするとサブプロジェクトもビルドされます。
cd embulk-input-jdbc
./gradlew gem
YMLファイルを準備
example.yml
in: type: sqlserver host: 0.0.0.0 port: 1433 user: SA password: <password> database: <database> query_timeout: 5 query: | select * from <table> out: type: stdout
実行
以下のようにしてビルドしたプロジェクトをしてい意します。
注意点としてビルドによって作られるgemのパスがシングルプロジェクトの場合と異なることです。
僕はここにハマって、ビルドしているのにプラグインが見つからない状態でした
./bin/embulk run -L ./embulk-input-jdbc/embulk-input-sqlserver/build/gemContents ./embulk-input-jdbc/example.yml
自作プラグインを作る場合(JAVA)
./bin/embulk new java-input embulk-input-plugin
ビルド
cd embulk-input-plugin
./gradlew package
./gradlew gem
ymlを準備
example_plugin.yml
in: type: embulk-input-plugin option1: 1 columns: - {name: id, type: long} out: type: "null"
実行
マルチプロジェクトの場合と比べパスが異なります。
./bin/embulk run -L embulk-input-plugin embulk-input-plugin/embulk_sample.yml