カタログデータの同期と削除
このページでは、カタログデータの同期方法について説明します。
ステップ1:新しいカタログを作成する
カタログ用の新しいCloud Data Ingestion(CDI)連携を作成する前に、新しいカタログを作成するか、連携に使用する既存のカタログを特定する必要があります。新しいカタログを作成するにはいくつかの方法があり、いずれもCDI連携で利用できます。
- CSVをアップロードする
- BrazeダッシュボードまたはCDI設定時にカタログを作成する
- カタログ作成エンドポイントを使用してカタログを作成する
カタログスキーマへの変更(新しいフィールドの追加やフィールドタイプの変更など)は、更新データがCDIを通じて同期される前に、カタログダッシュボードで行う必要があります。データウェアハウスのデータとBrazeのスキーマ間の競合を避けるため、同期が一時停止されているとき、または実行がスケジュールされていないときにこれらの更新を行うことをお勧めします。
ステップ2: クラウドデータ取り込みをカタログデータと統合する
カタログ同期の設定は、ユーザーデータのCDI連携のプロセスとほぼ同じです。
- Snowflakeでソーステーブルを設定します。以下の例にある名前を使用することも、独自のデータベース、スキーマ、テーブル名を選択することもできます。テーブルの代わりにビューやマテリアライズドビューを使用することもできます。
CREATE DATABASE BRAZE_CLOUD_PRODUCTION; CREATE SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION; CREATE OR REPLACE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC ( UPDATED_AT TIMESTAMP_NTZ(9) NOT NULL DEFAULT SYSDATE(), --ID of the catalog item to be created or updated ID VARCHAR(16777216) NOT NULL, --Catalog fields and values that should be added or updated PAYLOAD VARCHAR(16777216) NOT NULL, --The catalog item associated with this ID should be deleted DELETED BOOLEAN );
- ロール、ウェアハウス、ユーザーを設定し、適切な権限を付与します。既存の同期の認証情報がある場合は再利用できますが、カタログのソーステーブルへのアクセスを拡張してください。
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.CATALOGS_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;
- Snowflakeアカウントにネットワークポリシーがある場合は、CDIサービスが接続できるようにBrazeのIPを許可リストに追加してください。IPの一覧については、クラウドデータ取り込みを参照してください。
- Brazeダッシュボードでテクノロジーパートナー > Snowflakeに移動し、新しい同期を作成します。
- 接続情報(または既存の認証情報を再利用)とソーステーブルを入力します。
- 設定フローのステップ2に進み、同期タイプとして「Catalogs」を選択し、統合名とスケジュールを入力します。統合の名前は、以前作成したカタログの名前と完全に一致する必要があります。
- 同期頻度を選択し、次のステップに進みます。
- ダッシュボードに表示された公開キーを、BrazeがSnowflakeに接続するために作成したユーザーに追加します。このステップを完了するには、Snowflakeで
SECURITYADMIN以上のアクセス権を持つ人が必要です。 - Test Connectionを選択して、すべてが正常に動作するか確認します。
- 同期を保存し、同期されたカタログデータをすべてのパーソナライゼーションユースケースに使用します。
- Redshiftでソーステーブルを設定します。以下の例にある名前を使用することも、独自のデータベース、スキーマ、テーブル名を選択することもできます。テーブルの代わりにビューやマテリアライズドビューを使用することもできます。
CREATE DATABASE BRAZE_CLOUD_PRODUCTION; CREATE SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION; CREATE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC ( updated_at timestamptz default sysdate not null, --ID of the catalog item to be created or updated id varchar not null, --Catalog fields and values that should be added or updated payload varchar(max), --The catalog item associated with this ID should be deleted deleted boolean )
-
ユーザーを設定し、適切な権限を付与します。既存の同期の認証情報がある場合は再利用できますが、カタログのソーステーブルへのアクセスを拡張してください。
CREATE USER braze_user PASSWORD '{password}'; GRANT USAGE ON SCHEMA BRAZE_CLOUD_PRODUCTION.INGESTION to braze_user; GRANT SELECT ON TABLE CATALOGS_SYNC TO braze_user;
- ファイアウォールやその他のネットワークポリシーがある場合は、RedshiftインスタンスへのBrazeネットワークアクセスを許可する必要があります。Brazeダッシュボードのリージョンに対応する以下のIPからのアクセスを許可してください。IPの一覧については、クラウドデータ取り込みを参照してください。
- オプションとして、ソーステーブルを格納する新しいプロジェクトまたはデータセットを設定します。
CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
以下のフィールドを含むCDI統合用のテーブルを1つ以上作成します。
CREATE TABLE `BRAZE-CLOUD-PRODUCTION.INGESTION.CATALOGS_SYNC`
(
updated_at TIMESTAMP DEFAULT current_timestamp,
id STRING,
payload JSON,
deleted BOOLEAN
);
| フィールド名 | タイプ | モード |
|---|---|---|
| UPDATED_AT | TIMESTAMP | REQUIRED |
| PAYLOAD | JSON | REQUIRED |
| ID | STRING | REQUIRED |
| DELETED | BOOLEAN | OPTIONAL |
- ユーザーを設定し、適切な権限を付与します。既存の同期の認証情報がある場合は再利用できますが、カタログのソーステーブルへのアクセスを拡張してください。
サービスアカウントには、以下のセクションの権限が必要です。
- BigQuery Connection User: Brazeが接続を行えるようにします。
- BigQuery User: Brazeがクエリの実行、データセットメタデータの読み取り、テーブルの一覧表示を行えるようにします。
- BigQuery Data Viewer: Brazeがデータセットとその内容を表示できるようにします。
- BigQuery Job User: Brazeがジョブを実行できるようにします。
サービスアカウントを作成し権限を付与した後、Brazeがサービスアカウントとして認証する方法を設定します。Workload Identity Federationを使用してキーを作成せずに行うか、JSONキーを生成します。JSONキーの詳細については、キーの作成と削除を参照してください。JSONキーを生成した場合は、後でBrazeダッシュボードにアップロードします。
- ネットワークポリシーが設定されている場合は、BigQueryインスタンスへのBrazeネットワークアクセスを許可する必要があります。IPの一覧については、クラウドデータ取り込みを参照してください。
- Databricksでソーステーブルを設定します。以下の例にある名前を使用することも、独自のカタログ、スキーマ、テーブル名を選択することもできます。テーブルの代わりにビューやマテリアライズドビューを使用することもできます。
CREATE SCHEMA BRAZE-CLOUD-PRODUCTION.INGESTION;
CREATE TABLE `BRAZE-CLOUD-PRODUCTION.INGESTION.CATALOGS_SYNC`
(
updated_at TIMESTAMP DEFAULT current_timestamp(),
id STRING,
deleted BOOLEAN,
payload STRING, STRUCT, or MAP
);
| フィールド名 | タイプ | モード |
|---|---|---|
| UPDATED_AT | TIMESTAMP | REQUIRED |
| PAYLOAD | STRING, STRUCT, or MAP | REQUIRED |
| ID | STRING | REQUIRED |
| DELETED | BOOLEAN | NULLABLE |
- Braze用の認証情報を作成します。Brazeでは、サービスプリンシパルを使用したOAuthマシン間(M2M)認証を推奨していますが、個人用アクセストークンも使用できます。既存の同期の認証情報がある場合は再利用できますが、カタログのソーステーブルへのアクセスを拡張してください。
OAuth M2M: サービスプリンシパルを作成し、クライアントシークレットを生成し、サービスプリンシパルにSQLウェアハウスへのCan use権限を付与し、カタログのソーステーブルにSELECT権限を付与します。手順については、Braze用の認証情報を作成するを参照してください。
個人用アクセストークン:
- a. Databricksのユーザー名を選択し、ドロップダウンメニューからUser Settingsを選択します。
- b. Access tokensタブでGenerate new tokenを選択します。
- c. このトークンを識別するのに役立つコメントを入力します(例: 「Braze CDI」)。
- d. Lifetime (days)ボックスを空のままにして、トークンの有効期限を無期限に変更します。Generateを選択します。
- e. 表示されたトークンをコピーし、Doneを選択します。
- f. Brazeダッシュボードで認証情報の作成ステップで入力する必要があるまで、トークンを安全な場所に保管してください。
- ネットワークポリシーが設定されている場合は、DatabricksインスタンスへのBrazeネットワークアクセスを許可する必要があります。IPの一覧については、クラウドデータ取り込みページを参照してください。
以下のフィールドを含むCDI統合用のテーブルを1つ以上作成します。
CREATE OR ALTER TABLE [warehouse].[schema].[CDI_table_name]
(
UPDATED_AT DATETIME2(6) NOT NULL,
PAYLOAD VARCHAR NOT NULL,
ID VARCHAR NOT NULL,
DELETED BIT
)
GO
- サービスプリンシパルを設定し、適切な権限を付与します。既存の同期の認証情報がある場合は再利用できますが、カタログのソーステーブルへのアクセスを拡張してください。新しいサービスプリンシパルと認証情報の作成方法については、クラウドデータ取り込みページを参照してください。
- ネットワークポリシーが設定されている場合は、Microsoft FabricインスタンスへのBrazeネットワークアクセスを許可する必要があります。IPの一覧については、クラウドデータ取り込みを参照してください。
JSONまたはCSV形式でS3にソースファイルを作成します。各ファイルには以下のフィールドを含める必要があります。
| フィールド | 必須 | 説明 |
|---|---|---|
ID |
はい | 作成または更新するカタログアイテムのIDです。 |
PAYLOAD |
はい | Brazeのカタログアイテムに同期するフィールドのJSON文字列です。 |
DELETED |
オプション | trueに設定すると、対応するカタログアイテムがカタログから削除されます。 |
UPDATED_AT |
未対応 | ファイルストレージではUPDATED_ATカラムはサポートされていません。 |

ファイル名はAWSのルールに従い、一意である必要があります。一意性を確保するためにタイムスタンプを付加してください。
完全なS3設定には、S3バケット、Amazon SQSキュー、AWS IAMロールとポリシーが必要です。Brazeは同期が作成された後にアップロードされたファイルのみを処理するため、取り込みたい既存のファイルは再アップロードしてください。
完全なS3設定フローについては、ファイルストレージ統合を参照してください。特に以下を確認してください。
AWS側の一般的な通知と権限の問題については、送信先へのイベント通知メッセージ公開権限の付与を参照してください。
以下の例は、ファイルストレージからカタログデータを同期する場合の有効なJSONおよびCSV形式を示しています。
{"id":"85","payload":"{\"product_name\":\"Product 85\",\"price\":85.85}"}
{"id":"86","payload":"{\"product_name\":\"Product 86\",\"price\":86.86}"}
{"id":"1","payload":"{\"product_name\":\"Product 1\",\"price\":1.01}","deleted":true}

ソースファイルの各行には有効なJSONが含まれている必要があります。そうでない場合、そのファイルはスキップされます。
ID,PAYLOAD,DELETED
85,"{""product_name"": ""Product 85"", ""price"": 85.85}",false
86,"{""product_name"": ""Product 86"", ""price"": 86.86}",false
1,"{""product_name"": ""Product 1"", ""price"": 1.01}",true
ID,PAYLOAD
85,"{""product_name"": ""Product 85"", ""price"": 85.85}"
86,"{""product_name"": ""Product 86"", ""price"": 86.86}"
その他のファイル例については、ファイルストレージ統合を参照してください。
連携の仕組み

このセクションの同期ビューは、データウェアハウス連携にのみ適用されます。S3 ファイルストレージの場合、Braze はバケットにアップロードされた新しいファイルを順次処理します。詳細については、ファイルストレージ連携を参照してください。
同期が実行されるたびに、Braze は UPDATED_AT が最後に同期された値より後のすべての行を取り込みます。同じタイムスタンプを持つ新しい行がある場合、正確な境界タイムスタンプの行は再同期される可能性があります。同期が実行されるたびに完全にリフレッシュされるソーステーブルを設定するために、カタログデータからデータウェアハウスにビューを作成することをお勧めします。ビューを使用すれば、毎回クエリを書き直す必要がありません。
たとえば、product_id と 3 つの追加属性を持つ商品データのテーブル(product_catalog_1)がある場合、次のビューを同期できます。
CREATE VIEW BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC AS
SELECT
CURRENT_TIMESTAMP as UPDATED_AT,
product_id as id,
TO_JSON(
OBJECT_CONSTRUCT (
'attribute_1',
attribute_1,
'attribute_2',
attribute_2,
'attribute_3',
attribute_3)
)as PAYLOAD FROM "product_catalog_1";
CREATE TABLE BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC AS
SELECT
CURRENT_TIMESTAMP as UPDATED_AT,
Product_id as id,
JSON_SERIALIZE(
OBJECT (
'attribute_1',
attribute_1,
'attribute_2',
attribute_2,
'attribute_3',
attribute_3)
) as PAYLOAD FROM "product_catalog_1";
CREATE view IF NOT EXISTS BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC AS (SELECT
last_updated as UPDATED_AT,
product_id as ID,
TO_JSON(
STRUCT(
attribute_1,
attribute_2,
attribute_3,
)
) as PAYLOAD
FROM `BRAZE_CLOUD_PRODUCTION.INGESTION.product_catalog_1`);
CREATE view IF NOT EXISTS BRAZE_CLOUD_PRODUCTION.INGESTION.CATALOGS_SYNC AS (SELECT
last_updated as UPDATED_AT,
product_id as ID,
TO_JSON(
STRUCT(
attribute_1,
attribute_2,
attribute_3,
)
) as PAYLOAD
FROM `BRAZE_CLOUD_PRODUCTION.INGESTION.product_catalog_1`);
CREATE VIEW [braze].[user_update_example]
AS SELECT
id as ID,
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].[product_catalog] ;
- 連携から取得されたデータは、提供された
idに基づいてターゲットカタログのアイテムを作成または更新するために使用されます。 - DELETED が
trueに設定されている場合、対応するカタログアイテムは削除されます。 - この同期ではデータポイントは記録されませんが、同期されたすべてのデータはカタログ使用量の合計にカウントされます。この使用量は保存されたデータの合計に基づいて測定されるため、変更されたデータのみを同期することを気にする必要はありません。