Hightouch で Destination に Notion を指定し Snowflake のデータを同期してみた
はじめに
Hightouch ではデータの転送先として Notion を指定可能です。Snowflake のテーブルデータを Notion に同期してみましたのでその際の手順を記事としました。Hightouch は Snowflake のパートナーコネクトから利用しています。
同期の概要
概要は以下に記載があります。
Hightouch による Notion への同期時は、既存の Notion データベースにレコードが追加される形で行われます。そのため後述する手順では、同期するデータベースを含むページへのアクセスを許可します。
サポートされている Notion プロパティ
フィールド マッピング時に以下に記載の Notion データベース プロパティをサポートします。Notion データベース側でカラムにサポート外のプロパティを設定していた場合、マッピング時の項目として表れないためご注意ください。
事前準備
Source 側
データの転送元となる Source は Snowflake を使用します。以下の通り連携用のサンプルデータをテーブルとして作成しておきました。
Destinaiton 側
テスト用のページを用意し以下の内容でデータベースを作成しておきました。
Snowflake の Partner Connect から Hightouch に接続
こちらは以下にも手順の記載があるので、あわせてご参照ください。
Snowflake にログインし、パートナーコネクトから「Hightouch」を選択します。
下図のようなポップアップが表示されるので「Optional Grant」より、Hightouch に連携させたいデータを格納したデータベースを指定し [Connect] をクリックします。
すると、下図のように Hightouch のアカウント作成が完了したことを表すポップアップが表示されます。 [Activate] をクリックすると、Hightouch 側の画面に遷移します。
Hightouch ではサインインの方法を指定し、サインインします。
各種規約に同意して [Continue] をクリックします。
続けて、Workspace に関する設定を行います。
Workspace が作成されるクラウドリージョンは以下の4つから選択可能です。
Workspace を設定後、Source と Destination の設定を行えるようになります。
[Select Source] より任意のアプリケーションを選択することで、それぞれの設定を開始できます。
Source の接続設定
はじめに Source である Snowflake の接続設定を行います。上記の [Connect Source] より Snowflake アカウントへの接続設定を行います。
続けて「Sync engine」に関する設定を行います。
エンジンの比較は以下に記載があります。
Hightouch としては、Source 側のテーブルが 10万レコードを超える場合は、Lightning sync engine の使用を推奨しています。Lightning sync engine の場合は、追加の権限設定が必要となります。
ここでは Basic sync engine を使用することとしました。続けて認証情報を設定し次へ進めます。
次に進むとテストが行われます。
その後、Hightouch 上でのソース名を定義できます。
こちらの手順は以下でも紹介されていますので、あわせてご参照ください。
Destination の接続設定
Workspace から続けて Destinaiton(Notion)の [Connect destination] をクリックします。
下図の表示となるので、[Log in to Notion] をクリックします。
以下の権限が付与されるので、確認し [ページを選択する] をクリックします。
Hightouch からのアクセスを許可するデータベースを作成したページを選択し [アクセスを許可する] をクリックします。
問題なく認証されると下図の表示となります。
その後、Source と同様に Hightouch 上でのソース名を定義できます。
Sync の設定
Source と Destinaiton の設定が完了したら sync(同期)の設定を行います。
はじめに「モデル」を定義します。Hightouch では Source からクエリするデータをモデルとして定義します。
クエリの方法として、ここでは「Table selector」を選択しました。
すると、現在の権限で閲覧可能なテーブルが表示されるので、同期対象のテーブルを選択します。
続けてモデルの名称とモデルの主キーを指定します。Hightouch ではモデルの方法に関係なく、主キーを指定する必要があります。
Notion の場合は、さらに下図の同期モードを指定します。ここでは Upsert(既存のレコードを更新し、新しいレコードを挿入する)を選択しました。
次に、同期対象のテーブルカラムと、宛先の Notion データベースのカラムの割り当てを行います。はじめに、レコードを識別するキー項目となるカラムの割り当てを行います。
その後の設定で他のカラムの割り当てを行います。
注意点として、Notion データベース側のカラムで、Hightouch として対応していないプロパティ(ステータスなど)を設定していた場合、Hightouch 上で選択できません。
そのため、ここでは Notion データベース上ではじめはプロパティ「ステータス」として定義していたカラム [ステータス] のプロパティを「マルチセレクト」に変更し以降の手順を行いました。
各カラムは下図のように割り当てました。
さいごに削除動作についての設定です。これは、ソース側でレコードが削除された場合に、Destinaiton 側ではどのように対応するか設定するものです。
ここでは「Clear fields」としてレコードとしては保持するものの、空の値で更新する方法としました。
モデルの設定が完了したらスケジュールの設定を行います。ここでは「Manual」としました。
設定が完了したら同期を開始します。
同期完了後、Notion データベースを確認すると、以下のように更新されていました。
※[終了日] については、Notion 側で日付として設定していなかったため図のようになっています。
マルチセレクト プロパティのカラムは、オプションが自動で追加されます。
データの更新
Source 側のレコードに変更を加えて Notion 側にどのように反映されるか確認してみます。
レコードを削除
Snowflake 側で以下のコマンドを実行しレコードを削除します。
DELETE FROM projects WHERE projectid = 5;
再度同期を実行すると、ここでは削除動作として「Clear fields」を指定したため、図のようにレコードとしては残るものの、キー項目以外は値が空となる形で更新されていました。
レコードの更新
Snowflake 側で以下のコマンドを実行しレコードを更新します。
UPDATE projects SET Status = '進行中' WHERE ProjectID = 8;
再度同期を実行し Notion 側で確認すると意図する形で更新されていました。
レコードの追加
さいごに Snowflake 側でレコードを追加します。
INSERT INTO projects (ProjectID, Title, ClientName, StartDate, EndDate, Status)
VALUES (11, '新しいプロジェクト', '株式会社XYZ', '2024-11-01', '2025-03-31', '未着手');
同期完了後、はじめのレコードに追加されていました。
さいごに
Hightouch で Snowflake のテーブルを Notion データベースとして連携してみました。Notion では事前に Notion データベースを用意しておく必要がありますが、権限周りの設定のみで容易に連携できる点は便利と感じました。
こちらの内容が何かの参考になれば幸いです。