スキーマ変更時に通知できる New Data Notifications を試してみた #Fivetran

2024.04.05

Fivetran のスキーマ変更時の通知機能を試してみましたので記事としました。

概要

Fivetran では、ソース側で新しいスキーマ、テーブル、または列が追加されると、通知メールを受けとることが可能です。

現時点では新規データの追加として、データソース側の以下のイベントを通知します。 また、このイベントはコネクタの種類に関係なく、コネクタに対して機能します。

  • 既存テーブルのカラム追加
    • 列名の変更による新規列の追加も含む
  • スキーマへのテーブル追加
    • 新規スキーマの追加によるテーブル追加も含む

注意点として、現時点では以下のような削除に関するイベントは通知されません。

  • 列の削除
  • テーブルの削除

通知設定の手順

通知の有効化

通知設定はコネクタ単位で行います。
対象のコネクタ設定内の「Schema」タブから下図の歯車マーク(Schema Setting)から「Send notifications」を有効にし [Save changes] をクリックすればよいです。
※デフォルトではオフになっています。

コネクタのサブスクライブ

また、上記ので有効化した通知を受信するには、対象のコネクタをサブスクライブしている必要があります。
現在サブスクライブしているコネクタは、ユーザー設定内の [Notifications] ページから確認できます。
新たにサブスクライブするコネクタを追加する際は、下図の「+Add」より追加します。

検証環境

以降は、実際にどのような通知が届くか検証した際の内容になります。
以下の環境を使用しました。

  • 宛先
    • Snowflake
  • データソース
    • Amazon RDS
      • SQL Server Express Edition
      • 2019 15.004345.5.v1
    • インスタンスタイプ:db.t3.micro
  • 接続方法
    • 直接接続
  • 同期方法
    • Fivetran Teleport Sync

データソース・Destination の設定方法については、それぞれ以下をご参照ください。

通知を送ってみる

検証用に、以下のテーブルを SQL Server 側で作成後、Snowflake に初期同期を済ませ、上記の手順で「Send notifications」を有効にした状態からはじめます。

CREATE TABLE dbo.Products (
    ProductID INT PRIMARY KEY,
    ProductName NVARCHAR(255),
    Price DECIMAL(10, 2),
    Category NVARCHAR(100)
);
INSERT INTO dbo.Products (ProductID, ProductName, Price, Category)
VALUES
    (1, 'Laptop', 1200.00, 'Electronics'),
    (2, 'Smartphone', 800.00, 'Electronics'),
    (3, 'Coffee Maker', 150.00, 'Kitchen Appliances'),
    (4, 'Desk Lamp', 45.99, 'Furniture'),
    (5, 'Ergonomic Chair', 249.99, 'Office Supplies');

カラムの追加

ソース側でテーブルにカラムを追加します。

ALTER TABLE dbo.Products ADD StockQuantity INT;
GO

すると、同期のタイミングとあわせて下図の内容でメールが届きました。

ここで「sql_server_rds_teleport」はコネクタの名称です。
ソース側で同期対象である dbo スキーマの Products テーブルに [StockQuantity] カラムが追加されたことがメッセージからも確認できます。
また、同期設定として「Allow all」を指定していたので、この変更は Destination に反映されると記載があります。

同期後、Snowflake 側でも列の追加を確認できました。

カラムの削除

以下のコマンドでソース側のカラムを削除します。

ALTER TABLE dbo.Products DROP COLUMN Category;
GO

同期後、Snowflake 側では下図の通り、削除したカラムの値が NULL となることで変更が反映されますが、新規追加ではないため、メール通知は届きません。

カラムの名称変更

ソース側でカラム名を変更します。

EXEC sp_rename 'Products.ProductName', 'Product', 'COLUMN';
GO

同期完了後、Snowflake で確認すると、変更後の列名を持つ新しい列が追加されています。変更前の列は、値が NULL に変更されます。

この場合、変更後の名称を持つ新規列が追加されることになるので、下図の通り、メール通知が届きます。

ポイントとして、あくまで列が追加された、という内容の通知であり、名称変更であることはメール通知からは確認できないため、注意が必要です。

カラムのデータ型の変更

ソース側でカラムのデータ型を変更してみます。

-- 既存の Price 列のデータ型を NVARCHAR(50) に変更
ALTER TABLE dbo.Products ALTER COLUMN Price NVARCHAR(50);
GO

Snowflake 側の変更前は下図の通りです。

こちらが、上記の変更後、下図のようになります。

この場合もデータの追加ではないため通知はありません。

テーブルの追加

同じスキーマにテーブルを追加します。

CREATE TABLE dbo.Customers (
    CustomerID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Email NVARCHAR(100) UNIQUE,
    Phone NVARCHAR(20)
);
INSERT INTO dbo.Customers (CustomerID, FirstName, LastName, Email, Phone)
VALUES
    (1, 'John', 'Doe', 'john@example.com', '123-456-7890'),
    (2, 'Jane', 'Smith', 'jane@example.com', '987-654-3210');
GO

この場合、新規データ追加となり、メールが届きます。通知内容としては下図の通り、新規カラム追加といった内容で届くようです。

テーブルの削除

この場合、カラム削除の時と同様に通知はありません。

スキーマの追加

新しいスキーマとそのスキーマにテーブルを追加します。

--スキーマの作成
CREATE SCHEMA my_new_schema;
--テーブルの作成
CREATE TABLE my_new_schema.my_table (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);
GO

この場合も、新規データ追加となり、テーブル追加時と同様の内容で通知が届きます。
直接、スキーマそのものの追加という内容での通知ではないので、ご注意ください。

さいごに

Fivetran のスキーマ変更時の通知機能を試してみました。
デフォルトでは無効になっていますが、コネクタ側で通知設定を有効にするだけで使える機能なので、特段理由がなければ有効にしておいてよい機能かなと感じました。
現時点の仕様として、データの追加がある場合に通知されるので、カラムやテーブルの削除については通知がない点、テーブルの追加時も「各カラムが追加されました」という内容で通知が届く点にご注意ください。
こちらの内容が何かの参考になれば幸いです。