メインコンテンツへスキップ

概要

OneSignal + ClickHouse統合により、ClickHouse分析データベースからOneSignalへのカスタムイベントの自動同期が可能になります。これにより、高性能カラムナーデータベースに保存されたユーザー行動データに基づいて、自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーできます。

要件

  • アウトバウンドメッセージイベント用のEvent Streamsへのアクセス(プランの制限と超過料金が適用されます)
  • インバウンドイベント同期用のCustom Eventsへのアクセス(プランの制限と超過料金が適用されます)
  • 更新されたアカウントプラン(無料アプリでは利用できません)

ClickHouse

  • ClickHouseサーバー(セルフホストまたはクラウド)
  • イベントテーブルへの読み取りアクセス権を持つデータベース認証情報
  • 適切なスキーマを持つ行動データを含むイベントデータテーブル

セットアップ

1

OneSignal用のClickHouseユーザーを作成

イベントテーブルへの読み取り専用アクセス権を持つOneSignal専用のユーザーアカウントを作成します:
CREATE USER onesignal_reader IDENTIFIED BY 'strong_password';
GRANT SELECT ON event_database.* TO onesignal_reader;
2

ネットワークアクセスを構成

OneSignalがClickHouseインスタンスに接続できることを確認します:
  • セルフホスト:OneSignalのIPアドレスからの接続を許可します
  • ClickHouse Cloud:許可リストにOneSignal IPを追加します
  • ポート:デフォルトのClickHouseポートは8123(HTTP)または9000(ネイティブ)です
3

OneSignalで統合を追加

OneSignalで、Data > Integrationsに移動し、Add Integrationをクリックします。ClickHouseを選択し、次を提供します:
  • Host:ClickHouseサーバーのホスト名またはIP
  • Port:ClickHouseポート(デフォルト:HTTPの場合は8123、ネイティブの場合は9000)
  • Database:イベントテーブルを含むデータベース名
  • Usernameonesignal_reader(または選択したユーザー名)
  • Password:ClickHouseユーザーのパスワード
  • Protocol:HTTPまたはネイティブ(簡単にするためにHTTPを推奨)
4

イベントデータソースを構成

イベントデータを含むClickHouseテーブルを指定します:
  • Table:イベントレコードを含むテーブル名(例:user_events
  • Event Query:イベントデータをフィルタリングまたは変換するためのオプションのSQLクエリ
イベントテーブルには次の列が含まれている必要があります:
  • イベント名/タイプ(String)
  • ユーザー識別子(String)
  • イベントタイムスタンプ(DateTime)
  • 追加のイベントプロパティ(JSONまたは個別の列)
5

接続をテスト

Test Connectionをクリックして、OneSignalがClickHouseデータベースにアクセスしてイベントデータを読み取れることを確認します。

イベントデータマッピング

をOneSignalのカスタムイベント形式にマッピングします:
OneSignalフィールド説明必須
nameevent_nameイベント識別子はい
external_iduser_idユーザー識別子はい
timestampevent_timestampイベントが発生した時刻いいえ
propertiesevent_dataいいえ

高度な構成

カスタムSQLクエリ

カスタムSQLを使用して、OneSignalに同期する前にイベントデータをフィルタリングまたは変換します:
SELECT
  event_name,
  user_id,
  toDateTime(event_timestamp) as timestamp,
  toJSONString(
    map(
      'product_id', product_id,
      'purchase_amount', purchase_amount,
      'category', category
    )
  ) as payload
FROM user_events
WHERE event_timestamp >= now() - INTERVAL 7 DAY
  AND event_name IN ('purchase', 'signup', 'upgrade')
ORDER BY event_timestamp DESC

パフォーマンスの最適化

ClickHouseは分析クエリに最適化されています。次を検討してください:
  • パーティショニング:イベントタイムスタンプで日付ベースのパーティショニングを使用します
  • インデックス作成:user_idとevent_nameに適切なインデックスを作成します
  • マテリアライズドビュー:より高速なクエリのためにイベントデータを事前集計します
ClickHouseは追加専用ワークロードに最適化されています。最高のパフォーマンスを得るために、イベントデータがこのパターンに従っていることを確認してください。

FAQ

OneSignalはClickHouseからイベントをどのくらいの頻度で同期しますか?

OneSignalは、構成されたスケジュールに基づいてイベントデータを同期し、最小間隔は15分です。

複数のClickHouseテーブルからイベントを同期できますか?

はい、異なるテーブルに対して複数の統合を作成するか、UNION クエリを使用して複数のテーブルからデータを組み合わせることができます。