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

> Synchronisez les événements personnalisés de ClickHouse vers OneSignal pour déclencher des parcours automatisés et des campagnes de messagerie personnalisées basées sur le comportement des utilisateurs.

export const DATA_TYPE_0 = "event table columns"

export const PLATFORM_0 = "ClickHouse"

export const COLUMN_HEADER_0 = "ClickHouse Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON column or multiple columns"

## Vue d'ensemble

L'intégration OneSignal + ClickHouse permet la synchronisation automatique des événements personnalisés depuis votre base de données analytique ClickHouse vers OneSignal. Cela vous permet de déclencher des parcours automatisés et des campagnes de messagerie personnalisées basées sur les données comportementales des utilisateurs stockées dans votre base de données en colonnes haute performance.

***

## Prérequis

* Accès aux [Event Streams](/docs/en/event-streams) pour les événements de message sortants (Les limitations de forfait et les dépassements s'appliquent)
* Accès aux [Événements personnalisés](/docs/en/custom-events) pour la synchronisation des événements entrants (Les limitations de forfait et les dépassements s'appliquent)
* [Forfait de compte mis à jour](https://onesignal.com/pricing) (non disponible sur les applications gratuites)

### ClickHouse

* **Serveur ClickHouse** (auto-hébergé ou cloud)
* **Identifiants de base de données** avec accès en lecture aux tables d'événements
* **Tables de données d'événements** contenant des données comportementales avec un schéma approprié

***

## Configuration

<Steps>
  <Step title="Créer un utilisateur ClickHouse pour OneSignal">
    Créez un compte utilisateur dédié pour OneSignal avec un accès en lecture seule à vos tables d'événements :

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

  <Step title="Configurer l'accès réseau">
    Assurez-vous que OneSignal peut se connecter à votre instance ClickHouse :

    * **Auto-hébergé** : Autorisez les connexions depuis les adresses IP de OneSignal
    * **ClickHouse Cloud** : Ajoutez les IP OneSignal à votre liste autorisée
    * **Port** : Le port ClickHouse par défaut est 8123 (HTTP) ou 9000 (natif)
  </Step>

  <Step title="Ajouter l'intégration dans OneSignal">
    Dans OneSignal, allez dans **Data > Integrations** et cliquez sur **Add Integration**.

    Sélectionnez **ClickHouse** et fournissez :

    * **Hôte** : Le nom d'hôte ou l'IP de votre serveur ClickHouse
    * **Port** : Port ClickHouse (par défaut : 8123 pour HTTP, 9000 pour natif)
    * **Base de données** : Nom de la base de données contenant les tables d'événements
    * **Nom d'utilisateur** : `onesignal_reader` (ou votre nom d'utilisateur choisi)
    * **Mot de passe** : Mot de passe pour l'utilisateur ClickHouse
    * **Protocole** : HTTP ou Natif (HTTP recommandé pour la simplicité)
  </Step>

  <Step title="Configurer la source de données d'événements">
    Spécifiez la table ClickHouse contenant vos données d'événements :

    * **Table** : Nom de la table contenant les enregistrements d'événements (par ex., `user_events`)
    * **Requête d'événement** : Requête SQL optionnelle pour filtrer ou transformer les données d'événements

    Votre table d'événements doit contenir des colonnes pour :

    * Nom/type d'événement (String)
    * Identifiant utilisateur (String)
    * Horodatage d'événement (DateTime)
    * Propriétés d'événement supplémentaires (JSON ou colonnes individuelles)
  </Step>

  <Step title="Tester la connexion">
    Cliquez sur **Tester la connexion** pour vérifier que OneSignal peut accéder à votre base de données ClickHouse et lire les données d'événements.
  </Step>
</Steps>

***

### Mappage des données d'événement

Mappez vos {DATA_TYPE_0} {PLATFORM_0} au format des événements personnalisés de OneSignal :

| Champ OneSignal | {COLUMN_HEADER_0} | Description                     | Requis |
| --------------- | ----------------- | ------------------------------- | ------ |
| `name`          | `event_name`      | Identifiant de l'événement      | Oui    |
| `external_id`   | `user_id`         | Identifiant de l'utilisateur    | Oui    |
| `timestamp`     | `event_timestamp` | Quand l'événement s'est produit | Non    |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0}      | Non    |

***

## Configuration avancée

### Requêtes SQL personnalisées

Utilisez du SQL personnalisé pour filtrer ou transformer les données d'événements avant de les synchroniser vers 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
```

### Optimisation des performances

ClickHouse est optimisé pour les requêtes analytiques. Considérez :

* **Partitionnement** : Utilisez le partitionnement basé sur les dates sur l'horodatage d'événement
* **Indexation** : Créez des index appropriés sur user\_id et event\_name
* **Vues matérialisées** : Pré-agrégez les données d'événements pour des requêtes plus rapides

<Warning>
  ClickHouse est optimisé pour les charges de travail en ajout uniquement. Assurez-vous que vos données d'événements suivent ce modèle pour de meilleures performances.
</Warning>

***

## FAQ

### À quelle fréquence OneSignal synchronise-t-il les événements depuis ClickHouse ?

OneSignal synchronise les données d'événements en fonction de votre planning configuré, avec un intervalle minimum de 15 minutes.

### Puis-je synchroniser des événements depuis plusieurs tables ClickHouse ?

Oui, vous pouvez créer plusieurs intégrations pour différentes tables ou utiliser des requêtes UNION pour combiner des données de plusieurs tables.
