Fivetran で Aurora MySQL のデータを BigQuery に同期してみた

Fivetran で Aurora MySQL のデータを BigQuery に同期してみた

Clock Icon2025.05.19

はじめに

Fivetran で Aurora MySQL のデータを BigQuery にロードしてみましたので、本記事で手順をまとめてみます。

Aurora MySQL との連携

Fivetran で Aurora MySQL をデータソースとする際の特徴は以下の通りです。

https://fivetran.com/docs/connectors/databases/mysql/aurora-setup-guide

前提条件

  • MySQL version 5.6.13 以上

接続方法

  • 直接接続(TLSが必要)
  • SSH トンネル
  • AWS PrivateLink を使用して接続
  • プロキシエージェントを使用して接続

増分同期の方法

Fivetran は、以下の増分同期方法をサポートしています。

  • バイナリログ
    • バイナリログの有効化が必要
      • ログの保持期間は少なくとも 24時間の設定が必要
  • Fivetran Teleport Sync
    • 追加の設定は不要。ただし、以下の制約があります
      • 同期可能なテーブル数の上限:400
      • テーブルごとの行数制限:2,000万レコード

詳細は以下をご参照ください。

https://fivetran.com/docs/connectors/databases/mysql#updatingdata

検証環境

以下の環境を使用しています。

  • 宛先
    • Google BigQuery
  • データソース
    • Amazon Aurora MySQL:バージョン 3.08.2、MySQL 8.0.39 互換
    • プライベートサブネットに構築しプライベートネットサブネットに構築し、SSH サーバーからのアクセスを許可
  • 接続方法
    • SSH トンネル
    • SSH サーバーをパブリックサブネットに構築し、Fivetran IP からの接続を許可する
  • SSH サーバー
    • OS:Amazon Linux 2023
    • インスタンスタイプ:t2.micro
    • ローカルから SSH 接続可能
  • 同期方法
    • バイナリログ

事前準備

データベースはプライベートサブネット上に構築するので、SSH サーバーも兼ねた踏み台サーバーをパブリックサブネットに構築し、データベースにアクセスできるようにしておきます。

  • クライアントのインストール
sudo dnf install mariadb105

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/mysql-install-cli.html

  • サンプルデータの作成
-- データベース(スキーマ)作成
CREATE DATABASE sample_db;
USE sample_db;

-- サンプルテーブル作成
CREATE TABLE customers (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

-- レコードを追加
INSERT INTO customers (first_name, last_name, email)
VALUES
  ('Taro', 'Yamada', 'taro.yamada@example.com'),
  ('Hanako', 'Suzuki', 'hanako.suzuki@example.com'),
  ('John', 'Smith', 'john.smith@example.com');

-- データを確認
SELECT * FROM customers; 

MySQL 側の設定

Fivetran 用ユーザーの作成

Fivetran で同期を行う専用のユーザーを作成し、以下のコマンドでレプリケーション権限を付与します。

CREATE USER fivetran_user@'%' IDENTIFIED BY '<パスワード>';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO fivetran_user@'%';
GRANT EXECUTE ON PROCEDURE mysql.rds_kill to 'fivetran_user'@'%';
GRANT SELECT ON mysql.rds_heartbeat2 TO fivetran_user@'%';
GRANT SELECT ON mysql.rds_configuration TO fivetran_user@'%';

バイナリログを構成する

データベース作成後は、以下のようになっています。

> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+

DB クラスターパラメータグループを編集しbinlog_formatを ROW に変更します。

image

変更後、再起動し設定を確認します。

> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+

> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+

バイナリログの保持期間を設定する

Fivetran でバイナリログによる同期を行う際はデータベースがバイナリログを少なくとも 24時間保持する必要があります。

現在の設定を表示

> CALL mysql.rds_show_configuration;
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| name                   | value | description                                                                                          |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| binlog retention hours | NULL  | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
+------------------------+-------+------------------------------------------------------------------------------------------------------+

バイナリログの保持期間が 24 時間未満またはNULLの場合、保持期間を延長します。
※NULL:デフォルトの動作。バイナリログファイルを可能な限り迅速に削除する。

保持期間は 24時間以上であればよいですが Fivetran としては 7日間(168時間)の保持期間を推奨しています。注意点として、保持期間を延長すると、一度に保存されるログファイルの数が増えるため、データベースに追加のディスク領域が必要になります。
ここでは 24 時間に設定しました。

CALL mysql.rds_set_configuration('binlog retention hours', 24);

> CALL mysql.rds_show_configuration;
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| name                   | value | description                                                                                          |
+------------------------+-------+------------------------------------------------------------------------------------------------------+
| binlog retention hours | 24    | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
+------------------------+-------+------------------------------------------------------------------------------------------------------+

バイナリログをローテーションする毎日のイベントを作成する

この手順はオプションになります。

バイナリログは、保持期間ごとに少なくとも1回ローテーションする必要があります。
バイナリログのローテーションにより、削除予定の期限切れバイナリログファイルに最新の行変更が書き込まれるのを防ぎます。ログが十分な頻度でローテーションされるようにするには、24 時間ごとにバイナリ ログを自動的にローテーションするイベントを作成できます。こちらもドキュメントに手順があります。

> SHOW VARIABLES like 'event_scheduler';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

--イベントを作成
USE sample_db;

CREATE EVENT rotate_binlog_24_hrs_event
    ON SCHEDULE EVERY 24 hour
    DO FLUSH BINARY LOGS;

> SHOW EVENTS;
+-----------+----------------------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| Db        | Name                       | Definer | Time zone | Type      | Execute at | Interval value | Interval field | Starts              | Ends | Status  | Originator | character_set_client | collation_connection | Database Collation |
+-----------+----------------------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+
| sample_db | rotate_binlog_24_hrs_event | admin@% | SYSTEM    | RECURRING | NULL       | 24             | HOUR           | 2025-05-15 02:53:08 | NULL | ENABLED | 1890571333 | utf8mb3              | utf8mb3_general_ci   | utf8mb4_0900_ai_ci |
+-----------+----------------------------+---------+-----------+-----------+------------+----------------+----------------+---------------------+------+---------+------------+----------------------+----------------------+--------------------+

MySQL 側の設定は以上で完了です。

SSH トンネルのための設定

今回はデータベースへの接続に SSH トンネルを使用するので、SSH サーバーで以下を実行し専用のユーザーを作成します。

#グループを作成
sudo groupadd fivetran
#ユーザーを作成
sudo useradd -m -g fivetran fivetran
#ユーザーに切り替え
sudo su - fivetran
#.ssh ディレクトリを作成
mkdir ~/.ssh
#権限設定
chmod 700 ~/.ssh
#作成したディレクトリに移動
cd ~/.ssh
#ファイルを作成
touch authorized_keys
#ファイルの権限を設定
chmod 600 authorized_keys

こちらの詳細は以下をご参照ください。

https://dev.classmethod.jp/articles/fivetran-sorce-database-ssh-tunnel-try/

Fivetran 側の設定

Destination

データの連携先には BigQuery を使用しました。こちらの手順は、以下の記事をご参照ください。

https://dev.classmethod.jp/articles/fivetran-set-bigquery-as-destination-202505/

Connection

Aurora MySQL をソースとするコネクションを追加します。

image 1

各種接続設定は、検証環境の条件に記載の通りとしました。

接続情報

image 2

接続方法:SSH トンネル

image 3

SSH トンネルの場合「Public Key」欄に公開鍵が生成されるので、この内容を先ほど SSH サーバー側で作成した「authorized_keys」に追加します。

vi authorized_keys

同期方法:バイナリログ
スキーマ名についての詳細はこちらをご参照ください。

image 4

接続テスト実施後、同期するデータ(データベース・テーブル)を選択できます。同期用のユーザーで参照権限のあるテーブルが表示されるので、ここでは先の手順で作成したデータベース・スキーマとそのテーブルを選択しました。

image 5

続けて、許可する変更を選択します。

image 6

以上で設定完了です。「Start Initial Sync」で初期同期を開始します。

image 7

同期完了後、BigQuery 側を確認すると以下のようにレコードの追加を確認できます。

$ bq query --nouse_legacy_sql 'SELECT * FROM `sample_db.customers`'
+-------------+------------+-----------+---------------------------+---------------------+-------------------+---------------------+
| customer_id | first_name | last_name |           email           |     created_at      | _fivetran_deleted |  _fivetran_synced   |
+-------------+------------+-----------+---------------------------+---------------------+-------------------+---------------------+
|           1 | Taro       | Yamada    | taro.yamada@example.com   | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           3 | John       | Smith     | john.smith@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
+-------------+------------+-----------+---------------------------+---------------------+-------------------+---------------------+

主キーありテーブルの変更動作を確認

MySQL では主キーの有無に関わらず同期をサポートしているので、各種変更動作を確認します。

レコードの追加

MySQL 側でレコードを追加します。

INSERT INTO customers (first_name, last_name, email)
VALUES
  ('Ichiro', 'Tanaka', 'ichiro.tanaka@example.com'),
  ('Sakura', 'Kobayashi', 'sakura.kobayashi@example.com'),
  ('Emily', 'Johnson', 'emily.johnson@example.com');

同期後 BigQuery 側で確認します。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
|           4 | Ichiro     | Tanaka    | ichiro.tanaka@example.com    | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:46 |
|           5 | Sakura     | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 |
|           6 | Emily      | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 |
|           1 | Taro       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           3 | John       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |

レコードの更新

MySQL 側でレコードを更新します。

UPDATE customers
SET email = 'ichiro.t@example.com'
WHERE customer_id = 4;

同期後、BigQuery 側で確認します。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
|           1 | Taro       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           3 | John       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           4 | Ichiro     | Tanaka    | ichiro.t@example.com         | 2025-05-15T10:00:53 |             false | 2025-05-16 03:35:34 |
|           5 | Sakura     | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 |
|           6 | Emily      | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+

レコードの削除

MySQL 側でレコードを削除します。

DELETE FROM customers
WHERE customer_id = 6;

同期後、BigQuery 側で確認すると [_fivetran_deleted] が True となる形で更新されます(論理削除)。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+
|           1 | Taro       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           3 | John       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 |
|           5 | Sakura     | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 |
|           4 | Ichiro     | Tanaka    | ichiro.t@example.com         | 2025-05-15T10:00:53 |             false | 2025-05-16 03:35:34 |
|           6 | Emily      | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |              true | 2025-05-16 03:37:29 |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+

カラムの追加

テーブルにカラムを追加します。

ALTER TABLE customers
ADD COLUMN phone_number VARCHAR(20);

同期後、BigQuery 側で確認します。問題なく反映されていました。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+--------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   | phone_number |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+--------------+
|           1 | Taro       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL         |
|           3 | John       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL         |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL         |
|           5 | Sakura     | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 | NULL         |
|           4 | Ichiro     | Tanaka    | ichiro.t@example.com         | 2025-05-15T10:00:53 |             false | 2025-05-16 03:35:34 | NULL         |
|           6 | Emily      | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |              true | 2025-05-16 03:37:29 | NULL         |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+--------------+

カラム名の変更

こちらはドキュメントいによるとサポートされていません。試しに以下の手順でカラム名を変更してみます。

ALTER TABLE customers
RENAME COLUMN last_name TO family_name;

この状態では反映されなかったので、レコードをさらに追加します。

INSERT INTO customers (first_name,family_name,email,phone_number)
VALUES (
  'Ken','Takahashi','ken.takahashi@example.com','080-1234-5678'
  );

BigQuery 側で再度確認すると以下のようになっており、カラム名を変更した場合、旧カラムと新カラムの両方がテーブル内に表示され、新しいカラムにのみデータが更新されます(古いカラムのデータが自動的に新しいカラムに移行するようなことはありません)。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   | phone_number  | family_name |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+
|           1 | Taro       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           3 | John       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           2 | Hanako     | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           5 | Sakura     | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 | NULL          | NULL        |
|           4 | Ichiro     | Tanaka    | ichiro.t@example.com         | 2025-05-15T10:00:53 |             false | 2025-05-16 03:35:34 | NULL          | NULL        |
|           6 | Emily      | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |              true | 2025-05-16 03:37:29 | NULL          | NULL        |
|           7 | Ken        | NULL      | ken.takahashi@example.com    | 2025-05-16T03:47:57 |             false | 2025-05-16 03:48:36 | 080-1234-5678 | Takahashi   |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+

カラムの削除

テーブル カラムを削除してみます。

ALTER TABLE customers
DROP COLUMN first_name;

この場合、削除したカラムの値が NULL になる形で宛先に反映されます。

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.customers`'
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+
| customer_id | first_name | last_name |            email             |     created_at      | _fivetran_deleted |  _fivetran_synced   | phone_number  | family_name |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+
|           1 | NULL       | Yamada    | taro.yamada@example.com      | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           3 | NULL       | Smith     | john.smith@example.com       | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           2 | NULL       | Suzuki    | hanako.suzuki@example.com    | 2025-05-15T01:16:12 |             false | 2025-05-15 09:24:14 | NULL          | NULL        |
|           4 | NULL       | Tanaka    | ichiro.t@example.com         | 2025-05-15T10:00:53 |             false | 2025-05-16 03:35:34 | NULL          | NULL        |
|           6 | NULL       | Johnson   | emily.johnson@example.com    | 2025-05-15T10:00:53 |              true | 2025-05-16 03:37:29 | NULL          | NULL        |
|           5 | NULL       | Kobayashi | sakura.kobayashi@example.com | 2025-05-15T10:00:53 |             false | 2025-05-15 15:25:47 | NULL          | NULL        |
|           7 | NULL       | NULL      | ken.takahashi@example.com    | 2025-05-16T03:47:57 |             false | 2025-05-16 03:48:36 | 080-1234-5678 | Takahashi   |
+-------------+------------+-----------+------------------------------+---------------------+-------------------+---------------------+---------------+-------------+

テーブルの追加

MySQL 側でテーブルを追加します。

CREATE TABLE orders (
  order_id INT AUTO_INCREMENT PRIMARY KEY,
  customer_id INT,
  order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
  amount DECIMAL(10, 2),
  status VARCHAR(50),
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

INSERT INTO orders (customer_id,amount,status) 
VALUES (
  1,12000.50,'処理中'
);

Fivetran ダッシュボードのスキーマタブを更新すると新規追加したテーブルを確認できます。

image 8

そのまま同期すると宛先にも反映されます。

image 9

$ bq query --use_legacy_sql=false 'SELECT * FROM `fivetran-test-459802.sample_db.orders`'
+----------+-------------+---------------------+---------+--------+-------------------+---------------------+
| order_id | customer_id |     order_date      | amount  | status | _fivetran_deleted |  _fivetran_synced   |
+----------+-------------+---------------------+---------+--------+-------------------+---------------------+
|        1 |           1 | 2025-05-16T03:53:35 | 12000.5 | 処理中 |             false | 2025-05-16 03:55:52 |
+----------+-------------+---------------------+---------+--------+-------------------+---------------------+

データベース追加・テーブル追加

データベースとテーブルも追加してみます。

CREATE DATABASE shop_db;
USE shop_db;

CREATE TABLE products (
  product_id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  description TEXT,
  price DECIMAL(10, 2) NOT NULL,
  stock INT DEFAULT 0,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO products (name,description,price,stock
) VALUES (
  'ワイヤレスマウス','Bluetooth対応の高性能マウス',2980.00,50
);

スキーマを更新すると内容を確認できます。

image 10

このまま同期すると宛先に追加できます。

image 11

スキーマの変更を宛先に自動的に反映することができますが、ソースがデータベースの場合、スキーマ変更通知は対応していませんのでご注意ください。

https://fivetran.com/docs/using-fivetran/fivetran-dashboard/connectors/schema#defineschemachangehandlingsettings

主キー無しテーブルの変更動作を確認

主キー無しテーブルについても、異なる点の変更動作を確認します。
ここでは、主キー無しでレコードも重複があるテーブルを作成しました。

use sample_db;

CREATE TABLE entries (
    entry_id INT,
    title VARCHAR(100),
    description TEXT
);

--レコードを追加
INSERT INTO entries (entry_id, title, description) VALUES
(101, 'First Entry', 'This is the first entry.'),
(101, 'First Entry', 'This is the first entry.'), -- 重複
(102, 'Second Entry', 'This is the second entry.'),
(102, 'Second Entry', 'This is the second entry.'); -- 重複

--レコードを確認
> SELECT * FROM entries;
+----------+--------------+---------------------------+
| entry_id | title        | description               |
+----------+--------------+---------------------------+
|      101 | First Entry  | This is the first entry.  |
|      101 | First Entry  | This is the first entry.  |
|      102 | Second Entry | This is the second entry. |
|      102 | Second Entry | This is the second entry. |
+----------+--------------+---------------------------+

この際、宛先への BigQuery 同期時には [_fivetran_iIndex] が追加付与されます。

image 12

特徴として、重複レコードはユニークにした上で同期されます。

$ bq query --use_legacy_sql=false 'SELECT * FROM `sample_db.entries`'
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+
|         _fivetran_id         | entry_id |    title     |        description        | _fivetran_index | _fivetran_deleted |  _fivetran_synced   |
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+
| nuargJqpTHTFaDs3OpjR+mKrSsA= |      101 | First Entry  | This is the first entry.  |               1 |             false | 2025-05-17 02:20:40 |
| rHiYX1+R4I7Be1dv94KVbkJyRTs= |      102 | Second Entry | This is the second entry. |               3 |             false | 2025-05-17 02:20:40 |
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+

主キー無しテーブルの動作の詳細は以下に記載があります。

https://fivetran.com/docs/connectors/databases/mysql#tableswithoutaprimarykey

また、以下でも特徴的な動作を確認します。

レコードの変更

UPDATE entries
SET description = 'Updated entry for 101'
WHERE entry_id = 101;

BigQuery で確認すると、更新前レコードの削除、更新後のレコードがインサートされる形で変更が反映されます。

$ bq query --use_legacy_sql=false 'SELECT * FROM `sample_db.entries`'
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+
|         _fivetran_id         | entry_id |    title     |        description        | _fivetran_index | _fivetran_deleted |  _fivetran_synced   |
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+
| rHiYX1+R4I7Be1dv94KVbkJyRTs= |      102 | Second Entry | This is the second entry. |               3 |             false | 2025-05-17 02:20:40 |
| lMkYDnecajZL4Bg76Xp3VrhyhLs= |      101 | First Entry  | Updated entry for 101     |               3 |             false | 2025-05-17 02:24:49 |
| nuargJqpTHTFaDs3OpjR+mKrSsA= |      101 | First Entry  | This is the first entry.  |               2 |              true | 2025-05-17 02:24:49 |
+------------------------------+----------+--------------+---------------------------+-----------------+-------------------+---------------------+

さいごに

バイナリログで Aurora MySQL のデータを Fivetran を使って BigQuery に同期してみました。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.