> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickHouse

> ClickHouseからOneSignalにカスタムイベントを同期して、ユーザー行動に基づいた自動化されたJourneysとパーソナライズされたメッセージングキャンペーンをトリガーします。

export const PLATFORM_0 = "ClickHouse"

export const DATA_TYPE_0 = "イベントテーブルの列"

export const COLUMN_HEADER_0 = "ClickHouse列"

export const PROPERTIES_DESCRIPTION_0 = "JSON列または複数の列"

## 概要

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

***

## 要件

* アウトバウンドメッセージイベント用の[Event Streams](/docs/ja/event-streams)へのアクセス（プランの制限と超過料金が適用されます）
* インバウンドイベント同期用の[Custom Events](/docs/ja/custom-events)へのアクセス（プランの制限と超過料金が適用されます）
* [更新されたアカウントプラン](https://onesignal.com/pricing)（無料アプリでは利用できません）

### ClickHouse

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

***

## セットアップ

<Steps>
  <Step title="OneSignal用のClickHouseユーザーを作成">
    イベントテーブルへの読み取り専用アクセス権を持つOneSignal専用のユーザーアカウントを作成します：

    ```sql theme={null}
    CREATE USER onesignal_reader IDENTIFIED BY 'strong_password';
    GRANT SELECT ON event_database.* TO onesignal_reader;
    ```
  </Step>

  <Step title="ネットワークアクセスを構成">
    OneSignalがClickHouseインスタンスに接続できることを確認します：

    * **セルフホスト**：OneSignalのIPアドレスからの接続を許可します
    * **ClickHouse Cloud**：許可リストにOneSignal IPを追加します
    * **ポート**：デフォルトのClickHouseポートは8123（HTTP）または9000（ネイティブ）です
  </Step>

  <Step title="OneSignalで統合を追加">
    OneSignalで、**Data > Integrations**に移動し、**Add Integration**をクリックします。

    **ClickHouse**を選択し、次を提供します：

    * **Host**：ClickHouseサーバーのホスト名またはIP
    * **Port**：ClickHouseポート（デフォルト：HTTPの場合は8123、ネイティブの場合は9000）
    * **Database**：イベントテーブルを含むデータベース名
    * **Username**：`onesignal_reader`（または選択したユーザー名）
    * **Password**：ClickHouseユーザーのパスワード
    * **Protocol**：HTTPまたはネイティブ（簡単にするためにHTTPを推奨）
  </Step>

  <Step title="イベントデータソースを構成">
    イベントデータを含むClickHouseテーブルを指定します：

    * **Table**：イベントレコードを含むテーブル名（例：`user_events`）
    * **Event Query**：イベントデータをフィルタリングまたは変換するためのオプションのSQLクエリ

    イベントテーブルには次の列が含まれている必要があります：

    * イベント名/タイプ（String）
    * ユーザー識別子（String）
    * イベントタイムスタンプ（DateTime）
    * 追加のイベントプロパティ（JSONまたは個別の列）
  </Step>

  <Step title="接続をテスト">
    **Test Connection**をクリックして、OneSignalがClickHouseデータベースにアクセスしてイベントデータを読み取れることを確認します。
  </Step>
</Steps>

***

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

{PLATFORM_0} {DATA_TYPE_0}をOneSignalのカスタムイベント形式にマッピングします：

| OneSignalフィールド | {COLUMN_HEADER_0} | 説明                         | 必須  |
| -------------- | ----------------- | -------------------------- | --- |
| `name`         | `event_name`      | イベント識別子                    | はい  |
| `external_id`  | `user_id`         | ユーザー識別子                    | はい  |
| `timestamp`    | `event_timestamp` | イベントが発生した時刻                | いいえ |
| `properties`   | `event_data`      | {PROPERTIES_DESCRIPTION_0} | いいえ |

***

## 高度な構成

### カスタムSQLクエリ

カスタムSQLを使用して、OneSignalに同期する前にイベントデータをフィルタリングまたは変換します：

```sql theme={null}
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に適切なインデックスを作成します
* **マテリアライズドビュー**：より高速なクエリのためにイベントデータを事前集計します

<Warning>
  ClickHouseは追加専用ワークロードに最適化されています。最高のパフォーマンスを得るために、イベントデータがこのパターンに従っていることを確認してください。
</Warning>

***

## FAQ

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

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

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

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