Embulk
Embulk — Embulk 0.8 documentation
embulk/embulk: Embulk: Pluggable Bulk Data Loader.
よく使う plugins
embulk/embulk-input-jdbc: MySQL, PostgreSQL, Redshift and generic JDBC input plugins for Embulk
sonots/embulk-filter-column: A filter plugin for Embulk to filter out columns
civitaspo/embulk-filter-expand_json
embulk/embulk-output-bigquery: Embulk output plugin to load/insert data into Google BigQuery 👉BigQuery
with Docker
Embulk は Java8
Embulk v0.9 series runs on Java 8. Java 9 is not supported in any version for the time being.
openjdk - Docker Hub
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 wget -q "https://dl.embulk.org/embulk-latest.jar" -O /usr/local/bin/embulk
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 .
ENTRYPOINT "java", "-jar", "/usr/local/bin/embulk"
CMD "run", "embulk.yaml"
Liquid テンプレートを使う
Embulk: Configuration
Using variables のセクション
To use template engine, configuration file name must end with .yml.liquid.
環境変数を使ってEmbulkで変数を - Qiita
Embulkの設定ファイルをincludeで共有化する方法 - Qiita
input
mysql で binaray カラムを扱う
column_option で { value_type: string } するとよい
blob 型のカラムに JSON など入れている場合パースできないので
SELECT CONVERT(blob_column USING utf8mb4) AS text_column などで文字列として取得する
output
unsigned bigint カラム
id など数値で扱いたいことはあまりない & DataStudio などで扱うときに精度でコケる
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 の場合うまくいかないケースがある気がする...
リンク集
数百GBのデータをMySQLからBigQueryへ同期する - Mercari Engineering Blog
83億レコードを移行し、日々2,500万レコードのアクセスログをBigQueryに記録している話(インフラ編) | Money Forward Engineers' Blog
Embulk(エンバルク)プラグインのまとめ - Qiita
#dev