Skip to content

CDIを使ってアカウントデータを同期する

CDIを使ってBrazeアカウントデータを同期する方法を学習します。

前提条件

同期の仕組み

  • 各同期では、UPDATED_ATが最後に同期されたタイムスタンプより後の行がインポートされます。境界のタイムスタンプと同じタイムスタンプを持つ新しい行がある場合、そのタイムスタンプの行が再同期されることがあります。詳細については、重複するタイムスタンプを持つ行の再同期を避けるを参照してください。
  • 統合からのデータは、提供されたidに基づいてアカウントを作成または更新します。
  • DELETEDtrueの場合、アカウントは削除されます。
  • 同期ではデータポイントは記録されませんが、同期されたすべてのデータは合計アカウント使用量にカウントされ、保存データの合計で測定されます。変更されたデータのみに制限する必要はありません。
  • アカウントスキーマにないフィールドは破棄されます。新しいフィールドを同期する前にスキーマを更新してください。
  • 同期名にカーソルを合わせて該当するアクションを選択することで、同期の更新、再開、または一時停止ができます。

アカウントデータを同期する

CDI を使用して、データウェアハウスまたはファイルストレージ経由でアカウントデータを同期できます。

データソースをデータウェアハウスと統合するには:

  1. Snowflake でソーステーブルを作成します。例の名前を使用するか、独自のデータベース名、スキーマ名、テーブル名を選択してください。テーブルの代わりにビューまたはマテリアライズドビューを使用することもできます。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     CREATE DATABASE BRAZE_CLOUD_PRODUCTION;
     CREATE SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION;
     CREATE OR REPLACE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC (
          UPDATED_AT TIMESTAMP_NTZ(9) NOT NULL DEFAULT SYSDATE(),
          --ID of the account to be created or updated
          ID VARCHAR(16777216) NOT NULL,
          --Name of the account to be created or updated
          NAME VARCHAR(16777216) NOT NULL,
          --Account fields and values that should be added or updated
          PAYLOAD VARCHAR(16777216) NOT NULL,
          --The account associated with this ID should be deleted
          DELETED BOOLEAN
     );
    
  2. ロール、ウェアハウス、ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
     CREATE ROLE BRAZE_INGESTION_ROLE;
    
     GRANT USAGE ON DATABASE BRAZE_CLOUD_PRODUCTION TO ROLE BRAZE_INGESTION_ROLE;
     GRANT USAGE ON SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION TO ROLE BRAZE_INGESTION_ROLE;
     GRANT SELECT ON TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC TO ROLE BRAZE_INGESTION_ROLE;
    
     CREATE WAREHOUSE BRAZE_INGESTION_WAREHOUSE;
     GRANT USAGE ON WAREHOUSE BRAZE_INGESTION_WAREHOUSE TO ROLE BRAZE_INGESTION_ROLE;
    
     CREATE USER BRAZE_INGESTION_USER;
     GRANT ROLE BRAZE_INGESTION_ROLE TO USER BRAZE_INGESTION_USER;
    
  3. ネットワークポリシーを使用している場合は、CDI サービスが接続できるように Braze の IP をホワイトリストに追加してください。IP の一覧については、クラウドデータ取り込みを参照してください。
  4. Braze ダッシュボードで、データ設定 > クラウドデータ取り込みに移動し、新しい同期を作成します。
  5. 接続の詳細を入力(または既存のものを再利用)し、ソーステーブルを追加します。
  6. 同期タイプとしてAccountsを選択し、統合名とスケジュールを入力します。
  7. 同期頻度を選択します。
  8. ダッシュボードの公開キーを、作成したユーザーに追加します。これには Snowflake で SECURITYADMIN 以上のアクセス権を持つユーザーが必要です。
  9. 接続テストを選択して設定を確認します。
  10. 完了したら、同期を保存します。
  1. Redshift でソーステーブルを作成します。例の名前を使用するか、独自のデータベース名、スキーマ名、テーブル名を選択してください。テーブルの代わりにビューまたはマテリアライズドビューを使用することもできます。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
     CREATE DATABASE BRAZE_CLOUD_PRODUCTION;
     CREATE SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION;
     CREATE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC (
        updated_at timestamptz default sysdate not null,
        --ID of the account to be created or updated
        id varchar not null,
        --Name of the account to be created or updated
        name varchar not null,
        --Account fields and values that should be added or updated
        payload varchar(max),
        --The account associated with this ID should be deleted
        deleted boolean
     )
    
  2. ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。

    1
    2
    3
    
     CREATE USER braze_user PASSWORD '{password}';
     GRANT USAGE ON SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION to braze_user;
     GRANT SELECT ON TABLE ACCOUNTS_SYNC TO braze_user;
    
  3. ファイアウォールまたはネットワークポリシーがある場合は、Braze が Redshift インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
  1. (オプション)ソーステーブル用に新しいプロジェクトまたはデータセットを作成します。
    1
    
     CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
    
  2. CDI 統合用のソーステーブルを作成します。
    1
    2
    3
    4
    5
    6
    7
    8
    
     CREATE TABLE `BRAZE-CLOUD-PRODUCTION.INGESTION.ACCOUNTS_SYNC`
     (
       updated_at TIMESTAMP DEFAULT current_timestamp,
       id STRING,
       name STRING,
       payload JSON,
       deleted BOOLEAN
     );
    

    ソーステーブルを作成する際は、以下を参照してください。

    フィールド名 必須
    UPDATED_AT Timestamp はい
    PAYLOAD JSON はい
    ID String はい
    NAME String はい
    DELETED Boolean オプション
  1. ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は、アカウントテーブルへのアクセス権がある限り再利用できます。

    権限 目的
    BigQuery Connection User Brazeが接続できるようにします。
    BigQuery User Brazeがクエリの実行、メタデータの読み取り、テーブルの一覧表示を行えるようにします。
    BigQuery Data Viewer Brazeがデータセットとその内容を表示できるようにします。
    BigQuery Job User Brazeがジョブを実行できるようにします。

    権限を付与した後、JSON キーを生成します。手順については、Keys create and delete を参照してください。後で Braze ダッシュボードにアップロードします。

  1. ネットワークポリシーを使用している場合は、Braze の IP が BigQuery インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
  1. ソーステーブル用のカタログまたはスキーマを作成します。
    1
    
     CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
    
  2. CDI 統合用のソーステーブルを作成します。
    1
    2
    3
    4
    5
    6
    7
    8
    
     CREATE TABLE `BRAZE-CLOUD-PRODUCTION.INGESTION.ACCOUNTS_SYNC`
     (
       updated_at TIMESTAMP DEFAULT current_timestamp(),
       id STRING,
       name STRING,
       payload STRING, STRUCT, or MAP,
       deleted BOOLEAN
     );
    

    ソーステーブルを作成する際は、以下を参照してください。

    フィールド名 必須
    UPDATED_AT Timestamp はい
    PAYLOAD String、Struct、または Map はい
    ID String はい
    NAME String はい
    DELETED Boolean オプション
  1. Databricks で個人アクセストークンを作成します。
    1. ユーザー名を選択し、User Settings を選択します。
    2. Access tokens タブで、Generate new token を選択します。
    3. トークンを識別するためのコメントを追加します(例:「Braze CDI」)。
    4. 有効期限を設定しない場合は Lifetime (days) を空白のままにし、Generate を選択します。
    5. トークンをコピーし、Braze ダッシュボードで使用するために安全に保存します。
  1. ネットワークポリシーを使用している場合は、Braze の IP が Databricks インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
  1. CDI 統合用に以下のフィールドを持つテーブルを1つ以上作成します。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
     CREATE OR ALTER TABLE [warehouse].[schema].[CDI_table_name]
     (
       UPDATED_AT DATETIME2(6) NOT NULL,
       PAYLOAD VARCHAR NOT NULL,
       ID VARCHAR NOT NULL,
       NAME VARCHAR NOT NULL,
       DELETED BIT
     )
     GO
    
  1. サービスプリンシパルを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。
  1. ネットワークポリシーを使用している場合は、Braze の IP が Microsoft Fabric インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。

ファイルストレージからアカウントデータを同期するには、以下のフィールドを含むソースファイルを作成します。

フィールド 必須 説明
ID はい 更新または作成するアカウントの ID
NAME はい アカウントの名前
PAYLOAD はい Brazeのアカウントに同期するフィールドの JSON 文字列
DELETED オプション Brazeからアカウントを削除することを示すブール値
UPDATED_AT 未サポート ファイルストレージでは UPDATED_AT 列はサポートされていません

以下の例は、ファイルストレージからアカウントデータを同期するための有効な JSON および CSV 形式を示しています。

{"id":"s3-qa-0","name":"account0","payload":"{\"attribute_0\": \"GT896\", \"attribute_1\": 74, \"attribute_2\": true, \"retention\": {\"previous_purchases\": 21, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600803\"}"}
{"id":"s3-qa-1","name":"account1","payload":"{\"attribute_0\": \"GT896\", \"attribute_1\": 74, \"attribute_2\": true, \"retention\": {\"previous_purchases\": 21, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600803\"}","deleted":true}
{"id":"s3-qa-2","name":"account2","payload":"{\"attribute_0\": \"GT896\", \"attribute_1\": 74, \"attribute_2\": true, \"retention\": {\"previous_purchases\": 21, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600803\"}","deleted":false}
{"id":"s3-qa-3","name":"account3","payload":"{\"attribute_0\": \"GT896\", \"attribute_1\": 74, \"attribute_2\": true, \"retention\": {\"previous_purchases\": 21, \"vip\": false}, \"last_visit\": \"2023-08-08T16:03:26.600803\"}"}
1
2
3
ID,NAME,PAYLOAD,DELETED
85,"ACCOUNT_1","{""region"": ""APAC"", ""employees"": 850}",TRUE
1,"ACCOUNT_2","{""region"": ""EMEA"", ""employees"": 10000}",FALSE
1
2
3
ID,NAME,PAYLOAD
85,"ACCOUNT_1","{""region"": ""APAC"", ""employees"": 850}"
1,"ACCOUNT_2","{""region"": ""EMEA"", ""employees"": 10000}"

同期ビューの作成

データウェアハウスに同期ビューを作成すると、追加のクエリを書き直すことなくソースを自動的に更新できます。

たとえば、account_idaccount_name、および3つの追加属性を持つ account_details_1 というアカウントデータのテーブルがある場合、次のような同期ビューを作成できます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE VIEW BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC AS
SELECT
    CURRENT_TIMESTAMP as UPDATED_AT,
    account_id as id,
    account_name as name,
    TO_JSON(
        OBJECT_CONSTRUCT (
            'attribute_1',
            attribute_1,
            'attribute_2',
            attribute_2,
            'attribute_3',
            attribute_3)
    )as PAYLOAD FROM "account_details_1";
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC AS
SELECT
    CURRENT_TIMESTAMP as UPDATED_AT,
    account_id as id,
    account_name as name,
    JSON_SERIALIZE(
        OBJECT (
            'attribute_1',
            attribute_1,
            'attribute_2',
            attribute_2,
            'attribute_3',
            attribute_3)
    ) as PAYLOAD FROM "account_details_1";
1
2
3
4
5
6
7
8
9
10
11
12
CREATE view IF NOT EXISTS BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC AS (SELECT
    last_updated as UPDATED_AT,
    account_id as ID,
    account_name as NAME,
    TO_JSON(
      STRUCT(
      attribute_1,
      attribute_2,
      attribute_3,
      )
    ) as PAYLOAD
  FROM `BRAZE_CLOUD_PRODUCTION.INGESTION.account_details_1`);
1
2
3
4
5
6
7
8
9
10
11
12
CREATE view IF NOT EXISTS BRAZE_CLOUD_PRODUCTION.INGESTION.ACCOUNTS_SYNC AS (SELECT
    last_updated as UPDATED_AT,
    account_id as ID,
    account_name as NAME,
    TO_JSON(
      STRUCT(
      attribute_1,
      attribute_2,
      attribute_3,
      )
    ) as PAYLOAD
  FROM `BRAZE_CLOUD_PRODUCTION.INGESTION.account_details_1`);
1
2
3
4
5
6
7
8
CREATE VIEW [BRAZE_CLOUD_PRODUCTION].[INGESTION].[ACCOUNTS_SYNC]
AS SELECT
    account_id as ID,
    account_name as NAME,
    CURRENT_TIMESTAMP as UPDATED_AT,
    JSON_OBJECT('attribute_1':attribute_1, 'attribute_2':attribute_2, 'attribute_3':attribute_3, 'attribute_4':attribute_4) as PAYLOAD

FROM [braze].[account_details_1] ;
New Stuff!