case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

Embulkプラグイン開発備忘録

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オプションを使います。

qiita.com

./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