BrazeのAPIを使ってカスタムイベントをBigQueryにエクスポートする

BrazeのAPIを使ってイベントデータ➡︎BigQueryへの書き出しをやってみる。
2023.03.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Brazeブロガーの國崎です。
今回はBrazeのAPIを使ってカスタムイベントのエクスポートをやってみました。

ついでにBigQueryにも突っ込んでみたので、イベントデータをデータウェアハウスに入れたい方は、ぜひ参考にしてください。

前提条件

今回の記事は以下の条件を前提に行なっております。

  • Brazeでカスタムイベントを計測済み
  • Google Coludのプロジェクト作成済み
  • BigQueryのサービスアカウント発行済み

BrazeでRest APIキーを作成

まず左メニューの開発者コンソール>API SettingsでAPI Keyの作成を行います。
brazecustombigquery1

今回はイベントデータのエクスポートになるので、イベントデータの項目にチェックを入れます。
余談ですが、イベントデータ以外の抽出をしたい場合は、他の項目にチェックを入れてください。
brazecustombigquery2

保存するとAPIキーが発行されます。
このAPIキーは何かと使うので、いつでもコピーできるようにしておくのがいいです。
brazecustombigquery3

APIキーを作成したらPostmanでもサクッと書き出すことができます。
Postmanの初期設定については以下記事で紹介してますので、ここでは割愛します。

Postmanを使ってBrazeのユーザー情報をいじってみた

Postmanでイベントデータの取得

Postmanでのイベントデータ取得にあたっては以下の項目をParamsに設定します。

パラメータ 必須/任意 タイプ 説明
event 必須 String カスタム イベントの名前
length 必須 Integer 何日(時間)前のイベントか1〜100の間で指定
unit 任意 String データポイント間の日(時間)の単位
ending_at 任意 Datetime データ系列の終了日にち。デフォルトはリクエストの時間
app_id 任意 String アプリAPI識別子(開発者コンソールで確認)
segment_id 任意 String セグメントAPI識別子(セグメントで確認)

今回はテストなので以下必須の項目のみをParamsに設定しました。

event:shopify_created_order
length:100

あとはお決まりですが、HeadersにAuthorizationとContent-Typeを以下書きます。

Authorization:Bearer {{api_key}}
Content-Type:application/json

上記設定後、PostmanのURL横にあるSendをクリック。
brazecustombigquery4

無事イベントデータが書き出されました。

{
    "data": [
        {
            "time": "2023-03-30",
            "count": 1
        },
        {
            "time": "2023-03-31",
            "count": 1
        }
    ],
    "message": "success"
}

この書き出しを次はBigQueryでやってみましょう!!!

BigQueryで書き出し

BrazeのカスタムイベントをBigQueryで取得する手順です。
ここではPythonをGoogle colaboratoryで使ってやります。

コードは以下です。

from google.cloud import bigquery
from google.cloud.exceptions import NotFound
from google.oauth2 import service_account
import requests
import json

# Braze APIからカスタムイベントデータを取得
api_key = "BrazeのAPIキー"
url = "https://rest.fra-01.braze.eu/events/data_series?event=書き出したいカスタムイベント名&length=100"
headers = {
    "Authorization": f"Bearer {api_key}",
}

response = requests.get(url, headers=headers)
data = response.json()
print(data)

# Google BigQueryの認証
credentials = service_account.Credentials.from_service_account_file("BigQuery管理者権限のサービスアカウントのjsonパス")
client = bigquery.Client(credentials=credentials, project="Google CloudのプロジェクトID")

# BigQueryにテーブルを作成
schema = [
    bigquery.SchemaField("count", "INTEGER", mode="NULLABLE"),
    bigquery.SchemaField("time", "STRING", mode="NULLABLE"),
    # 他のカラムもここに追加
]

# テーブルIDを作成
table_id = "BigQueryのテーブルID"
table_ref = client.dataset("データセット名").table("テーブル名")

# テーブルが存在するかどうかを確認
try:
    client.get_table(table_ref)
    print(f"Table {table_id} already exists.")
except NotFound:
    print(f"Table {table_id} not found. Creating table.")
    table = bigquery.Table(table_id, schema=schema)
    table = client.create_table(table)

# データを整形
rows_to_insert = [
    {"count": item["count"], "time": item["time"]}
    for item in data["data"]
]

# カスタムイベントデータをBigQueryにインポート
errors = client.insert_rows_json(table, rows_to_insert)
if errors == []:
    print("データのインポートに成功しました")
else:
    print("データのインポート中にエラーが発生しました:", errors)

こちらで実行すると以下のコードが表示されます。

{'data': [{'time': '2023-03-30', 'count': 1}, {'time': '2023-03-31', 'count': 1}], 'message': 'success'}
Table kunisaki.braze_test20221215.braze_custom_event already exists.
データのインポートに成功しました

実際にBigQueryを見てみると無事データの取得ができてました。
brazecustombigquery5

補足ですが、テーブル名に「-」を入れるとBigQueryの記述ではエラーになるので、名前には「-」ではなく「_」にするのがいいです。
今回はカスタムイベントのエクスポートでしたが、他のデータもGETするURLや項目が変わる程度で基本的なやり方は変わらないと思います。

詳細についてはBrazeのドキュメントをご確認ください。
今回の記事では以下を参考としました。

Export custom events analytics