CDIを使ってアカウントデータを同期する
CDIを使ってBrazeアカウントデータを同期する方法を学習します。
アカウントオブジェクトはベータ版であり、この機能を利用するには必須です。ベータ版への参加に興味がある場合は、Braze のアカウントマネージャーにお問い合わせください。
前提条件
CDIを使ってアカウントデータを同期する前に、アカウントスキーマを設定する必要があります。
アカウントスキーマの更新は、同期が一時停止中かスケジュールされていないときのみ行ってください。データウェアハウスのデータと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の一覧については、Cloud Data Ingestionを参照してください。
- Brazeダッシュボードで、Data Settings > Cloud Data Ingestion に移動し、新しい同期を作成します。
- 接続の詳細を入力(または既存のものを再利用)し、ソーステーブルを追加します。
- Accounts 同期タイプを選択し、統合名とスケジュールを入力します。
- 同期頻度を選択します。
- ダッシュボードから公開キーを、作成したユーザーに追加します。これにはSnowflakeで
SECURITYADMIN以上のアクセス権を持つユーザーが必要です。 - Test Connection を選択してセットアップを確認します。
- 完了したら、同期を保存します。
- 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の一覧については、Cloud Data Ingestionを参照してください。
- (オプション)ソーステーブル用に新しいプロジェクトまたはデータセットを作成します。
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の一覧については、Cloud Data Ingestionを参照してください。
- ソーステーブル用にカタログまたはスキーマを作成します。
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, or Map はい IDString はい NAMEString はい DELETEDBoolean オプション
- Databricksでパーソナルアクセストークンを作成します:
- ユーザー名を選択し、User Settings を選択します。
- Access tokens タブで、Generate new token を選択します。
- トークンを識別するためのコメント(例:「Braze CDI」)を追加します。
- 有効期限を設定しない場合は Lifetime (days) を空白のままにし、Generate を選択します。
- トークンをコピーし、Brazeダッシュボードで使用するために安全に保存します。
- ネットワークポリシーを使用している場合は、BrazeのIPがDatabricksインスタンスにアクセスできるようにしてください。IPの一覧については、Cloud Data Ingestionを参照してください。
- 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の一覧については、Cloud Data Ingestionを参照してください。
ファイルストレージからアカウントデータを同期するには、以下のフィールドを持つソースファイルを作成します。
| フィールド | 必須? | 説明 |
|---|---|---|
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] ;
GitHub でこのページを編集