> ## 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，基于用户行为数据触发自动化旅程和个性化消息活动。

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。这让您能够基于存储在高性能列式数据库中的用户行为数据触发自动化旅程和个性化消息活动。

***

## 要求

* 访问自定义事件（目前处于测试阶段）
* [升级账户计划](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云**：将OneSignal IP添加到您的允许列表
    * **端口**：默认ClickHouse端口为8123（HTTP）或9000（原生）
  </Step>

  <Step title="在OneSignal中添加集成">
    在 OneSignal 中，前往 **数据 > 集成**，然后点击 **添加集成**。

    选择**ClickHouse**并提供：

    * **主机**：您的ClickHouse服务器主机名或IP
    * **端口**：ClickHouse端口（默认：HTTP为8123，原生为9000）
    * **数据库**：包含事件表的数据库名称
    * **用户名**：`onesignal_reader`（或您选择的用户名）
    * **密码**：ClickHouse用户的密码
    * **协议**：HTTP或原生（建议使用HTTP简化操作）
  </Step>

  <Step title="配置事件数据源">
    指定包含事件数据的ClickHouse表：

    * **表**：包含事件记录的表名（例如，`user_events`）
    * **事件查询**：可选SQL查询，用于过滤或转换事件数据

    您的事件表应包含以下列：

    * 事件名称/类型（String）
    * 用户标识符（String）
    * 事件时间戳（DateTime）
    * 其他事件属性（JSON或单独列）
  </Step>

  <Step title="测试连接">
    点击**测试连接**以验证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查询

在同步到OneSignal之前使用自定义SQL过滤或转换事件数据：

```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>

***

## 常见问题

### OneSignal多久从ClickHouse同步一次事件？

OneSignal根据您配置的计划同步事件数据，最小间隔为15分钟。

### 我可以从多个ClickHouse表同步事件吗？

是的，您可以为不同的表创建多个集成，或使用UNION查询合并多个表的数据。
