Hightouch で Destination に Notion を指定し Snowflake のデータを同期してみた

Hightouch で Destination に Notion を指定し Snowflake のデータを同期してみた

Clock Icon2024.08.29

はじめに

Hightouch ではデータの転送先として Notion を指定可能です。Snowflake のテーブルデータを Notion に同期してみましたのでその際の手順を記事としました。Hightouch は Snowflake のパートナーコネクトから利用しています。

同期の概要

概要は以下に記載があります。

https://hightouch.com/docs/destinations/notion

Hightouch による Notion への同期時は、既存の Notion データベースにレコードが追加される形で行われます。そのため後述する手順では、同期するデータベースを含むページへのアクセスを許可します。

サポートされている Notion プロパティ

フィールド マッピング時に以下に記載の Notion データベース プロパティをサポートします。Notion データベース側でカラムにサポート外のプロパティを設定していた場合、マッピング時の項目として表れないためご注意ください。

https://hightouch.com/docs/destinations/notion#supported-notion-properties

事前準備

Source 側

データの転送元となる Source は Snowflake を使用します。以下の通り連携用のサンプルデータをテーブルとして作成しておきました。

image

Destinaiton 側

テスト用のページを用意し以下の内容でデータベースを作成しておきました。

image 1

Snowflake の Partner Connect から Hightouch に接続

こちらは以下にも手順の記載があるので、あわせてご参照ください。

https://dev.classmethod.jp/articles/try-hightouch-from-snowflake-partner-connect/#toc-snowflakepartner-connecthightouch

Snowflake にログインし、パートナーコネクトから「Hightouch」を選択します。

image 2

下図のようなポップアップが表示されるので「Optional Grant」より、Hightouch に連携させたいデータを格納したデータベースを指定し [Connect] をクリックします。

image 3

すると、下図のように Hightouch のアカウント作成が完了したことを表すポップアップが表示されます。 [Activate] をクリックすると、Hightouch 側の画面に遷移します。

image 4

Hightouch ではサインインの方法を指定し、サインインします。

image 5

各種規約に同意して [Continue] をクリックします。

image 6

続けて、Workspace に関する設定を行います。

image 7

https://hightouch.com/docs/workspace-management/overview

Workspace が作成されるクラウドリージョンは以下の4つから選択可能です。

image 8

https://hightouch.com/docs/security/regions#overview

Workspace を設定後、Source と Destination の設定を行えるようになります。

image 9

[Select Source] より任意のアプリケーションを選択することで、それぞれの設定を開始できます。

image 10

Source の接続設定

はじめに Source である Snowflake の接続設定を行います。上記の [Connect Source] より Snowflake アカウントへの接続設定を行います。

image 11

続けて「Sync engine」に関する設定を行います。

image 12

エンジンの比較は以下に記載があります。

https://hightouch.com/docs/syncs/lightning-sync-engine#engine-comparison

Hightouch としては、Source 側のテーブルが 10万レコードを超える場合は、Lightning sync engine の使用を推奨しています。Lightning sync engine の場合は、追加の権限設定が必要となります。
ここでは Basic sync engine を使用することとしました。続けて認証情報を設定し次へ進めます。

image 13

次に進むとテストが行われます。

image 14

その後、Hightouch 上でのソース名を定義できます。

image 15

こちらの手順は以下でも紹介されていますので、あわせてご参照ください。

https://dev.classmethod.jp/articles/hightouch-source-setting-snowflake/

Destination の接続設定

Workspace から続けて Destinaiton(Notion)の [Connect destination] をクリックします。

image 16

下図の表示となるので、[Log in to Notion] をクリックします。

image 17

以下の権限が付与されるので、確認し [ページを選択する] をクリックします。

image 18

Hightouch からのアクセスを許可するデータベースを作成したページを選択し [アクセスを許可する] をクリックします。

image 19

問題なく認証されると下図の表示となります。

image 20

その後、Source と同様に Hightouch 上でのソース名を定義できます。

image 21

Sync の設定

Source と Destinaiton の設定が完了したら sync(同期)の設定を行います。

image 22

はじめに「モデル」を定義します。Hightouch では Source からクエリするデータをモデルとして定義します。

https://hightouch.com/docs/models/creating-models

クエリの方法として、ここでは「Table selector」を選択しました。

image 23

すると、現在の権限で閲覧可能なテーブルが表示されるので、同期対象のテーブルを選択します。

image 24

続けてモデルの名称とモデルの主キーを指定します。Hightouch ではモデルの方法に関係なく、主キーを指定する必要があります。

image 25

Notion の場合は、さらに下図の同期モードを指定します。ここでは Upsert(既存のレコードを更新し、新しいレコードを挿入する)を選択しました。

image 26

https://hightouch.com/docs/syncs/types-and-modes#sync-modes

次に、同期対象のテーブルカラムと、宛先の Notion データベースのカラムの割り当てを行います。はじめに、レコードを識別するキー項目となるカラムの割り当てを行います。

image 27

その後の設定で他のカラムの割り当てを行います。
注意点として、Notion データベース側のカラムで、Hightouch として対応していないプロパティ(ステータスなど)を設定していた場合、Hightouch 上で選択できません。
そのため、ここでは Notion データベース上ではじめはプロパティ「ステータス」として定義していたカラム [ステータス] のプロパティを「マルチセレクト」に変更し以降の手順を行いました。

各カラムは下図のように割り当てました。

image 29

さいごに削除動作についての設定です。これは、ソース側でレコードが削除された場合に、Destinaiton 側ではどのように対応するか設定するものです。

ここでは「Clear fields」としてレコードとしては保持するものの、空の値で更新する方法としました。

image 30

https://hightouch.com/docs/syncs/overview#delete-behavior

モデルの設定が完了したらスケジュールの設定を行います。ここでは「Manual」としました。

image 31

https://hightouch.com/docs/syncs/overview#schedule

設定が完了したら同期を開始します。

image 32

同期完了後、Notion データベースを確認すると、以下のように更新されていました。
※[終了日] については、Notion 側で日付として設定していなかったため図のようになっています。

image 33

マルチセレクト プロパティのカラムは、オプションが自動で追加されます。

image 34

データの更新

Source 側のレコードに変更を加えて Notion 側にどのように反映されるか確認してみます。

レコードを削除

Snowflake 側で以下のコマンドを実行しレコードを削除します。

DELETE FROM projects WHERE projectid = 5;

再度同期を実行すると、ここでは削除動作として「Clear fields」を指定したため、図のようにレコードとしては残るものの、キー項目以外は値が空となる形で更新されていました。

image 35

レコードの更新

Snowflake 側で以下のコマンドを実行しレコードを更新します。

UPDATE projects SET Status = '進行中' WHERE ProjectID = 8;

再度同期を実行し Notion 側で確認すると意図する形で更新されていました。

image 36

レコードの追加

さいごに Snowflake 側でレコードを追加します。

INSERT INTO projects (ProjectID, Title, ClientName, StartDate, EndDate, Status)
VALUES (11, '新しいプロジェクト', '株式会社XYZ', '2024-11-01', '2025-03-31', '未着手');

同期完了後、はじめのレコードに追加されていました。

image 37

さいごに

Hightouch で Snowflake のテーブルを Notion データベースとして連携してみました。Notion では事前に Notion データベースを用意しておく必要がありますが、権限周りの設定のみで容易に連携できる点は便利と感じました。
こちらの内容が何かの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.