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

データウェアハウスのデータとBrazeのスキーマ間の競合を避けるため、アカウントスキーマの更新は同期が一時停止中またはスケジュールされていないときにのみ行ってください。
同期の仕組み
- 各同期では、
UPDATED_ATが最後に同期されたタイムスタンプより後の行がインポートされます。境界のタイムスタンプと同じタイムスタンプを持つ新しい行がある場合、そのタイムスタンプの行が再同期されることがあります。詳細については、重複するタイムスタンプを持つ行の再同期を避けるを参照してください。 - 統合からのデータは、提供された
idに基づいてアカウントを作成または更新します。 DELETEDがtrueの場合、アカウントは削除されます。- 同期ではデータポイントは記録されませんが、同期されたすべてのデータは合計アカウント使用量にカウントされ、保存データの合計で測定されます。変更されたデータのみに制限する必要はありません。
- アカウントスキーマにないフィールドは破棄されます。新しいフィールドを同期する前にスキーマを更新してください。
- 同期名にカーソルを合わせて該当するアクションを選択することで、同期の更新、再開、または一時停止ができます。
アカウントデータを同期する
CDI を使用して、データウェアハウスまたはファイルストレージ経由でアカウントデータを同期できます。
データソースをデータウェアハウスと統合するには:
- 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 );
- ロール、ウェアハウス、ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。
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;
- ネットワークポリシーを使用している場合は、CDI サービスが接続できるように Braze の IP をホワイトリストに追加してください。IP の一覧については、クラウドデータ取り込みを参照してください。
- Braze ダッシュボードで、データ設定 > クラウドデータ取り込みに移動し、新しい同期を作成します。
- 接続の詳細を入力(または既存のものを再利用)し、ソーステーブルを追加します。
- 同期タイプとしてAccountsを選択し、統合名とスケジュールを入力します。
- 同期頻度を選択します。
- ダッシュボードの公開キーを、作成したユーザーに追加します。これには Snowflake で
SECURITYADMIN以上のアクセス権を持つユーザーが必要です。 - 接続テストを選択して設定を確認します。
- 完了したら、同期を保存します。
- 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 )
-
ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。
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;
- ファイアウォールまたはネットワークポリシーがある場合は、Braze が Redshift インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
- (オプション)ソーステーブル用に新しいプロジェクトまたはデータセットを作成します。
1
CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
- 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_ATTimestamp はい PAYLOADJSON はい IDString はい NAMEString はい DELETEDBoolean オプション
-
ユーザーを作成し、権限を付与します。別の同期の認証情報がすでにある場合は、アカウントテーブルへのアクセス権がある限り再利用できます。
権限 目的 BigQuery Connection User Brazeが接続できるようにします。 BigQuery User Brazeがクエリの実行、メタデータの読み取り、テーブルの一覧表示を行えるようにします。 BigQuery Data Viewer Brazeがデータセットとその内容を表示できるようにします。 BigQuery Job User Brazeがジョブを実行できるようにします。 権限を付与した後、JSON キーを生成します。手順については、Keys create and delete を参照してください。後で Braze ダッシュボードにアップロードします。
- ネットワークポリシーを使用している場合は、Braze の IP が BigQuery インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
- ソーステーブル用のカタログまたはスキーマを作成します。
1
CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
- 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_ATTimestamp はい PAYLOADString、Struct、または Map はい IDString はい NAMEString はい DELETEDBoolean オプション
- Databricks で個人アクセストークンを作成します。
- ユーザー名を選択し、User Settings を選択します。
- Access tokens タブで、Generate new token を選択します。
- トークンを識別するためのコメントを追加します(例:「Braze CDI」)。
- 有効期限を設定しない場合は Lifetime (days) を空白のままにし、Generate を選択します。
- トークンをコピーし、Braze ダッシュボードで使用するために安全に保存します。
- ネットワークポリシーを使用している場合は、Braze の IP が Databricks インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
- 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
- サービスプリンシパルを作成し、権限を付与します。別の同期の認証情報がすでにある場合は再利用できます。アカウントテーブルへのアクセス権があることを確認してください。
- ネットワークポリシーを使用している場合は、Braze の IP が Microsoft Fabric インスタンスにアクセスできるようにしてください。IP の一覧については、クラウドデータ取り込みを参照してください。
ファイルストレージからアカウントデータを同期するには、以下のフィールドを含むソースファイルを作成します。
| フィールド | 必須 | 説明 |
|---|---|---|
ID |
はい | 更新または作成するアカウントの ID |
NAME |
はい | アカウントの名前 |
PAYLOAD |
はい | Brazeのアカウントに同期するフィールドの JSON 文字列 |
DELETED |
オプション | Brazeからアカウントを削除することを示すブール値 |
UPDATED_AT |
未サポート | ファイルストレージでは UPDATED_AT 列はサポートされていません |

ファイル名は AWS のルールに従い、一意である必要があります。一意性を確保するためにタイムスタンプを付加してください。Amazon S3 同期の詳細については、ファイルストレージ統合を参照してください。
以下の例は、ファイルストレージからアカウントデータを同期するための有効な 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\"}"}

ソースファイルの各行には有効な JSON が含まれている必要があります。そうでない場合、ファイルはスキップされます。
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_id、account_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] ;