はじめに
TROCCOは多様なサービスとのデータ連携を自動化できるクラウドETLサービスです。画面上の操作によりデータパイプラインを作成することができます。
本記事では、MySQLのデータをDr.Sumで活用する方法を紹介します。エンジニアはBigQueryにデータを集約する一方で、営業や経理ではDr.SumのデータをDatalizer for ExcelやMotionBoardなど使い慣れたツールから参照している、という環境を想定し、以下の2つのユースケースを取り上げます。
- ユースケース1: 業務データをDr.Sumに届ける(MySQL → Dr.Sum)
- ユースケース2: BigQueryにデータを集約しつつ、整形・品質チェックしてDr.Sumに届ける(MySQL → BigQuery → Dr.Sum)
本記事にて取り扱うデータ
販売管理システムを想定し、以下のような受注(orders)と商品マスタ(products)のデータを例として扱います。
受注(orders):
| order_id | order_date | customer_name | product_code | amount | updated_at |
|---|---|---|---|---|---|
| 1001 | 2026-10-01 | 株式会社あおぞら商事 | P-001 | 150000 | 2026-10-01 10:12:00 |
| 1002 | 2026-10-02 | 株式会社みどり物産 | P-002 | 80000 | 2026-10-02 09:30:00 |
商品マスタ(products):
| product_code | product_name | category | unit_price |
|---|---|---|---|
| P-001 | オフィスチェア | 家具 | 15000 |
| P-002 | 会議テーブル | 家具 | 40000 |
ユースケース1:MySQLのデータをDr.Sumに取り込む
販売管理システムの受注データをDr.Sumに転送することで、営業や経理の担当者が使い慣れた環境で売上の集計や分析に活用できます。ここでは、日々更新される受注データを差分転送で取り込む方法を紹介します。
本記事ではインターネット経由で接続可能な環境を前提とした設定を紹介していますが、オンプレミス上のMySQLからDr.Sumへの転送もSelf-Hosted Runner | TROCCO Docsで実現できます。
転送設定の作成
データ転送 > 転送設定 > 新規転送設定作成 から、転送元にMySQL、転送先にDr.Sumを指定して転送設定を作成します。
転送元MySQLの設定
転送方法は「クエリを使用して転送」と「差分転送」から選択できます。日々更新される受注データを効率よく取り込むため、ここでは「差分転送」を使います。
- データベース:販売管理システムのデータベース
- 転送方法:差分転送 (前回転送時からの増分データのみ転送)
- テーブル:
orders - 増分データを判別するカラム:
updated_at - 最後に転送されたレコード:空欄
「増分データを判別するカラム」には、レコードの最終更新日時を判定できるカラムとして updated_at を指定しています。
「最後に転送されたレコード」は、空欄にした場合、初回の転送で過去の全レコードを転送し、転送したレコードの中から updated_at の最大値を「最後に転送されたレコード」に記録します。2回目以降の転送では、「最後に転送されたレコード」に記録された値よりも大きい値のレコードのみ転送し、「最後に転送されたレコード」の値を更新します。これにより、前回の転送時から更新されたレコードのみ、転送を行っていきます。
転送先Dr.Sumの設定
差分転送で取得したレコードを、一意の値が入る order_id をキーとしてUPSERTします。転送先のテーブルに同じ order_id がない場合は新規にレコードを追加し、ある場合は既存のレコードを上書きするため、Dr.Sum上の orders が重複なく最新の状態に保たれます。
- データベース:
sales_db - テーブル:
orders - 転送モード:UPSERT(MERGE)
- マージキー:
order_id
カラム定義を確認
STEP2に進むと、転送元からデータを取得してカラム定義が自動で作成されます。amount がlong型(数値型)、order_date や updated_at がtimestamp型になっていることなどを確認します。スキーマ・データのプレビューでは、転送元から取得したデータを確認できます。
設定を保存
STEP3に進むと、転送設定の内容がYAML定義で表示されます。「保存して適用」をクリックすると転送設定を保存します。
これで転送設定の作成は完了です。
転送ジョブを実行する
作成した転送設定を実行すると、MySQLの受注データがDr.Sumに転送されます。手動で実行する場合は転送設定の右上の「実行」から実行画面に進むことができます。
転送設定の「スケジュール設定」でスケジュールを設定することで、定期的に実行することもできます。
ユースケース2:MySQLのデータをBigQueryに集約し、整形したデータをDr.Sumに取り込む
受注と商品マスタのデータをBigQueryに集約し、受注データに商品名とカテゴリを付与したデータを作成してDr.Sumに転送します。作成したデータには一意性とNOT NULLのチェックも行うため、Dr.Sumには品質を確認した状態でデータを届けることができます。
全体の流れ
次のような流れで、MySQLの受注と商品マスタのデータをDr.Sumまで届けます。
- MySQLのデータをBigQueryに転送する
- BigQueryでデータを結合する
- BigQueryのデータをDr.Sumに転送する
受注データと商品マスタをBigQueryに取り込む
MySQLの受注データと商品マスタをBigQueryに取り込むため、転送設定を2つ作成します。 データ転送 > 転送設定 > 新規転送設定作成 から、転送元にMySQL、転送先にGoogle BigQueryを指定して作成します。「設定タイプを選択」というウィンドウが表示されますので、ここでは「通常モード (データ転送)」を選択して先に進みます。
受注の転送設定
受注(orders)をBigQueryに転送する設定を作成します。ユースケース1と同様、「差分転送」にてデータを取得し、一意の値が入るカラムをキーとして「UPSERT」で転送先にレコードを挿入します。
転送元MySQLの設定:
- データベース:販売管理システムのデータベース
- 転送方法:差分転送 (前回転送時からの増分データのみ転送)
- テーブル:
orders - 増分データを判別するカラム:
updated_at - 最後に転送されたレコード:空欄
転送先Google BigQueryの設定:
- データセット:
raw - テーブル:
orders - 転送モード:UPSERT(MERGE)
- マージキー:
order_id
商品マスタの転送設定
商品マスタ(products)はテーブル全体をつねに最新の状態に保つため、全件を取得して転送先のデータを入れ替えます。転送元では「クエリを使用して転送」を選択し、転送先では「全件洗い替え」を選択します。
転送元MySQLの設定:
- データベース:販売管理システムのデータベース
- 転送方法:クエリを使用して転送
- クエリ:
SELECT * FROM products
転送先Google BigQueryの設定:
- データセット:
raw - テーブル:
products - 転送モード:全件洗い替え(REPLACE)
既存の転送設定を複製し、転送方法や転送モードなど一部の設定だけを修正することで、効率的に転送設定を作成できます。修正にあわせてカラム定義の更新が必要ですので、STEP2への遷移時には自動データ設定を実行してください。
転送ジョブを実行する
この後の手順では、受注データと商品マスタのデータからデータマート定義を作成します。定義を作成するためにはBigQueryにデータが存在している必要があるため、転送ジョブを実行してテーブルを作成します。
受注データと商品マスタからデータマートを作成する
データマート定義は、BigQueryなどのDWHに対してクエリを実行してその結果を別のテーブルとして書き出すことができます。ここでは、先ほどBigQueryに取り込んだ受注データに商品マスタの商品名とカテゴリを付けたテーブルを作ります。
データマート定義の作成
データマート > データマート定義 > 新規データマート定義作成 から、Google BigQueryのデータマート定義を作成します。
STEP2:データ取得設定
STEP2では、実行するクエリや出力先のテーブル、書き込み方法を設定します。
データ取得設定:
書き込みモードは「増分更新」を指定して、増分を転送先に反映するようにします。
- クエリ実行モード:データ転送モード
- 書き込みモード:増分更新
クエリ設定:
クエリは、受注データ(orders)に商品マスタ(products)を product_code で結合し、商品名(product_name)とカテゴリ(category)を付加します。クエリを設定して「プレビューを実行」(プレビューを再実行)をクリックすると、クエリにより生成されるデータを確認できます。
- 出力先データセット:
mart - 出力先テーブル:
orders_enriched - クエリ:
SELECT
o.order_id,
o.order_date,
o.customer_name,
o.product_code,
p.product_name,
p.category,
o.amount,
o.updated_at
FROM raw.orders o
LEFT JOIN raw.products p ON o.product_code = p.product_code
増分更新設定:
キーが一致するレコードを判定するため、キーカラムには一意の値が入る order_id を指定します。
- キーカラム:
order_id - キーが一致するレコードが存在した場合の挙動:上書き
- 処理対象期間:全データを対象にする
データ量が多い場合は、処理対象期間を「範囲を指定する」にして updated_at を基準として範囲を絞ることで、効率的に処理が行えます。
STEP3:品質チェック設定
STEP3では、出力したデータに一意性とNOT NULLの確認を設定できます。ここでは、受注が重複していないこと(order_id の一意性)と、各レコードに商品名が付いていること(product_name のNOT NULL)を確認します。
もし受注データに商品マスタにないコードの商品が入ってきてしまった場合、product_name がNULLになります。品質チェックは、orders_enriched にデータが書き込まれた後に実行されるため、そのNULLを検知してジョブをエラーとして扱います。
- 一意性チェック:
order_id - NOT NULLチェック:
product_name - 失敗時の挙動:ジョブ失敗として扱う
- 品質チェック対象データ設定:全データを対象にチェックする
データマートジョブを実行する
この後の処理では、orders_enriched テーブルのデータをDr.Sumに転送します。転送設定を作成するには転送元のテーブルが存在している必要があるため、データマートを実行してテーブルを作成します。
データマート定義の右上の「実行」をクリックして実行画面に遷移し、データマートを実行します。ジョブが成功すると orders_enriched テーブルに以下のようなデータが挿入されます。
| order_id | order_date | customer_name | product_code | product_name | category | amount | updated_at |
|---|---|---|---|---|---|---|---|
| 1001 | 2026-10-01 | 株式会社あおぞら商事 | P-001 | オフィスチェア | 家具 | 150000 | 2026-10-01 10:12:00 |
| 1002 | 2026-10-02 | 株式会社みどり物産 | P-002 | 会議テーブル | 家具 | 80000 | 2026-10-02 09:30:00 |
BigQueryのデータをDr.Sumに転送する
orders_enriched テーブルのデータをDr.Sumに転送する設定を作成します。 データ転送 > 転送設定 > 新規転送設定作成 から、転送元にGoogle BigQuery、転送先にDr.Sumを指定して作成します。
転送元Google BigQueryの設定
転送元にはデータマートで作成した orders_enriched テーブルからデータを取得するSQLを指定します。
- SQL:
SELECT * FROM mart.orders_enriched
データ量が多い場合は、SQLの WHERE 句で updated_at の範囲を指定して取得すると効率的に転送できます。日付の指定には「時刻・日付(キューイング時)型」のカスタム変数を使うことで、ジョブの再実行の際にも当初と同じ日付の範囲で処理できます。
また転送元Google BigQueryでは、一時テーブルの作成に使用するデータセットと一時テーブルのエクスポート先としてGoogle Cloud Storageのバケットの指定が必要です。
- 一時テーブル作成先データセット:一時テーブルの作成先のデータセットを指定
- 一時データエクスポート指定
- バケット名:転送するデータを一時的にエクスポートするバケットを指定
- 一時データのファイル形式:CSV
転送先Dr.Sumの設定
order_id をキーとしてUPSERTします。
- データベース:
sales_db - テーブル:
orders_enriched - 転送モード:UPSERT(MERGE)
- マージキー:
order_id
ここまでで、一連の処理に必要な転送設定とデータマート定義の作成が終わりました。
処理を1つにまとめて自動化する
MySQLからBigQuery、そしてDr.Sumに続くデータの処理を順番に自動実行するため、ワークフローを作成します。
ワークフロー > ワークフロー定義 > 新規ワークフロー作成 をクリックすると、ワークフロー定義の新規作成画面が表示されます。ワークフロー名を入力して保存すると、フロー編集画面に進みます。
フロー編集の画面では、左側の「タスク追加」の「TROCCO転送ジョブ」と「TROCCOデータマートジョブ」から、作成した転送設定とデータマート定義を追加します。以下の画像のように、①受注と商品マスタのデータの取り込み、②2つのデータからデータマートの作成、③Dr.Sumへの転送、という順番で実行されるようにタスクをつなぎ、設定を保存します。
①の2つのタスクから②のタスクにつなぐことで、2つのタスクの完了を待ってから次のタスクが実行されます。一方のタスクが完了する前に後続のタスクが実行されてしまうことを防げます。
また、タスクがエラーになった場合は、後続のタスクは実行されません。例えばデータマートの実行で品質チェックに失敗した場合はジョブがエラーになり、Dr.Sumへの転送は実行されません。これにより、品質を確認できたデータだけがDr.Sumに届きます。
ワークフロー全体設定
ワークフロー全体設定では、ワークフローのタイムアウトやリトライなどの設定が行えます。フロー編集のあとに設定する場合は、ワークフローの設定画面の右上の「編集」から開けます。
今回作成したワークフローでは、受注と商品マスタのデータの取り込みのタスクが並列のタスクとなっています。「タスク同時実行上限数」を2に設定することで、2つのタスクを並列して動かすことができます。
- タスク同時実行上限数:2
ワークフロージョブの実行
ジョブの実行はワークフローの右上の「実行」から手動で実行することができます。ジョブの詳細画面では、各タスクごとに成功/失敗を確認できます。
以下のジョブでは各タスクが緑のチェックが入っており、全てのタスクが成功していることが確認できます。
以下のジョブでは、データマートジョブタスクがエラーになっています。後続の転送ジョブタスクは実行されていないことが確認できます。
まとめ
業務データをDr.Sumで活用するとき、元のデータをそのままDr.Sumに転送することも、DWHを経由してデータを加工してから転送することもできます。どちらの場合も、Dr.Sumのユーザーは使い慣れた環境をそのまま利用でき、その裏側のデータ供給を仕組化してデータをスムーズに活用できます。



















