embulkの現状理解
embulkってなに?
ログ収集でよく利用されるfluentdのバッチ版のようなツールです。データベースやストレージからデータを吸い出し、別のデータベースやストレージにロードできます。YAML形式で設定ファイルを書くことで、その設定を元にEmbulkがデータを同期します。
データ同期を同期する必要性
データを分析するといえばBigQueryやRedShiftなどのDWHがイメージされると思います。それなりの規模になるとデータ分析チームなどができ、ユーザーの行動分析や売上予測などを分析することがあるかもしれません。そうなると日時などでMySQLのデータなどをBigQueryに同期して、BigQueryで解析するというようなことになってきます
- Embulkを利用したデータ転送基盤の構築 - ZOZO TECH BLOG
- DigdagとEmbulkを利用してBigQueryにRDS(Aurora、MySQL)のマスタデータを同期する - Qiita
- 数百GBのデータをMySQLから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"