SQL セグメントエクステンション
SnowflakeデータのSnowflake SQLクエリを使用してセグメントエクステンションを生成できます。SQLでは、他のセグメンテーション機能では実現できない方法でデータ間の関係を柔軟に記述できるため、新しいセグメントのユースケースを開拓するのに役立ちます。
標準のセグメントエクステンションと同様に、SQLセグメントエクステンションでも過去2年間(730日)までのイベントをクエリできます。標準のセグメントエクステンションとは異なり、SQLセグメントエクステンションはクレジットを消費します。
前提条件
SQL セグメントエクステンションを使用するには、ワークスペースに対する以下の権限が必要です。
| 権限 | 許可される操作 |
|---|---|
| 「セグメントを表示」 | セグメントエクステンションを開き、SQL セグメントエクステンションを表示する |
| 「セグメントを編集」 | SQL セグメントエクステンションを作成、編集、更新する |
| 「PIIを表示」 | 顧客データを返す可能性のある SQL プレビュークエリを実行する |
セグメントエクステンションの作成
ステップ1:エディターを選択する
SQL セグメントエクステンションを作成する際には、SQL エディターと増分 SQL エディターの2種類の SQL エディターから選択できます。
- 完全更新: セグメントが更新されるたびに、Braze は利用可能なすべてのデータをクエリしてセグメントを更新します。そのため、増分更新よりも多くのクレジットを消費します。完全更新のエクステンションはメンバーシップを毎日自動的に再生成できますが、増分更新を使用して更新することはできません。
- 増分更新: 増分更新は、クエリを設定するうえでよりコスト効率の高い方法です。ただし、設定にはいくつかの追加ステップが必要です。セグメントを構築する際にこれらの追加ステップを完了できる場合は、より少ないクレジットでクエリを実行できるため、このオプションを選択する価値があります。
Operator に SQL を作成してもらうには、どちらかのエディターで Ask Operator を選択し、オーディエンスを日常的な言葉で記述します。詳細については、Operator でできることを参照してください。

どちらの SQL エディターで作成した SQL セグメントでも、手動で完全更新を実行できます。
完全更新の SQL セグメントエクステンションを作成するには、次の手順に従います。
- オーディエンス > セグメントエクステンションに移動します。
- 新規エクステンションを作成を選択し、完全更新を選択します。

- セグメントエクステンションの名前を追加し、SQL を入力します。要件とリソースについては、ステップ2を参照してください。

- セグメントエクステンションを保存します。
増分更新の SQL セグメントエクステンションを作成するには、次の手順に従います。
- オーディエンス > セグメントエクステンションに移動します。
- 新規エクステンションを作成を選択し、増分更新を選択します。

- セグメントエクステンションの名前を追加し、SQL を入力します。要件とリソースについては、ステップ2を参照してください。

- 必要に応じて、エクステンションを毎日再生成を選択します。

これを選択すると、Braze はセグメントのメンバーシップを毎日自動的に更新します。つまり、毎日会社のタイムゾーンの午前0時(最大1時間の遅延が発生する可能性があります)に、Braze はセグメントの新しいユーザーを確認し、自動的にセグメントに追加します。セグメントエクステンションが7日間使用されていない場合、Braze は毎日の再生成を自動的に一時停止します。未使用のセグメントエクステンションとは、キャンペーンやキャンバスに含まれていないものを指します(エクステンションが「使用中」と見なされるために、キャンペーンやキャンバスがアクティブである必要はありません)。 - セグメントエクステンションを保存します。

実行に20分以上かかる SQL クエリはタイムアウトします。
エクステンションの処理が完了したら、セグメントエクステンションを使用してセグメントを作成し、キャンペーンやキャンバスでこの新しいセグメントをターゲットにできます。
ステップ2:SQL を記述する
SQL クエリは Snowflake 構文を使用して記述する必要があります。クエリ可能なテーブルと列の完全なリストについては、テーブルリファレンスを参照してください。

クエリ可能なテーブルにはイベントデータのみが含まれている点に注意してください。ユーザー属性をクエリしたい場合は、SQL セグメントとクラシックセグメンターのカスタム属性フィルターを組み合わせる必要があります。
SQL は、さらに次のルールに従う必要があります。
- 単一の SQL ステートメントを記述します。セミコロンは含めないでください。
- SQL では
user_id列の1列のみを選択する必要があります。つまり、SQL には次の内容が含まれている必要があります。
SELECT DISTINCT user_id FROM "INSERT TABLE NAME"
- イベントが0件のユーザーをクエリすることはできません。そのため、イベントの実行回数が X 回未満のユーザーをクエリする場合は、次の回避策に従う必要があります。
- イベントを X 回より多く実行したユーザーを選択するクエリを記述します。
- セグメントでセグメントエクステンションを参照する際に、
含まないを選択して結果を反転します。
user_id 列の要件
user_id 列は、ソーステーブルの user_id を変更せずに直接参照する必要があります。最終的な user_id 列が次のいずれかに該当するクエリは、Braze によって拒否されます。
COALESCE(m.orphaned_by_id, c.user_id) AS user_idのような、エイリアス付きの計算列m.orphaned_by_id AS user_idのような、user_idに名前を変更した別の列- 計算された
user_idを返すサブクエリから選択する場合など、user_idというエイリアスを付けたサブクエリの列
「sql - Please select only the following columns: user_id」というエラーが表示されたものの、クエリですでに user_id 列を選択している場合は、クエリがこれらのパターンのいずれかを使用していないか確認してください。クエリの保存に失敗する場合でも、プレビューは機能することがあります。

user_id 列にエイリアスを付けたり計算したりする代わりに、ソーステーブルから直接 GROUP BY c.user_id または DISTINCT c.user_id を使用してください。
追加ルール
さらに、標準の SQL クエリは次のルールに従う必要があります。
DECLAREステートメントは使用できません。
すべての増分更新クエリは、クエリとスキーマ詳細の2つの部分で構成されます。
- エディターで、対象のテーブルから
user_idを選択するクエリを記述します。 - エディター上部のフィールドからオペレーター、回数、期間を選択して、スキーマ詳細を追加します。クエリは、集計列の合計がこれらのフィールドで設定した条件を満たしているかどうかを確認します。これは、クラシックセグメントエクステンションを作成するワークフローと同様に機能します。
- オペレーター: イベントが指定した発生回数より多いか、少ないか、または等しいかを示します。

- 回数: オペレーターに関連してイベントを評価する回数です。

- 期間: イベントの発生を確認する日数で、1~730日の範囲で指定します。この期間は、当日を基準とした過去の日数を指します。次の例は、過去365日間にイベントを5回より多く実行したユーザーをクエリする場合を示しています。

- オペレーター: イベントが指定した発生回数より多いか、少ないか、または等しいかを示します。
次の例では、作成されるセグメントには、指定した日付以降の過去30日間に favorited イベントを3回より多く実行したユーザーが含まれます。



増分更新では、遅延イベント(キャプチャ時に送信されなかった SDK イベントなど、毎日の更新ウィンドウの後に到着するイベント)も考慮されます。セグメントが更新されると、Braze はそれらの遅延イベントが属する日付を再処理します。
増分更新が時間の経過とともにユーザーを追跡する仕組み
増分更新を使用すると、Braze は各ユーザーの日次カウントを内部のカウントテーブルに保存します。これにより、すべての履歴データを毎日再クエリすることなく、期間全体にわたってセグメントを評価できます。
保存される内容: Braze は、ユーザーの日次の適格カウントを (date, user_id, count) 形式で蓄積するカウントテーブル(セグメントコホートテーブルに類似)を管理します。このテーブルは、2日間のローリング更新ウィンドウ外の履歴データを保持します。
各更新時の処理: 増分更新が実行されると、Braze はカウントテーブルから2日間のローリング更新ウィンドウ内のレコードのみを削除します。その後、更新された時間パラメーター($start_date を使用)で SQL クエリを再実行し、それらの日付の新しい行を挿入します。2日間のローリング更新ウィンドウ外の履歴行は、カウントテーブルにそのまま残ります。
Braze がセグメントの対象者を決定する方法: Braze は、最新の2日間のローリング更新ペイロードだけでなく、蓄積されたカウントテーブル全体に対してセグメントのメンバーシップ条件を評価します。つまり、2日以上前に条件を満たしたユーザーは、集計カウントが条件を満たさなくなるまでセグメントに残ります。
確実に更新される SQL の記述: 増分更新用の SQL を記述する際は、部分的な更新時に一貫性のない結果を生む可能性のあるクエリパターンを避けてください。たとえば、$start_date の境界をまたぐデータに依存する MAX(time) のようなウィンドウ集計は、一部の日付のみが再計算された場合に、行の状態が予期せず変わる可能性があります。各日付の出力がその日付のイベントのみに依存するようにクエリを構成すると、クエリが処理するデータが2日分でも730日分でも一貫した結果が維持されます。
追加ルール
さらに、増分更新クエリは次のルールに従う必要があります。
- 単一の SQL ステートメントを記述します。セミコロンは含めないでください。
- 増分 SQL セグメントで参照できるイベントは1つのみです。日付とカウントのドロップダウンは、そのイベントに適用されます。
- SQL には
$date()エイリアス(例:$date(time))を含め、user_idとCOUNT()集計を選択し、日付とuser_idでグループ化し、時間列に対して$start_dateでフィルター(例:time > $start_date)する必要があります。$date()またはこれらのフィールドを含まない SQL を保存すると、エラーが返されます。 DECLAREステートメントは使用できません。

テーブル CATALOGS_ITEMS_SHARED を使用する SQL セグメントを作成する場合は、カタログ ID を指定する必要があります。例:
SELECT * FROM CATALOGS_ITEMS_SHARED
WHERE CATALOG_ID = 'XYZ'
LIMIT 10
ステップ3:クエリをプレビューする
保存する前に、クエリのプレビューを実行できます。クエリのプレビューは自動的に100行に制限され、60秒後にタイムアウトします。プレビューの実行時には、user_id 列の要件は適用されません。
増分 SQL セグメントエクステンションの場合、プレビューにはオペレーター、回数、期間の各フィールドによる追加条件は含まれません。
ステップ4:SQL を反転する必要があるかどうかを判断する
次に、SQL を反転する必要があるかどうかを判断します。イベントが0件のユーザーを直接クエリすることはできませんが、SQLを反転を使用するとこれらのユーザーをターゲットにできます。

デフォルトでは、SQLを反転はオンになっていません。ただし、AI SQL ジェネレーターを使用して否定が必要な SQL ステートメントを生成した場合、ChatGPT がこの機能を自動的にオンにする出力を返すことがあります。
たとえば、購入回数が3回未満のユーザーをターゲットにするには、まず購入回数が3回以上のユーザーを選択するクエリを記述します。次に、SQLを反転を選択して、購入回数が3回未満のユーザー(購入回数が0回のユーザーを含む)をターゲットにします。

イベントが0件のユーザーを特にターゲットにする場合を除き、SQL を反転する必要はありません。SQLを反転が選択されている場合は、その機能が必要であること、およびセグメントが目的のオーディエンスと一致していることを確認してください。たとえば、イベントが1件以上あるユーザーをターゲットにするクエリを反転すると、イベントが0件のユーザーのみがターゲットになります。

セグメントメンバーシップの更新
SQLを使用して作成したセグメントエクステンションのセグメントメンバーシップを更新するには、セグメントエクステンションを開いて更新を選択します。

ユーザーが定期的に出入りすることが想定されるセグメントを作成した場合は、キャンペーンまたはキャンバスでそのセグメントをターゲットにする前に、そのセグメントが使用するセグメントエクステンションを手動で更新してください。
セグメントエクステンションの管理
セグメントエクステンションページでは、SQL を使用して生成されたセグメントの名前の横に が表示されます。
SQL セグメントエクステンションを選択すると、エクステンションの使用場所の確認、エクステンションのアーカイブ、またはセグメントメンバーシップの手動更新を行えます。

更新設定の指定
エクステンションを定期的に更新する必要がない場合は、更新設定を使用せずに保存できます。Brazeはデフォルトで、その時点のユーザーメンバーシップに基づいてセグメントエクステンションを生成します。オーディエンスを一度だけ生成し、単発のキャンペーンでターゲットにしたい場合は、デフォルトの動作を使用してください。
セグメントは常に最初の保存後に処理を開始します。セグメントが更新されるたびに、Brazeはセグメントを再実行し、更新時点のセグメント内のユーザーを反映するようにセグメントメンバーシップを更新します。これにより、定期的なキャンペーンが最も関連性の高いユーザーに届くようになります。
定期的な更新の設定
更新設定を指定して定期的なスケジュールを設定するには、更新を有効にするを選択します。更新設定を指定するオプションは、SQLセグメント、CDIセグメントエクステンション、シンプルなフォームベースのセグメントエクステンションを含む、すべてのタイプのセグメントエクステンションで使用できます。

データ管理を最適化するため、使用されていないセグメントエクステンションの更新設定は自動的にオフになります。セグメントエクステンションは、以下の場合に未使用とみなされます。
- アクティブまたは非アクティブ(下書き、停止、アーカイブ)のキャンペーン、キャンバス、またはセグメントで使用されていない
- 7日以上変更されていない
この設定がオフになると、Brazeは会社の連絡先とエクステンションの作成者に通知します。エクステンションを毎日再生成するオプションはいつでも再度有効にできます。
更新設定の選択

更新間隔設定パネルでは、このセグメントエクステンションが更新される頻度を、毎時、毎日、毎週、または毎月から選択できます。また、更新が行われる特定の時刻(会社のタイムゾーン)を選択する必要があります。例えば以下のようになります。
- 毎週月曜日の午前11時(会社時間)に送信されるメールキャンペーンがあり、送信直前にセグメントを確実に更新したい場合は、毎週月曜日の午前10時に更新するスケジュールを選択してください。
- セグメントを毎日更新したい場合は、毎日の更新頻度を選択し、更新する時刻を選択してください。

フォームベースのセグメントエクステンションでは、毎時の更新スケジュールを設定することはできません(ただし、毎日、毎週、毎月のスケジュールは設定できます)。
クレジット消費と追加コスト
更新によってセグメントのクエリが再実行されるため、SQLセグメントの更新ごとにSQLセグメントクレジットが消費され、CDIセグメントエクステンションの更新ごとにサードパーティのデータウェアハウスでコストが発生します。

データ処理時間のため、セグメントの更新には最大60分かかることがあります。現在更新処理中のセグメントには、セグメントエクステンション一覧で「Processing」ステータスが表示されます。これにはいくつかの影響があります。
- 特定の時刻までにセグメントの処理を完了させるには、60分前の更新時刻を選択してください。
- 特定のセグメントエクステンションの更新は一度に1回のみ実行できます。既存の更新がすでに処理を開始している状態で新しい更新が開始される競合が発生した場合、Brazeは新しい更新リクエストをキャンセルし、進行中の処理を続行します。
古いエクステンションを自動的に無効にする基準
セグメントエクステンションが古くなると、スケジュールされた更新は自動的に無効になります。セグメントエクステンションは、以下の基準を満たす場合に古いとみなされます。
- アクティブなキャンペーンまたはキャンバスで使用されていない
- アクティブなキャンペーンまたはキャンバス内のセグメントで使用されていない
- 分析トラッキングが有効になっているセグメントで使用されていない
- 7日以上変更されていない
- 7日以上、キャンペーンやキャンバス(下書きを含む)、またはセグメントに追加されていない
セグメントエクステンションのスケジュールされた更新が無効になっている場合、そのエクステンションにはその旨を示す通知が表示されます。

古いセグメントエクステンションを使用する準備ができたら、更新設定を確認し、ユースケースに合った更新スケジュールを選択して、変更を保存してください。
Snowflakeクレジット
各Brazeワークスペースには、1か月あたり5つのSnowflakeクレジットが利用可能です。さらにクレジットが必要な場合は、アカウントマネージャーにお問い合わせください。クレジットは、SQLセグメントのメンバーシップを更新、または保存して更新するたびに使用されます。SQLセグメント内でプレビューを実行したり、従来のセグメントエクステンションを保存または更新したりする場合、クレジットは使用されません。

Snowflakeクレジットは機能間で共有されません。たとえば、SQLセグメントエクステンションとクエリビルダーのクレジットは互いに独立しています。
クレジット使用量はSQLクエリの実行時間と相関しています。実行時間が長くなるほど、クエリにかかるクレジット数は多くなります。実行時間は、時間の経過に伴うクエリの複雑さとサイズによって異なる場合があります。実行するクエリが複雑で頻繁になればなるほど、リソースの割り当てが大きくなり、実行時間が短縮されます。
クレジットを節約するには、SQLセグメントエクステンションを保存する前に、クエリをプレビューして正しいことを確認してください。
クレジットは、毎月1日午前12時(UTC)に5にリセットされます。クレジット使用状況パネルで、その月のクレジット使用状況を監視できます。セグメントエクステンションページから、 SQLクレジット使用状況を表示をクリックします。

クレジットがゼロになると、次のことが起こります。
- 自動更新が設定されたSQLセグメントエクステンションは更新を停止し、これらのセグメントのメンバーシップ、およびこれらのセグメントをターゲットとするキャンペーンやキャンバスに影響します。
- その月の残りの期間は、新しいSQLセグメントエクステンションを下書きとしてのみ保存できます。
SQLセグメントを作成したすべての会社ユーザーと会社の管理者には、クレジットの50%、80%、100%を使い切った時点で通知メールが届きます。翌月の初めにクレジットがリセットされたら、SQLセグメントをさらに作成でき、自動更新が再開されます。
SQLセグメントクレジットの追加購入やセグメントエクステンションの追加をご希望の場合は、アカウントマネージャーにお問い合わせください。