SQL セグメントエクステンション
SnowflakeデータのSnowflake SQLクエリを使用してセグメントエクステンションを生成できます。SQLでは、他のセグメンテーション機能では実現できない方法でデータ間の関係を柔軟に記述できるため、新しいセグメントのユースケースを開拓するのに役立ちます。
標準のセグメントエクステンションと同様に、SQLセグメントエクステンションでも過去2年間(730日)までのイベントをクエリできます。標準のセグメントエクステンションとは異なり、SQLセグメントエクステンションはクレジットを消費します。
前提条件
この機能を通じてPIIデータにアクセスできるため、SQLセグメントクエリを実行するにはPII権限が必要です。
セグメントエクステンションの作成
ステップ1:エディターを選択する
SQLセグメントエクステンションを作成する際には、2種類のSQLエディターから選択できます。SQLエディターと増分SQLエディターです。
- フルリフレッシュ: セグメントが更新されるたびに、Brazeは利用可能なすべてのデータをクエリしてセグメントを更新します。これは増分リフレッシュよりも多くのクレジットを使用します。フルリフレッシュエクステンションはメンバーシップを毎日自動的に再生成できますが、増分リフレッシュを使用してリフレッシュすることはできません。
- 増分リフレッシュ: 増分リフレッシュは、クエリを設定するよりコスト効率の高い方法ですが、設定にはいくつかの追加ステップが必要です。セグメントを構築する際にこれらの追加ステップを完了できる場合、クエリがより少ないクレジットで実行されるため、このオプションを選択する価値があります。
- AI SQLジェネレーター: AI SQLジェネレーターでは、プロンプトを自然言語で入力し、それをセグメント用のSQLクエリに変換できます。SQLを自分で書く必要なく、すぐに始められる便利な方法です。

どちらのSQLエディターで作成したSQLセグメントでも、手動でフルリフレッシュを実行できます。
フルリフレッシュSQLセグメントエクステンションを作成するには:
- オーディエンス > セグメントエクステンションに移動します。
- 新規エクステンションを作成を選択し、フルリフレッシュを選択します。

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

- セグメントエクステンションを保存します。
増分リフレッシュSQLセグメントエクステンションを作成するには:
- オーディエンス > セグメントエクステンションに移動します。
- 新規エクステンションを作成を選択し、増分リフレッシュを選択します。

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

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

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

AI SQLジェネレーターは現在ベータ機能として利用可能です。このベータトライアルへの参加に興味がある場合は、カスタマーサクセスマネージャーにお問い合わせください。
AI SQLジェネレーターは、OpenAIが提供するGPTを活用して、SQLセグメント用のSQLを推奨します。

AI SQLジェネレーターを使用するには、以下の手順に従います:
- フルリフレッシュまたは増分リフレッシュを使用してSQLセグメントを作成した後、AI SQLジェネレーターを起動を選択します。
- プロンプトを入力し、生成を選択してプロンプトをSQLに変換します。
- 生成されたSQLが正しいことを確認してから、セグメントを保存します。
プロンプトの例
- 先月メールを受け取ったユーザー
- 過去1年間で購入回数が5回未満のユーザー
ヒント
- 利用可能なSnowflakeデータテーブルに慣れておきましょう。これらのテーブルに存在しないデータを要求すると、ChatGPTが架空のテーブルを作り出す可能性があります。
- この機能のSQL記述ルールに慣れておきましょう。これらのルールに従わないとエラーが発生します。たとえば、SQLコードは
user_id列を選択する必要があります。プロンプトを「〜のユーザー」で始めると役立ちます。 - AI SQLジェネレーターでは、1分間に最大20のプロンプトを送信できます。
私のデータはどのように使用され、OpenAIに送られますか?
OpenAIを活用するBrazeAI機能を通じてAI出力(以下「出力」)を生成するために、Brazeは特定の情報(以下「入力」)をOpenAIに送信します。入力はお客様のプロンプトで構成され、該当する場合にはダッシュボードに表示されるコンテンツやお客様のクエリに関連するその他のワークスペースデータが含まれることがあります。OpenAIのAPIプラットフォームのコミットメントに基づき、Braze経由でOpenAIのAPIに送信されたデータは、OpenAIモデルのトレーニングや改善には使用されません。OpenAIは不正利用の監視を目的として最大30日間データを保持し、その後削除します。お客様とBrazeの間において、出力はお客様の知的財産です。Brazeは、かかる出力に対する著作権の所有権を主張しません。Brazeは、出力を含め、AIが生成したコンテンツに関していかなる種類の保証も行いません。

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

クエリ可能なテーブルにはイベントデータのみが含まれていることに注意してください。ユーザー属性をクエリしたい場合は、SQLセグメントをクラシックセグメンターのカスタム属性フィルターと組み合わせる必要があります。
SQLは以下のルールにも従う必要があります:
- 単一のSQLステートメントを記述してください。セミコロンは含めないでください。
- SQLは1つの列のみを選択する必要があります:
user_id列です。つまり、SQLには以下を含める必要があります:
SELECT DISTINCT user_id FROM "INSERT TABLE NAME"
- イベントがゼロのユーザーをクエリすることはできません。つまり、イベントをX回未満実行したユーザーのクエリには、以下の回避策に従う必要があります:
- イベントをX回以上実行したユーザーを選択するクエリを記述します。
- セグメントでセグメントエクステンションを参照する際に、
doesn't includeを選択して結果を反転させます。
user_id列の要件
user_id列は、ソーステーブルのuser_idへの直接的で変更されていない参照でなければなりません。Brazeは、最終的なuser_id列が以下のようなクエリを拒否します:
- エイリアスを持つ計算列(例:
COALESCE(m.orphaned_by_id, c.user_id) AS user_id) user_idにリネームされた別の列(例:m.orphaned_by_id AS 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の反転が必要かどうかを判断します。イベントがゼロのユーザーを直接クエリすることはできませんが、SQLを反転を使用してこれらのユーザーをターゲットにできます。

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

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

セグメントメンバーシップの更新
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セグメントクレジットの追加購入やセグメントエクステンションの追加をご希望の場合は、アカウントマネージャーにお問い合わせください。