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

# Databricks

> Exportez les événements de message OneSignal vers Databricks et importez les événements comportementaux Databricks dans OneSignal pour déclencher des Journeys et personnaliser les messages.

export const DATA_TYPE_0 = "event table columns"

export const PLATFORM_0 = "Databricks"

export const COLUMN_HEADER_0 = "Databricks Column"

export const PROPERTIES_DESCRIPTION_0 = "Additional columns as JSON"

## Vue d'ensemble

L'intégration OneSignal + Databricks prend en charge **deux flux** :

* **Exporter** : Envoyez les événements de message OneSignal vers Databricks pour l'analyse et les rapports.
* **Importer** : Envoyez les événements personnalisés depuis Databricks vers OneSignal pour déclencher des Journeys et personnaliser les campagnes.

<Info> L'exportation et l'importation sont configurées séparément. Vous pouvez configurer l'une sans l'autre. </Info>

***

## Exporter les événements de message OneSignal vers Databricks

Synchronisez tous vos événements de message depuis OneSignal dans votre lakehouse Databricks pour des analyses et une visibilité en temps quasi réel.

**Prérequis**

* [Plan Professional ou supérieur](https://onesignal.com/pricing)
* Événements personnalisés activés (pour les importations d'événements)
* Plateforme Databricks : AWS, Azure ou GCP
* Plan Databricks : Premium ou supérieur
* Databricks Unity Catalog (recommandé pour la gouvernance)
* Databricks SQL Warehouse pour les requêtes
* Tables d'événements Delta Lake (pour l'importation d'événements personnalisés)

**Étapes de configuration**

### 1. Collecter les détails du SQL warehouse

<Steps>
  <Step title="Connectez-vous à votre espace de travail Databricks">
    Accédez à **SQL Warehouses** dans votre espace de travail Databricks.
  </Step>

  <Step title="Sélectionnez votre warehouse">
    Sélectionnez votre warehouse et ouvrez l'onglet **Connection details**.
  </Step>

  <Step title="Enregistrez les détails suivants">
    * Server Hostname
    * Port
    * HTTP Path

    <Frame caption="Détails de connexion SQL Databricks pour la configuration Fivetran">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1ce7c549df4a383336633d9f258bec12107a895dc9467134d672c12c2c85923f-cluster-databricks.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=1f03dbaa1a6cc6c4bdf804e49755cbf7" alt="Databricks SQL connection details for Fivetran setup" width="1810" height="988" data-path="images/docs/1ce7c549df4a383336633d9f258bec12107a895dc9467134d672c12c2c85923f-cluster-databricks.png" />
    </Frame>
  </Step>
</Steps>

### 2. Créer un service principal

<Steps>
  <Step title="Accédez à la page Service Principals">
    Accédez à **Workspace Settings > Identity and Access > Service Principals**.
  </Step>

  <Step title="Ajoutez un nouveau service principal">
    Cliquez sur **Add Service Principal**, puis **Add New**.
  </Step>

  <Step title="Nommez le service principal">
    Nommez-le (par ex., `onesignal-sync`).

    <Frame caption="Modal pour ajouter un service principal, avec l'option 'Add new' mise en évidence">
      <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b8eeb211ceb77247f711eb312d3d68d1cb0da10788fd81fd37ae27e929e35cde-Screenshot_2025-04-01_at_9.16.12_PM.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=3bda750f12db717d630220bed24cdb2e" alt="Modal for adding a service principal, with the 'Add new' option highlighted" width="932" height="392" data-path="images/docs/b8eeb211ceb77247f711eb312d3d68d1cb0da10788fd81fd37ae27e929e35cde-Screenshot_2025-04-01_at_9.16.12_PM.png" />
    </Frame>
  </Step>
</Steps>

### 3. Générer un secret

<Steps>
  <Step title="Cliquez sur le principal créé" />

  <Step title="Accédez à l'onglet Secrets" />

  <Step title="Générez un secret">
    Cliquez sur **Generate Secret** et enregistrez-le en toute sécurité.

    <Warning>
      Le secret n'est visible qu'une seule fois—stockez-le en toute sécurité.
    </Warning>

    <Frame caption="Modal 'Generate secret' de Databricks montrant le secret OAuth et l'ID client pour l'authentification API">
      <img src="https://mintcdn.com/onesignal/KSCNwSpBCNSQ8xdF/images/docs/ff24d4d5bf9b21e0cadf67055f1e1a5a4b517b82e9c006520a02b4fd404d259e-Screenshot_2025-03-28_at_4.14.17_PM.png?fit=max&auto=format&n=KSCNwSpBCNSQ8xdF&q=85&s=54eaae1d695bfad59b726ba005ff6f1f" alt="Databricks 'Generate secret' modal showing OAuth secret and client ID for API authentication" width="746" height="368" data-path="images/docs/ff24d4d5bf9b21e0cadf67055f1e1a5a4b517b82e9c006520a02b4fd404d259e-Screenshot_2025-03-28_at_4.14.17_PM.png" />
    </Frame>
  </Step>
</Steps>

### 4. Attribuer les permissions

<Steps>
  <Step title="Accédez à votre Catalogue et ouvrez l'onglet Permissions" />

  <Step title="Cliquez sur Grant" />

  <Step title="Attribuez les permissions suivantes au service principal">
    * USE CATALOG
    * USE SCHEMA
    * SELECT
    * MODIFY
    * CREATE SCHEMA
    * CREATE TABLE

    <Frame caption="Écran d'attribution de privilèges pour un principal Databricks avec permissions de catalogue personnalisées sélectionnées.">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/5755c8739fd66a0f35fec57b817d54d202c64ae95bf8219645ba76abdc8fbe0b-Screenshot_2025-04-01_at_9.19.14_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=0964053615467ebd7372edd7beaf33fe" alt="Privilege assignment screen for a Databricks principal with custom catalog permissions selected" width="1034" height="812" data-path="images/docs/5755c8739fd66a0f35fec57b817d54d202c64ae95bf8219645ba76abdc8fbe0b-Screenshot_2025-04-01_at_9.19.14_PM.png" />
    </Frame>
  </Step>
</Steps>

### 5. Connecter OneSignal

<Steps>
  <Step title="Activez l'intégration">
    Dans OneSignal, accédez à **Data > Integrations > Databricks**.
  </Step>

  <Step title="Entrez les détails">
    * Server Hostname
    * Port
    * HTTP Path
    * Catalog Name
    * Schema Name
    * Identifiants du service principal (ID + Secret)

    <Frame caption="Formulaire de configuration Databricks OneSignal avec champs pour le catalogue, le nom d'hôte, le chemin HTTP et les identifiants OAuth.">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/816a07ed459d3d19910630da0cb52b2075c06d6eaf85af98e969703edab88ad5-Screenshot_2025-03-28_at_4.12.07_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=cd7ba1d76deff9922dc44b25a7528eb2" alt="OneSignal Databricks Configuration form with fields for catalog, hostname, HTTP path, and OAuth credentials" width="718" height="796" data-path="images/docs/816a07ed459d3d19910630da0cb52b2075c06d6eaf85af98e969703edab88ad5-Screenshot_2025-03-28_at_4.12.07_PM.png" />
    </Frame>
  </Step>

  <Step title="Configurez l'intégration">
    * **Fréquence de synchronisation :** toutes les 15 minutes au minimum
    * **Noms de jeu de données/table :** prédéfinis comme `onesignal_events_<app-id>` et `message_events` (modifiable)
    * **Types d'événements :** choisissez ceux à synchroniser—sélectionnez tout ou seulement ce dont vous avez besoin
  </Step>

  <Step title="Sélectionnez les événements">
    Sélectionnez les événements que vous souhaitez recevoir dans votre catalogue Databricks.

    <Frame caption="Écran des paramètres d'exportation d'événements OneSignal montrant l'état de synchronisation, la configuration du jeu de données et les types d'événements de message sélectionnés.">
      <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1a5ff2af7dc8fc42a91ce70583a03b361fd8a343bc57fd3123f26a5d21dabbf8-Screenshot_2025-04-09_at_11.56.58_AM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=ce7eee0983e2026b1847a4d2a45cbe96" alt="OneSignal event export settings screen showing sync status, dataset configuration, and selected message event types" width="2738" height="1254" data-path="images/docs/1a5ff2af7dc8fc42a91ce70583a03b361fd8a343bc57fd3123f26a5d21dabbf8-Screenshot_2025-04-09_at_11.56.58_AM.png" />
    </Frame>
  </Step>

  <Step title="Terminez la configuration">
    Cliquez sur **Save** et attendez la confirmation de succès
  </Step>
</Steps>

<Note>
  La synchronisation initiale des données peut prendre 15 à 30 minutes avant d'apparaître dans BigQuery.

  En attendant, envoyez des messages via push, e-mail, in-app ou SMS pour déclencher les événements sélectionnés.
</Note>

### 6. Voir les données dans Databricks

1. Ouvrez votre **Catalogue** dans Databricks.

2. Une fois la synchronisation terminée, votre schéma configuré apparaîtra.

3. Accédez à la table `message_events` et interrogez-la.

   <Frame caption="Vue du catalogue Databricks montrant la table des événements de message OneSignal sous un schéma de production.">
     <img src="https://mintcdn.com/onesignal/tNi1OgLc_p9hiq7_/images/docs/1b59f6eff2070490f194df8a7496fab6cf17f8fc9355cfb7b77c7c076799632e-Screenshot_2025-04-01_at_9.22.01_PM.png?fit=max&auto=format&n=tNi1OgLc_p9hiq7_&q=85&s=c5908557481f292b1a659b4f0ef210ed" alt="Databricks Catalog view showing OneSignal message events table under a production schema" width="854" height="618" data-path="images/docs/1b59f6eff2070490f194df8a7496fab6cf17f8fc9355cfb7b77c7c076799632e-Screenshot_2025-04-01_at_9.22.01_PM.png" />
   </Frame>

4. Cliquez sur les tables pour un aperçu des données d'exemple.

   <Frame caption="Exemple de données de la table message_events_1 avec champs d'événements OneSignal synchronisés.">
     <img src="https://mintcdn.com/onesignal/6v_cVPknFpo5qSVB/images/docs/112f17e471b8e29173429bfbbd4b34fb68923c9f76faa55b06161114249fcaab-Screenshot_2025-04-01_at_9.22.08_PM.png?fit=max&auto=format&n=6v_cVPknFpo5qSVB&q=85&s=a853fe144d238a24d86b5f989261f2be" alt="Sample data from the message_events_1 table with synced OneSignal event fields" width="1196" height="374" data-path="images/docs/112f17e471b8e29173429bfbbd4b34fb68923c9f76faa55b06161114249fcaab-Screenshot_2025-04-01_at_9.22.08_PM.png" />
   </Frame>

<Info>
  Si vous rencontrez des problèmes comme des schémas manquants, des erreurs de permission ou des événements mal formés, contactez `support@onesignal.com`.
</Info>

## Événements et propriétés de message

### Types d'événements de message

**Propriété :** `event_kind`
**Type :** `String`

Le type de message et d'événement (par exemple `message.push.received`, `message.push.sent`).

| Événement de message (OneSignal) |           `event_kind`           | Description                                                                    |
| :------------------------------: | :------------------------------: | ------------------------------------------------------------------------------ |
|             Push Sent            |        `message.push.sent`       | Notification push envoyée avec succès.                                         |
|           Push Received          |      `message.push.received`     | Push livrée (voir [Confirmed receipt](/docs/en/confirmed-delivery)).           |
|           Push Clicked           |      `message.push.clicked`      | L'utilisateur a cliqué sur la push.                                            |
|            Push Failed           |       `message.push.failed`      | Échec de la livraison. Voir les rapports de message.                           |
|         Push Unsubscribed        |    `message.push.unsubscribed`   | L'utilisateur s'est désabonné de la push.                                      |
|         In-App Impression        |     `message.iam.impression`     | Message In-App affiché.                                                        |
|          In-App Clicked          |       `message.iam.clicked`      | Message In-App cliqué.                                                         |
|        In-App Page Viewed        |   `message.iam.page_displayed`   | Page In-App affichée.                                                          |
|            Email Sent            |       `message.email.sent`       | Email livré.                                                                   |
|          Email Received          |     `message.email.received`     | Email accepté par le serveur de messagerie du destinataire.                    |
|           Email Opened           |      `message.email.opened`      | Email ouvert. Voir [Email Reports](/docs/en/email-message-reports).            |
|        Email Link Clicked        |      `message.email.clicked`     | Lien dans l'email cliqué.                                                      |
|        Email Unsubscribed        |   `message.email.unsubscribed`   | Destinataire désabonné.                                                        |
|      Email Reported As Spam      | `message.email.reported_as_spam` | Marqué comme spam. Voir [Email Deliverability](/docs/en/email-deliverability). |
|           Email Bounced          |      `message.email.bounced`     | Rebond dû à un échec de livraison permanent.                                   |
|           Email Failed           |      `message.email.failed`      | Échec de la livraison.                                                         |
|         Email Suppressed         |    `message.email.suppressed`    | Supprimé en raison de la liste de suppression.                                 |
|             SMS Sent             |        `message.sms.sent`        | SMS envoyé.                                                                    |
|           SMS Delivered          |      `message.sms.delivered`     | SMS livré avec succès.                                                         |
|            SMS Failed            |       `message.sms.failed`       | Échec de la livraison du SMS.                                                  |
|          SMS Undelivered         |     `message.sms.undelivered`    | SMS rejeté ou injoignable.                                                     |

### Schéma des données d'événement

Pour chaque événement de message généré par un utilisateur, les métadonnées suivantes seront jointes à l'enregistrement.

|                  Nom de colonne                 |       Type      | Description                                                                      |
| :---------------------------------------------: | :-------------: | -------------------------------------------------------------------------------- |
|                    `event_id`                   |       UUID      | Identifiant unique de l'événement                                                |
|                `event_timestamp`                |    Timestamp    | Heure de l'occurrence de l'événement                                             |
|                   `event_kind`                  |      String     | Le [Type d'événement](#types-devenements-de-message)                             |
|            `subscription_device_type`           |      String     | Type d'appareil (par exemple, iOS, Android, Web, Email, SMS)                     |
|                    `language`                   |      String     | Code de langue de l'abonnement                                                   |
|                    `version`                    |      String     | Version de l'intégration                                                         |
|                   `device_os`                   |      String     | Version du système d'exploitation de l'appareil                                  |
|                  `device_type`                  |      Number     | Type d'appareil numérique                                                        |
|                     `token`                     |      String     | Jeton push, numéro de téléphone ou email                                         |
|                `subscription_id`                |       UUID      | ID d'abonnement                                                                  |
|                   `subscribed`                  |     Boolean     | Statut d'abonnement                                                              |
|                  `onesignal_id`                 |       UUID      | ID utilisateur OneSignal                                                         |
|                  `last_active`                  |      String     | Horodatage de dernière activité                                                  |
|                      `sdk`                      |      String     | Version du SDK OneSignal                                                         |
|                  `external_id`                  |      String     | ID utilisateur externe qui doit correspondre à l'ID utilisateur de l'intégration |
|                     `app_id`                    |       UUID      | App ID de OneSignal                                                              |
|                  `template_id`                  |       UUID      | Template ID (le cas échéant)                                                     |
|                   `message_id`                  |       UUID      | ID du lot/requête de message                                                     |
|                  `message_name`                 |      String     | Nom du message                                                                   |
|                 `message_title`                 |      String     | Titre du message (anglais uniquement)                                            |
|                `message_contents`               |      String     | Corps du message tronqué (anglais uniquement)                                    |
|                 `failure_reason`                |      String     | Raison d'échec (pour les événements d'échec de push et d'email)                  |
| `_created`, `_id`, `_index`, `_fivetran_synced` | *Usage interne* | Métadonnées de synchronisation Fivetran                                          |

### Notes

* Les synchronisations après l'enregistrement/l'activation peuvent prendre 15 à 30 minutes supplémentaires pour se terminer.
* La désactivation peut toujours entraîner une dernière synchronisation finale après la désactivation.
* Pour garantir une synchronisation efficace des données, notre système crée et gère automatiquement des ensembles de données intermédiaires. Ces ensembles de données, nommés selon un modèle comme `fivetran_{deux mots aléatoires}_staging`, stockent temporairement les données pendant le traitement avant qu'elles ne soient intégrées dans votre schéma principal. Ces ensembles de données intermédiaires sont essentiels pour maintenir un flux de travail rationalisé et ne doivent pas être supprimés, car ils seront automatiquement recréés.

***

## Importer des événements depuis Databricks

Envoyez des données d'événements comportementaux depuis Databricks vers OneSignal pour :

* Déclencher des Journeys basés sur l'activité de l'utilisateur
* Personnaliser les messages en fonction des données comportementales

**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)

- **Espace de travail Databricks** avec SQL Warehouse ou cluster de calcul
- **Personal Access Token** avec les permissions appropriées
- **Tables de données d'événements** contenant des données comportementales au format Delta Lake
- **Unity Catalog** (recommandé pour la gouvernance des données)

**Étapes de configuration**

<Steps>
  <Step title="Créer un Personal Access Token Databricks">
    Générez un Personal Access Token pour que OneSignal puisse accéder à votre espace de travail Databricks :

    1. Accédez à **User Settings** dans votre espace de travail Databricks
    2. Cliquez sur l'onglet **Developer** puis **Access tokens**
    3. Cliquez sur **Generate new token**
    4. Entrez un commentaire comme "OneSignal Integration" et définissez l'expiration (recommandé 90 jours)
    5. Enregistrez le jeton généré (vous en aurez besoin pour OneSignal)
  </Step>

  <Step title="Configurer l'accès SQL Warehouse">
    Assurez-vous que OneSignal peut interroger vos données d'événements via SQL Warehouse :

    1. Accédez à **SQL Warehouses** dans votre espace de travail Databricks
    2. Sélectionnez ou créez un SQL Warehouse pour l'accès OneSignal
    3. Notez le **Server Hostname** et le **HTTP Path** depuis les détails de connexion
    4. Assurez-vous que le warehouse a accès à vos tables de données d'événements
  </Step>

  <Step title="Accorder les permissions de table">
    Accordez à OneSignal l'accès en lecture aux tables contenant les données d'événements :

    ```sql theme={null}
    -- For Unity Catalog enabled workspaces
    GRANT SELECT ON TABLE catalog.schema.event_table TO `onesignal@yourdomain.com`;

    -- For Hive metastore tables
    GRANT SELECT ON TABLE database.event_table TO `onesignal@yourdomain.com`;
    ```
  </Step>

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

    Sélectionnez **Databricks** et fournissez :

    * **Server Hostname** : Le nom d'hôte de votre SQL Warehouse Databricks
    * **HTTP Path** : Chemin HTTP du SQL Warehouse
    * **Personal Access Token** : Jeton créé à l'étape 1
    * **Catalog** (optionnel) : Nom du Unity Catalog si vous utilisez Unity Catalog
  </Step>

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

    * **Database/Schema** : Nom de la base de données ou du schéma contenant les tables d'événements
    * **Table** : Nom de la table avec les enregistrements d'événements (par ex., `user_events`)
    * **Event Query** : 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 de l'événement (Timestamp)
    * Propriétés d'événements supplémentaires
  </Step>

  <Step title="Tester la connexion">
    Cliquez sur **Test Connection** pour vérifier que OneSignal peut accéder à votre espace de travail Databricks 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

#### Intégration Unity Catalog

Exploitez Unity Catalog pour un accès aux données gouverné :

```sql theme={null}
SELECT
  event_name,
  user_id,
  event_timestamp,
  to_json(
    named_struct(
      'product_id', product_id,
      'purchase_amount', purchase_amount,
      'category', category
    )
  ) as payload
FROM catalog.schema.user_events
WHERE event_timestamp >= current_timestamp() - INTERVAL 7 DAYS
```

### Optimisation Delta Lake

Optimisez les tables d'événements pour de meilleures performances de requête :

* **Partitionnement** : Partitionnez par date (`event_date`) pour des requêtes temporelles plus rapides
* **Z-Ordering** : Z-order par `user_id` et `event_name` pour un meilleur filtrage
* **Fonctionnalités Delta Lake** : Utilisez le liquid clustering pour une optimisation automatique

#### Traitement des événements en streaming

Pour le traitement des événements en temps réel, envisagez :

* **Structured Streaming** : Traitez les événements au fur et à mesure de leur arrivée
* **Delta Live Tables** : Construisez des pipelines de traitement d'événements robustes
* **Auto Loader** : Ingérez continuellement de nouveaux fichiers d'événements

<Warning>
  Assurez-vous que votre SQL Warehouse dispose de ressources de calcul suffisantes pour gérer les requêtes de OneSignal sans affecter les autres charges de travail.
</Warning>

***

## FAQ

### Pourquoi vois-je différents ID de message avec le même contenu ?

Cela se produit lorsque le même message est envoyé plus d'une fois, probablement via un flux transactionnel ou un modèle de message réutilisé sur plusieurs envois.

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

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

### Puis-je utiliser les notebooks Databricks pour le traitement des événements ?

Oui, vous pouvez utiliser des notebooks pour traiter et préparer les données d'événements, puis les exposer via des tables que OneSignal peut interroger.

### Qu'en est-il de l'optimisation des coûts pour les requêtes d'événements ?

Envisagez d'utiliser des SQL Warehouses serverless pour un calcul rentable et à la demande qui s'adapte automatiquement en fonction de la charge de requête.

***
