embulkの現状理解

embulkってなに?

ログ収集でよく利用されるfluentdのバッチ版のようなツールです。データベースやストレージからデータを吸い出し、別のデータベースやストレージにロードできます。YAML形式で設定ファイルを書くことで、その設定を元にEmbulkがデータを同期します。

f:id:makoo5:20220208153348p:plain

Embulk

データ同期を同期する必要性

データを分析するといえばBigQueryやRedShiftなどのDWHがイメージされると思います。それなりの規模になるとデータ分析チームなどができ、ユーザーの行動分析や売上予測などを分析することがあるかもしれません。そうなると日時などでMySQLのデータなどをBigQueryに同期して、BigQueryで解析するというようなことになってきます

Amazon AuroraからBigQueryにデータを同期するには?

BigQueryの場合はembulk-output-bigqueryというプラグインを利用すると簡単にBigQueryにデータを同期できます。 内部的には一旦GCSにデータを転送してからBigQueryにデータをロードしています。

BigQueryにはプロジェクトごとに1日に消費できるジョブ数が定められているのですが、ローカルファイルからBigQueryに直接ロードすると並列ロードするため多くのジョブを消費します。しかし、BigQueryは1つのジョブでGCSから複数のファイルを読み込むことをサポートしているため、ジョブ消費節約のために一時的にGCSに置くという方式を取っています。

なぜGCSを経由するのかという詳細はこちら

embulkの設定ファイル

in:
  type: mysql
  host: {{ host }}
  user: {{ user }}
  password: {{ password }}
  database: {{ database }}
  table: {{ table }}
  select: "*"
  options: {useLegacyDatetimeCode: false, serverTimezone: Asia/Tokyo}

out:
  type: bigquery
  mode: replace
  auth_method: json_key
  json_keyfile: json_keyfile_path
  project: project_name
  dataset: dataset_name
  table: {{ table }}
  gcs_bucket: gcs_bucket_name
  auto_create_gcs_bucket: false
  compression: GZIP
  source_format: NEWLINE_DELIMITED_JSON
  default_timezone: "Asia/Tokyo"