OneSignalのレガシー統合でSnowflakeを使用している場合は、Snowflakeレガシー統合ガイドを参照してください。移行手順についてはレガシーからの移行を参照してください。
概要
OneSignal + Snowflake統合は、2つの強力なデータパイプラインをサポートしています:- アウトバウンド:OneSignalからSnowflakeにメッセージングイベントデータ(プッシュ、メール、SMS、アプリ内)を自動的に送信し、分析とレポート作成を行います。
- インバウンド:Snowflakeデータセットからカスタムユーザーイベントを OneSignalに同期して、自動Journeyとパーソナライズされたメッセージングをトリガーします。
アウトバウンド設定
現在、アーリーアクセス中です。
アクセスを要求するには、以下の情報と共に
support@onesignal.comにお問い合わせください:- お客様の会社名
- OneSignal組織ID
- 有効にしたいアプリID
- カスタムダッシュボードとレポートを構築
- チャネル全体の配信とエンゲージメントのトレンドを追跡
- OneSignalデータを他のビジネスデータと組み合わせて分析
- OneSignal Professionalプラン(無料アプリでは利用できません)
- Snowflakeアカウント
- Snowflakeでのセットアップ用のSECURITYADMINまたはACCOUNTADMINロール
1. Snowflakeアカウントの詳細を収集
統合を構成する前に、Snowflakeアカウントから以下の情報を収集します:- Snowflakeホスト:
<account_identifier>.snowflakecomputing.com形式のアカウントURL - データベース名:OneSignalがイベントデータを書き込むデータベース
- スキーマ名:OneSignalテーブル用のデータベース内のスキーマ(OneSignalによって自動作成されます)
- ウェアハウス名:データロード操作に使用するウェアハウス

2. Snowflakeでセットアップスクリプトを実行
Snowflakeウェアハウスで以下のSQLスクリプトを実行して、OneSignalに必要なロール、ユーザー、ウェアハウス、データベースを作成します:スクリプトの上部にある変数値をカスタマイズして、命名規則に合わせることができます。既存のウェアハウスまたはデータベースを使用している場合は、それに応じてスクリプトを変更してください。
3. 認証用のキーペアを生成
OneSignalは、Snowflakeアカウントへの安全なアクセスのためにキーペア認証を必要とします。キーを生成して構成するには、次の手順に従います:秘密鍵を生成
次のコマンドのいずれかを実行して秘密鍵を生成します:暗号化されていない秘密鍵(より簡単ですが、安全性は低くなります):暗号化された秘密鍵(本番環境に推奨):暗号化されたキーを使用する場合は、パスフレーズの作成を求められます。このパスフレーズは安全に保存してください。OneSignalを構成する際に必要になります。
4. OneSignalに接続
詳細を入力
- ホスト:
<your_account>.snowflakecomputing.com - ポート:オプション、デフォルトは
443 - データベース:例:
ONESIGNAL - ロール:オプション、省略時はユーザーのデフォルトロールを使用
- ユーザー:例:
ONESIGNAL_USER - 秘密鍵:秘密鍵ファイル(
rsa_key.p8)の内容を貼り付けます - 秘密鍵のパスフレーズ:オプション、秘密鍵が暗号化されている場合のみ
- データ処理場所:Snowflakeに送信する前にデータが処理される場所
統合を構成
- 同期頻度: 15分ごとの頻度
- スキーマ/テーブル名:
onesignal_events_<app-id>およびmessage_eventsとして事前設定(編集可能) - イベントタイプ: 同期するイベントを選択—すべてまたは必要なものだけを選択
初回のデータ同期がSnowflakeに表示されるまでに15〜30分かかる場合があります。待機中に、プッシュ、メール、アプリ内、またはSMS経由でメッセージを送信して、選択したイベントをトリガーします。
5. Snowflakeでデータを表示
初回同期が完了したら、OneSignalイベントデータをクエリします:スキーマの欠落、権限エラー、形式が正しくないイベントなどの問題が発生した場合は、
support@onesignal.comにお問い合わせください。メッセージイベントとプロパティ
メッセージイベントの種類
プロパティ:event_kind
タイプ: String
メッセージとイベントの種類(例:message.push.received、message.push.sent)。
| メッセージイベント(OneSignal) | event_kind | 説明 |
|---|---|---|
| Push Sent | message.push.sent | プッシュ通知が正常に送信されました。 |
| Push Received | message.push.received | 配信されたプッシュ(Confirmed Deliveryを参照)。 |
| Push Clicked | message.push.clicked | ユーザーがプッシュをクリックしました。 |
| Push Failed | message.push.failed | 配信失敗。メッセージレポートを参照してください。 |
| Push Unsubscribed | message.push.unsubscribed | ユーザーがプッシュからサブスクライブ解除しました。 |
| In-App Impression | message.iam.impression | アプリ内メッセージが表示されました。 |
| In-App Clicked | message.iam.clicked | アプリ内メッセージがクリックされました。 |
| In-App Page Viewed | message.iam.page_displayed | アプリ内ページが表示されました。 |
| Email Sent | message.email.sent | メールが配信されました。 |
| Email Received | message.email.received | 受信者のメールサーバーでメールが受け入れられました。 |
| Email Opened | message.email.opened | メールが開かれました。Email Reportsを参照してください。 |
| Email Link Clicked | message.email.clicked | メール内のリンクがクリックされました。 |
| Email Unsubscribed | message.email.unsubscribed | 受信者がサブスクライブ解除しました。 |
| Email Reported As Spam | message.email.reported_as_spam | スパムとしてマークされました。Email Deliverabilityを参照してください。 |
| Email Bounced | message.email.bounced | 永続的な配信失敗によるバウンス。 |
| Email Failed | message.email.failed | 配信が失敗しました。 |
| Email Suppressed | message.email.suppressed | 抑制リストにより抑制されました。 |
| SMS Sent | message.sms.sent | SMSが送信されました。 |
| SMS Delivered | message.sms.delivered | SMSが正常に配信されました。 |
| SMS Failed | message.sms.failed | SMSの配信に失敗しました。 |
| SMS Undelivered | message.sms.undelivered | SMSが拒否されたか到達不可能です。 |
イベントデータスキーマ
ユーザーが生成する各メッセージイベントには、以下のメタデータがレコードに添付されます。| 列名 | タイプ | 説明 |
|---|---|---|
event_id | UUID | イベントの一意の識別子 |
event_timestamp | Timestamp | イベント発生時刻 |
event_kind | String | イベントの種類 |
subscription_device_type | String | デバイスタイプ(例:iOS、Android、Web、Email、SMS) |
language | String | サブスクリプションの言語コード |
version | String | 統合バージョン |
device_os | String | デバイスのオペレーティングシステムバージョン |
device_type | Number | 数値デバイスタイプ |
token | String | プッシュトークン、電話番号、またはメール |
subscription_id | UUID | Subscription ID |
subscribed | Boolean | サブスクリプションステータス |
onesignal_id | UUID | OneSignalユーザーID |
last_active | String | 最終アクティブタイムスタンプ |
sdk | String | OneSignal SDKバージョン |
external_id | String | 統合ユーザーIDと一致する必要がある外部ユーザーID |
app_id | UUID | OneSignalからのApp ID |
template_id | UUID | Template ID(該当する場合) |
message_id | UUID | メッセージバッチ/リクエストID |
message_name | String | メッセージの名前 |
message_title | String | メッセージタイトル(英語のみ) |
message_contents | String | 切り捨てられたメッセージ本文(英語のみ) |
failure_reason | String | 失敗理由(プッシュ失敗およびメール失敗イベント用) |
_created, _id, _index, _fivetran_synced | 内部使用 | Fivetran同期メタデータ |
注意事項
- 保存/アクティブ化後の同期は、完了までにさらに15〜30分かかる場合があります。
- 非アクティブ化しても、非アクティブ化後に最終同期が1回行われる場合があります。
- 効率的なデータ同期を確保するために、システムは自動的にステージングデータセットを作成および管理します。これらのデータセットは、
fivetran_{2つのランダムな単語}_stagingのようなパターンで命名され、メインスキーマに統合される前の処理中にデータを一時的に保存します。これらのステージングデータセットは、合理化されたワークフローを維持するために不可欠であり、削除しないでください。自動的に再作成されます。
レガシーからの移行
現在レガシーSnowflake統合を使用している場合、このセクションでは主な違いとクエリの移行方法について説明します。主な違い
| 機能 | レガシー | 新版 |
|---|---|---|
| 同期頻度 | 24時間 | 15分ごと |
| データ所有権 | 共有データへの読み取り専用アクセス | お客様のSnowflakeアカウントに直接書き込み |
| データ保持 | 30日 | お客様が保持期間を制御 |
| イベント選択 | 全イベント | 特定のイベントタイプを選択 |
スキーマの変更
新しい統合はオンデマンドでカラムを作成します。特定のフィールドのデータを含むイベントがない場合、そのカラムはテーブルに存在しません。そのフィールドにデータが表示されると、カラムが自動的に作成されます。カラム名の変更
| レガシーカラム | 新カラム |
|---|---|
EVENT_IMPRESSION_TIMESTAMP | EVENT_TIMESTAMP |
SUBSCRIPTION_LANGUAGE | LANGUAGE |
MESSAGE_BODY | MESSAGE_CONTENTS |
型推論
新しい統合は自動型推論を使用します。カラムのすべての値が数値(例:すべてのEXTERNAL_ID値が数値)の場合、カラムはNUMBERとして型付けされる可能性があります。後で非数値の値が表示されると、カラムの型はVARCHARに昇格されます。
必要に応じて明示的なキャストを使用してください:
クエリの移行
既存のクエリを移行するには:- レガシーデータベースへの参照を新しいSnowflakeデータベースを指すように更新
- 上記のカラム名の変更を考慮
- 必要に応じて明示的な型キャストを追加
EVENT_IDで重複排除する結合ビューを作成できます:
<new-database>.<new-schema>を新しい統合のデータベースとスキーマに置き換えてください。<legacy-backup-database>.<legacy-backup-schema>をレガシー共有データのバックアップ先に置き換えてください。このビューは履歴データと新しいデータを統合し、EVENT_IDで重複排除するため、
両方のソースに表示されるイベントは1回のみカウントされます。これは、移行中に
両方の統合を同時に実行する場合に特に重要です。インバウンド設定
SnowflakeからOneSignalに行動イベントデータを送信して以下を実現します:- ユーザーアクティビティに基づいてJourneyをトリガー
- 行動データに基づいてメッセージングをパーソナライズ
- アウトバウンドメッセージイベント用のEvent Streamsへのアクセス(プランの制限と超過料金が適用されます)
- インバウンドイベント同期用のCustom Eventsへのアクセス(プランの制限と超過料金が適用されます)
- 更新されたアカウントプラン(無料アプリでは利用できません)
- ウェアハウスアクセス権を持つSnowflakeアカウント
- Snowflakeテーブルまたはビューに保存されたイベントデータ
- OneSignalからSnowflakeインスタンスへのネットワーク接続
- 適切な権限を持つユーザー認証情報
認証を設定
セキュリティを強化するために、キーペア認証(推奨)を設定します:
- Snowflakeのドキュメントに従って公開鍵/秘密鍵のペアを生成します
- Snowflakeユーザーに公開鍵を設定します
- OneSignalの接続設定で秘密鍵を使用します
イベントデータマッピング
をOneSignalのカスタムイベント形式にマッピングします:| OneSignalフィールド | 説明 | 必須 | |
|---|---|---|---|
name | event_name | イベント識別子 | はい |
external_id | user_id | ユーザー識別子 | はい |
timestamp | event_timestamp | イベントが発生した時刻 | いいえ |
properties | event_data | いいえ |
イベントテーブルスキーマの例
SQLクエリモード
カスタムSQLクエリを記述してイベントデータを変換します:高度な設定
ウェアハウスコストの管理
- コスト最適化のためにX-Smallウェアハウスサイズを使用
- 自動サスペンド(60秒)と自動再開を設定
- オフピーク時間に同期をスケジュール
- 他のバッチ処理システムとウェアハウスを共有することを検討
ライブ同期のサポート
リアルタイムイベント処理の場合、イベントテーブルで変更追跡を有効にします:ネットワークセキュリティ
Snowflakeの許可IPネットワークポリシーを使用している場合は、OneSignalのIPアドレスを許可リストに追加してください。現在のIP範囲については、OneSignalサポートにお問い合わせください。制限事項
- 複雑な分析クエリはウェアハウスのパフォーマンスとコストに影響を与える可能性があります
- ユーザー/パスワード認証は2025年11月に非推奨になります
- CENSUSデータベースはOneSignal操作専用に予約されています
FAQ
どの認証方法を使用すればよいですか?
キーペア認証を使用してください(推奨)。ユーザー/パスワード認証は、2025年11月からSnowflakeによってブロックされます。既存のウェアハウスを使用できますか?
はい、dbtやFivetranなどの他のバッチ処理システムとウェアハウスを共有してコストを最適化できます。ウェアハウスにイベント処理のニーズに十分な容量があることを確認してください。コストを最適化するにはどうすればよいですか?
- X-Smallウェアハウスサイズを使用
- アグレッシブな自動サスペンド(60秒)を設定
- オフピーク時間に同期をスケジュール
- 連続同期の代わりに時間単位/日次同期を使用