Embulk
よく使う plugins
with Docker
Embulk は Java8
Embulk v0.9 series runs on Java 8. Java 9 is not supported in any version for the time being.
java ビルドしないなら jre でいい & slim が小さいやつ
openjdk:8-jre-slim-buster を使うとよい
code:Dockerfile.embulk
FROM openjdk:8-jre-slim-buster
RUN apt-get update && apt-get install -y wget \
&& apt-get clean && rm -rf /var/lib/apt/lists/*
RUN chmod +x /usr/local/bin/embulk
# plugins
RUN embulk gem install embulk-input-mysql -v 0.10.1
RUN embulk gem install embulk-output-bigquery -v 0.6.4
WORKDIR /workspace
COPY service-account-key.json .
COPY embulk.yaml .
Liquid テンプレートを使う
Using variables のセクション
To use template engine, configuration file name must end with .yml.liquid.
input
mysql で binaray カラムを扱う
column_option で { value_type: string } するとよい
blob 型のカラムに JSON など入れている場合パースできないので
SELECT CONVERT(blob_column USING utf8mb4) AS text_column などで文字列として取得する
output
unsigned bigint カラム
column_option で { value_type: string } を指定しておくと安心
outside valid range for the datatype BIGINT.
Error: java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLDataException: '15951968889705857038' in column '1' is outside valid range for the datatype BIGINT.
UNSIGNED BIGINT のカラムを BIGINT として扱ってしまって範囲を越えている
9223372036854775807 < n <= 18446744073709551615
これも column_option で string にしてしまうしかない気がする
source_format: NEWLINE_DELIMITED_JSON
デフォルトの csv だとネストした構造を RECORD 型に入れたりできない(ネストがほぐされるので)
source_format を NDJSON にすると embulk でよしなに変換してくれる
max_bad_records: 10
構造にエラーがある場合に許容する数
改行含む & csv の場合うまくいかないケースがある気がする...
リンク集