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

# Snowflake (Legacy)

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

export const DATA_TYPE_0 = "event data"

export const PLATFORM_0 = "Snowflake"

export const COLUMN_HEADER_0 = "Snowflake Column"

export const PROPERTIES_DESCRIPTION_0 = "Event metadata as VARIANT/JSON"

<Frame caption="Aperçu de l'intégration OneSignal Snowflake">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4bd3285-onesignal-snowflake-integration-2.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=c41bc1d77c30e6c282bb0bfdbcd67767" width="1280" height="720" data-path="images/docs/4bd3285-onesignal-snowflake-integration-2.png" />
</Frame>

***

## Aperçu

L'intégration OneSignal + Snowflake prend en charge deux pipelines de données puissants :

* **Exporter** : Envoyez automatiquement les données d'événements de messagerie (push, email, SMS, in-app) depuis OneSignal vers Snowflake pour l'analyse et le reporting.
* **Importer** : Synchronisez les événements utilisateur personnalisés de vos ensembles de données Snowflake vers OneSignal pour déclencher des Journeys automatisés et une messagerie personnalisée.

Ensemble, ces intégrations vous donnent un contrôle total sur les données d'engagement des utilisateurs, permettant des analyses avancées et une messagerie en temps réel basée sur le comportement.

***

## Exporter les événements OneSignal vers Snowflake

Envoyez les événements de performance et d'engagement de messagerie (par exemple, envois, ouvertures, clics) vers Snowflake pour :

* Créer des tableaux de bord et des rapports personnalisés
* Suivre les tendances de livraison et d'engagement sur tous les canaux
* Combiner les données OneSignal avec d'autres données métier pour l'analyse

**Exigences**

* **Plan Professional** OneSignal (non disponible sur les applications gratuites).
* [Compte Snowflake](https://docs.snowflake.com/en/user-guide/getting-started-tutorial)
* Assurez-vous que votre compte Snowflake dispose des rôles `IMPORT SHARE` et `CREATE DATABASE`.
  * Nous recommandons d'utiliser le rôle `ACCOUNTADMIN` pour accepter le partage.

**Étapes de configuration**

### 1. S'inscrire

Pour activer l'intégration Snowflake, vous devrez demander l'accès via la [liste OneSignal Marketplace](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW) pour les données d'événements de messages. De là, nous contacterons votre équipe pour obtenir plus d'informations.

### 2. Fournir les informations du compte

Une fois que nous nous connectons avec votre équipe, vous devrez nous fournir quelques détails afin que nous puissions partager des données avec vous. Nous aurons besoin de votre **ID de compte Snowflake** et de votre **ID d'organisation Snowflake**. Le moyen le plus simple d'obtenir ces informations est de cliquer sur le bouton "Copier l'identifiant du compte" (comme indiqué ci-dessous).

<Info>
  Vous devriez être en contact avec nous via la [liste OneSignal Marketplace](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW). Cependant, si vous avez d'autres questions sur la fourniture d'informations de compte, vous pouvez envoyer un e-mail à `snowflake-data-sharing@onesignal.com`
</Info>

<Frame caption="Copie de l'identifiant du compte Snowflake">
  <img src="https://mintcdn.com/onesignal/4HyuQPBpu-4xjmQC/images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png?fit=max&auto=format&n=4HyuQPBpu-4xjmQC&q=85&s=ad89f70c336cfa9fc66849021cdab551" width="1554" height="620" data-path="images/docs/cf472c3-Screen_Shot_2023-06-27_at_4.08.19_PM.png" />
</Frame>

Une fois que vous êtes accepté dans le programme, soyez attentif à quelques éléments :

* E-mail de OneSignal vous souhaitant la bienvenue dans le programme
* E-mail de Snowflake notifiant que le partage de données est terminé

<Frame caption="E-mail de notification de partage de données Snowflake">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7219faf-Untitled.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=3c4af6e7ba0f66836b5a2e91689f282e" width="1238" height="1078" data-path="images/docs/7219faf-Untitled.png" />
</Frame>

### 3. Accepter le partage de données dans Snowflake

Une fois que vous recevez un e-mail de Snowflake vous informant que le partage de données est terminé, vous devriez pouvoir vous connecter à l'application Snowflake et accepter le partage de données.

Accédez à **Data** → **Private Sharing** où vous devriez pouvoir voir une nouvelle liste partagée en privé. Une fois que vous cliquez sur **Get**, vos données commenceront à se répliquer dans votre région.

<Frame caption="Interface de partage privé Snowflake">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a8dfc31-Untitled_1.png?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=cb692bad2c9be897bf1c40185911e594" width="1086" height="516" data-path="images/docs/a8dfc31-Untitled_1.png" />
</Frame>

**Remarque** : Si le bouton **Get** n'est pas disponible mais qu'un bouton **Request** l'est, les autorisations du rôle tentant de faire le partage n'incluent pas `CREATE DATABASE` ou `IMPORT SHARE`. Nous suggérons de passer au rôle `ACCOUNTADMIN`.

La réplication des données prendra un certain temps. Snowflake enverra un e-mail supplémentaire une fois les données disponibles. Vous devriez voir une boîte de dialogue qui ressemble à ceci

<Frame caption="Boîte de dialogue de l'état de réplication des données">
  <img src="https://mintcdn.com/onesignal/YOTSrtBSoqdrJ37A/images/docs/4d78360-Untitled_2.png?fit=max&auto=format&n=YOTSrtBSoqdrJ37A&q=85&s=406c4f7f2884deea338e690e14d76e44" width="664" height="886" data-path="images/docs/4d78360-Untitled_2.png" />
</Frame>

Une fois les données prêtes à être utilisées, votre liste devrait avoir un nouveau bouton **Get** disponible. Cliquez sur le bouton **Get** et vous serez accueilli avec une nouvelle boîte de dialogue

<Frame caption="Boîte de dialogue de configuration de la base de données">
  <img src="https://mintcdn.com/onesignal/3zq1PvSaqvUE2bIx/images/docs/28ba7ca-Untitled_3.png?fit=max&auto=format&n=3zq1PvSaqvUE2bIx&q=85&s=55e9e64a31cd20e552196d80b0fe7196" width="1320" height="1314" data-path="images/docs/28ba7ca-Untitled_3.png" />
</Frame>

Définissez le nom de la base de données et les rôles de base de données selon vos préférences. Ensuite, cliquez sur **Get**

<Frame caption="Finalisation de la configuration du partage de données">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/8dae239-Untitled_4.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=6ee68952c4a8e3c2cb430ba2e20ec136" width="694" height="698" data-path="images/docs/8dae239-Untitled_4.png" />
</Frame>

<Check>
  C'est tout ! Les données sont maintenant synchronisées depuis OneSignal vers Snowflake. La cadence de synchronisation est définie à une fois toutes les 24 heures, donc les données initiales peuvent ne pas être disponibles avant le lendemain.
</Check>

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

Un aperçu des données disponibles sur le Marketplace de Snowflake

### Données d'événements de messages

Voir [Event Streams](./event-streams#event-data) pour plus de détails.

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

| Nom de colonne               | Type            | Description                                                                                                                      | Exemple                                               |
| ---------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| event\_id                    | UUID            | Un ID unique qui représente l'événement                                                                                          | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| event\_kind                  | string          | Le type d'événement qui s'est produit. La liste des types d'événements peut être trouvée [ici](./snowflake#message-event-kinds). | `message.email.opened`                                |
| event\_impression\_timestamp | unix\_timestamp | L'heure à laquelle OneSignal traite l'événement                                                                                  | `1684951205`                                          |
| subscription\_id             | UUID            | Un ID unique qui représente l'appareil/l'abonnement                                                                              | `6e8b6978-75a4-4882-878c-2d15a78c2409`                |
| subscription\_language       | string          | La langue de cet abonnement                                                                                                      | `en`                                                  |
| subscription\_timezone       | integer         | Le fuseau horaire spécifié de cet abonnement                                                                                     | `-25200`                                              |
| subscription\_device\_type   | string          | Le type d'appareil que cet abonnement utilise.                                                                                   | `SMS`                                                 |
| onesignal\_id                | UUID            | Le onesignal\_id de l'utilisateur qui a fait l'impression                                                                        | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| external\_id                 | string          | Le external\_id de l'utilisateur qui a fait l'impression                                                                         | `MyExternalId`                                        |
| message\_id                  | UUID            | Un ID unique qui représente le message                                                                                           | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| message\_name                | string          | L'ID lisible par l'homme de la Notification/Message                                                                              | `Campaign 1`                                          |
| message\_title               | string          | Le titre de la Notification/Message.*Anglais uniquement pour le moment*                                                          | `Bonus 50 coins when you play!`                       |
| message\_body                | string          | Le corps du message. (Tronqué) *Anglais uniquement pour le moment.*                                                              | `Play against your friends and earn an additional...` |

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

Voir [Event Streams](./event-streams#event-data) pour plus de détails.

Les événements de messages sont la première catégorie de données que nous offrirons sur le Marketplace de Snowflake. N'hésitez pas à nous contacter à `snowflake-data-sharing@onesignal.com` pour toute demande de catégories de données supplémentaires !

### Rétention des données

Les données partagées depuis OneSignal via Snowflake sont conservées pendant une période de 30 jours. Pour assurer la préservation des données au-delà de ce délai, nous vous recommandons de copier les données pertinentes dans vos propres tables.

***

## Importer des événements depuis Snowflake

Envoyez les données d'événements comportementaux depuis Snowflake vers OneSignal pour :

* Déclencher des Journeys basés sur l'activité utilisateur
* Personnaliser la messagerie basée sur les données comportementales

**Exigences**

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

- **Compte Snowflake** avec accès à l'entrepôt
- **Données d'événements** stockées dans des tables ou vues Snowflake
- **Connectivité réseau** depuis OneSignal vers votre instance Snowflake
- **Identifiants utilisateur** avec les autorisations appropriées

**Étapes de configuration**

<Steps>
  <Step title="Créer un rôle dédié pour OneSignal">
    Créez une hiérarchie de rôles en suivant les meilleures pratiques de Snowflake :

    ```sql theme={null}
    -- Create a role for the census user
    CREATE ROLE CENSUS_ROLE;

    -- Ensure the sysadmin role inherits any privileges the census role is granted
    GRANT ROLE CENSUS_ROLE TO ROLE SYSADMIN;
    ```
  </Step>

  <Step title="Créer un entrepôt dédié">
    Créez un entrepôt optimisé en coûts pour les opérations OneSignal :

    ```sql theme={null}
    -- Create a warehouse for the census role, optimizing for cost over performance
    CREATE WAREHOUSE CENSUS_WAREHOUSE WITH
        WAREHOUSE_SIZE = XSMALL
        AUTO_SUSPEND = 60
        AUTO_RESUME = TRUE
        INITIALLY_SUSPENDED = FALSE;

    GRANT USAGE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT OPERATE ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    GRANT MONITOR ON WAREHOUSE CENSUS_WAREHOUSE TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="Créer un utilisateur et accorder des autorisations">
    Créez l'utilisateur OneSignal et accordez l'accès à vos données d'événements :

    ```sql theme={null}
    -- Create the census user
    CREATE USER CENSUS WITH
        DEFAULT_ROLE = CENSUS_ROLE
        DEFAULT_WAREHOUSE = CENSUS_WAREHOUSE
        PASSWORD = '<strong-unique-password>';

    GRANT ROLE CENSUS_ROLE TO USER CENSUS;

    -- Grant access to your event data (replace with your actual database/schema)
    GRANT USAGE ON DATABASE "<your-database>" TO ROLE CENSUS_ROLE;
    GRANT USAGE ON SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE TABLES IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON ALL VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    GRANT SELECT ON FUTURE VIEWS IN SCHEMA "<your-database>"."<your-schema>" TO ROLE CENSUS_ROLE;
    ```
  </Step>

  <Step title="Créer une base de données de comptabilité (Moteur de synchronisation avancé)">
    Créez une base de données privée pour la gestion de l'état de synchronisation OneSignal :

    ```sql theme={null}
    -- Create a private bookkeeping database
    CREATE DATABASE "CENSUS";
    GRANT ALL PRIVILEGES ON DATABASE "CENSUS" TO ROLE CENSUS_ROLE;

    CREATE SCHEMA "CENSUS"."CENSUS";
    GRANT ALL PRIVILEGES ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    GRANT CREATE STAGE ON SCHEMA "CENSUS"."CENSUS" TO ROLE CENSUS_ROLE;
    ```

    <Warning>
      Ignorez cette étape si vous utilisez le moteur de synchronisation de base ou le mode lecture seule.
    </Warning>
  </Step>

  <Step title="Configurer l'authentification">
    Configurez l'authentification par paire de clés (recommandé) pour une sécurité renforcée :

    1. Générez une paire de clés publique/privée en suivant [la documentation de Snowflake](https://docs.snowflake.com/en/user-guide/key-pair-auth)
    2. Configurez la clé publique sur votre utilisateur Snowflake
    3. Utilisez la clé privée dans les paramètres de connexion de OneSignal

    Alternativement, vous pouvez utiliser l'authentification par mot de passe (obsolète - sera bloquée en novembre 2025).
  </Step>

  <Step title="Se connecter à OneSignal">
    Dans OneSignal, allez dans **Data > Integrations** et cliquez sur **Add Integration**.

    Sélectionnez **Snowflake** et fournissez les détails de connexion suivants :

    * **Nom de compte :** Votre identifiant de compte Snowflake (par exemple, `abc123.us-east-1`)
    * **Entrepôt :** `CENSUS_WAREHOUSE`
    * **Utilisateur :** `CENSUS`
    * **Base de données :** Le nom de votre base de données d'événements
    * **Schéma :** Le nom de votre schéma de données d'événements
    * **Authentification :** Paire de clés (fournissez la clé privée et la phrase secrète optionnelle)
  </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    |

#### Exemple de schéma de table d'événements

```sql theme={null}
-- Example Snowflake event table
CREATE TABLE analytics.user_events (
    event_id STRING,
    event_name STRING NOT NULL,
    user_id STRING NOT NULL,
    event_timestamp TIMESTAMP_TZ DEFAULT CURRENT_TIMESTAMP(),
    event_properties VARIANT,
    session_id STRING,
    device_type STRING
);
```

#### Mode de requête SQL

Écrivez des requêtes SQL personnalisées pour transformer vos données d'événements :

```sql theme={null}
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_TIMESTAMP())
    AND event_properties:value::NUMBER > 100
ORDER BY event_timestamp DESC;
```

### Configuration avancée

#### Gestion des coûts de l'entrepôt

* Utilisez une taille d'entrepôt X-Small pour l'optimisation des coûts
* Configurez la suspension automatique (60 secondes) et la reprise automatique
* Planifiez les synchronisations pendant les heures creuses
* Envisagez de partager l'entrepôt avec d'autres systèmes de traitement par lots

#### Support des synchronisations en direct

Pour le traitement des événements en temps réel, activez le suivi des modifications sur vos tables d'événements :

```sql theme={null}
ALTER TABLE "analytics"."user_events" SET CHANGE_TRACKING = TRUE;
```

#### Sécurité réseau

Si vous utilisez la politique réseau des IP autorisées de Snowflake, ajoutez les adresses IP de OneSignal à votre liste d'autorisation. Contactez le support OneSignal pour les plages d'IP actuelles.

***

## Limitations

* Les requêtes analytiques complexes peuvent impacter les performances et les coûts de l'entrepôt
* L'authentification Utilisateur/Mot de passe sera obsolète en novembre 2025
* La base de données CENSUS est réservée aux opérations OneSignal uniquement

***

## Déconnecter le partage de données avec OneSignal

Veuillez nous envoyer un e-mail à `snowflake-data-sharing@onesignal.com` pour demander la désactivation de votre partage de données avec OneSignal.

***

## FAQ

### Quelle méthode d'authentification dois-je utiliser ?

Utilisez l'**authentification par paire de clés** (recommandé). L'authentification Utilisateur/Mot de passe sera bloquée par Snowflake à partir de novembre 2025.

### Puis-je utiliser un entrepôt existant ?

Oui, vous pouvez partager un entrepôt avec d'autres systèmes de traitement par lots comme dbt ou Fivetran pour optimiser les coûts. Assurez-vous que l'entrepôt a une capacité suffisante pour vos besoins de traitement d'événements.

### Comment puis-je optimiser les coûts ?

* Utilisez une taille d'entrepôt X-Small
* Configurez une suspension automatique agressive (60 secondes)
* Planifiez les synchronisations pendant les heures creuses
* Utilisez des synchronisations horaires/quotidiennes au lieu d'une synchronisation continue

***
