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

> Sincroniza eventos personalizados desde Snowflake a OneSignal para activar Journeys automatizados y campañas de mensajería personalizadas basadas en el comportamiento del usuario.

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="Descripción general de la integración de 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>

***

## Descripción general

La integración de OneSignal + Snowflake admite dos potentes canales de datos:

* **Exportar**: Envía automáticamente datos de eventos de mensajería (push, correo electrónico, SMS, in-app) desde OneSignal a Snowflake para análisis y generación de informes.
* **Importar**: Sincroniza eventos de usuario personalizados desde tus conjuntos de datos de Snowflake a OneSignal para activar Journeys automatizados y mensajería personalizada.

Juntas, estas integraciones te brindan control total sobre los datos de participación del usuario, lo que impulsa análisis avanzados y mensajería en tiempo real impulsada por el comportamiento.

***

## Exportar eventos de OneSignal a Snowflake

Envía eventos de rendimiento y participación de mensajería (p. ej., envíos, aperturas, clics) a Snowflake para:

* Crear paneles e informes personalizados
* Rastrear tendencias de entrega y participación entre canales
* Combinar datos de OneSignal con otros datos comerciales para análisis

**Requisitos**

* **Plan Professional** de OneSignal (no disponible en aplicaciones gratuitas).
* [Cuenta de Snowflake](https://docs.snowflake.com/en/user-guide/getting-started-tutorial)
* Asegúrate de que tu cuenta de Snowflake tenga los roles `IMPORT SHARE` y `CREATE DATABASE`.
  * Recomendamos usar el rol `ACCOUNTADMIN` para aceptar el recurso compartido.

**Pasos de configuración**

### 1. Registrarse

Para activar la integración de Snowflake, deberás solicitar acceso a través de la [lista de OneSignal Marketplace](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW) para Message Events Data. Desde allí nos pondremos en contacto con tu equipo para obtener más información.

### 2. Proporcionar información de la cuenta

Una vez que nos conectemos con tu equipo, deberás proporcionarnos algunos detalles para que podamos compartir datos contigo. Necesitaremos tu **ID de cuenta de Snowflake** y tu **ID de organización de Snowflake**. La forma más fácil de obtener esa información es hacer clic en el botón "Copiar identificador de cuenta" (como se muestra a continuación).

<Info>
  Debes estar en contacto con nosotros a través de la [lista de OneSignal Marketplace](https://app.snowflake.com/marketplace/listing/GZ2FQZLH2NP/onesignal-message-events-data?search=onesignal\&originTab=provider\&providerName=OneSignal\&profileGlobalName=GZSTZLH2MW). Sin embargo, si tienes alguna otra pregunta sobre cómo proporcionar información de la cuenta, puedes enviar un correo electrónico a `snowflake-data-sharing@onesignal.com`
</Info>

<Frame caption="Copiar el identificador de cuenta de 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>

Una vez que seas aceptado en el programa, estate atento a algunos elementos:

* Correo electrónico de OneSignal dándote la bienvenida al programa
* Correo electrónico de Snowflake notificando que el recurso compartido de datos está completo

<Frame caption="Correo electrónico de notificación de recurso compartido de datos de 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. Aceptar el recurso compartido de datos en Snowflake

Una vez que recibas un correo electrónico de Snowflake notificándote que el recurso compartido de datos está completo, deberías poder iniciar sesión en la aplicación de Snowflake y aceptar el recurso compartido de datos.

Navega a **Data** → **Private Sharing** donde deberías poder ver una nueva lista compartida privadamente. Una vez que hagas clic en **Get**, tus datos comenzarán a replicarse en tu región.

<Frame caption="Interfaz de compartición privada de 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>

**Nota**: Si el botón **Get** no está disponible pero hay un botón **Request**, los permisos del rol que intenta realizar el recurso compartido no incluyen `CREATE DATABASE` o `IMPORT SHARE`. Sugerimos cambiar al rol `ACCOUNTADMIN`.

La replicación de datos llevará algún tiempo. Snowflake hará un seguimiento con un correo electrónico adicional una vez que los datos estén disponibles. Deberías ver un cuadro de diálogo como este

<Frame caption="Cuadro de diálogo de estado de replicación de datos">
  <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>

Una vez que los datos estén listos para usar, tu lista debería tener un nuevo botón **Get** disponible. Haz clic en el botón **Get** y serás recibido con un nuevo cuadro de diálogo

<Frame caption="Cuadro de diálogo de configuración de base de datos">
  <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>

Establece el nombre de la base de datos y los roles de base de datos según tus preferencias. Luego haz clic en **Get**

<Frame caption="Finalización de la configuración del recurso compartido de datos">
  <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>
  ¡Eso es todo! Los datos ahora se están sincronizando desde OneSignal a Snowflake. La cadencia de sincronización se establece una vez cada 24 horas, por lo que es posible que los datos iniciales no estén disponibles hasta el día siguiente.
</Check>

## Eventos y propiedades

Una descripción general de los datos disponibles en Snowflake Marketplace

### Datos de eventos de mensajes

Consulta [Event Streams](./event-streams#event-data) para obtener más detalles.

Para cada evento de mensaje generado por un usuario, se adjuntarán los siguientes metadatos al registro.

| Nombre de columna            | Tipo            | Descripción                                                                                                             | Ejemplo                                               |
| ---------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- |
| event\_id                    | UUID            | Un ID único que representa el evento                                                                                    | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| event\_kind                  | string          | El tipo de evento que ocurrió. La lista de tipos de eventos se puede encontrar [aquí](./snowflake#message-event-kinds). | `message.email.opened`                                |
| event\_impression\_timestamp | unix\_timestamp | El momento en que OneSignal procesa el evento                                                                           | `1684951205`                                          |
| subscription\_id             | UUID            | Un ID único que representa el dispositivo/suscripción                                                                   | `6e8b6978-75a4-4882-878c-2d15a78c2409`                |
| subscription\_language       | string          | El idioma de esta suscripción                                                                                           | `en`                                                  |
| subscription\_timezone       | integer         | La zona horaria especificada de esta suscripción                                                                        | `-25200`                                              |
| subscription\_device\_type   | string          | El tipo de dispositivo que utiliza esta suscripción.                                                                    | `SMS`                                                 |
| onesignal\_id                | UUID            | El onesignal\_id del usuario que hizo la impresión                                                                      | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| external\_id                 | string          | El external\_id del usuario que hizo la impresión                                                                       | `MyExternalId`                                        |
| message\_id                  | UUID            | Un ID único que representa el mensaje                                                                                   | `dc76df03-287c-403a-aabd-b2d4fe44e5c6`                |
| message\_name                | string          | El ID legible por humanos de la Notificación/Mensaje                                                                    | `Campaign 1`                                          |
| message\_title               | string          | El título de la Notificación/Mensaje.*Solo inglés en este momento*                                                      | `Bonus 50 coins when you play!`                       |
| message\_body                | string          | El cuerpo del mensaje. (Truncado) *Solo inglés en este momento.*                                                        | `Play against your friends and earn an additional...` |

### Tipos de eventos de mensajes

Consulta [Event Streams](./event-streams#event-data) para obtener más detalles.

Los eventos de mensajes son la primera categoría de datos que ofreceremos en Snowflake Marketplace. ¡Contáctanos en `snowflake-data-sharing@onesignal.com` con cualquier solicitud de categorías adicionales de datos!

### Retención de datos

Los datos compartidos desde OneSignal a través de Snowflake se retienen durante un período de 30 días. Para garantizar la preservación de datos más allá de este plazo, te recomendamos que copies los datos relevantes a tus propias tablas.

***

## Importar eventos desde Snowflake

Envía datos de eventos de comportamiento desde Snowflake a OneSignal para:

* Activar Journeys basados en la actividad del usuario
* Personalizar mensajes basados en datos de comportamiento

**Requisitos**

* Acceso a [flujos de eventos](/docs/es/event-streams) para eventos de mensajes salientes (Se aplican limitaciones del plan y sobrecargos)
* Acceso a [eventos personalizados](/docs/es/custom-events) para sincronización de eventos entrantes (Se aplican limitaciones del plan y sobrecargos)
* [Plan de cuenta actualizado](https://onesignal.com/pricing) (no disponible en aplicaciones gratuitas)

- **Cuenta de Snowflake** con acceso al almacén
- **Datos de eventos** almacenados en tablas o vistas de Snowflake
- **Conectividad de red** desde OneSignal a tu instancia de Snowflake
- **Credenciales de usuario** con los permisos apropiados

**Pasos de configuración**

<Steps>
  <Step title="Crear rol dedicado para OneSignal">
    Crea una jerarquía de roles siguiendo las mejores prácticas 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="Crear almacén dedicado">
    Crea un almacén optimizado en costos para las operaciones de 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="Crear usuario y otorgar permisos">
    Crea el usuario de OneSignal y otorga acceso a tus datos de eventos:

    ```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="Crear base de datos de contabilidad (Motor de sincronización avanzado)">
    Crea una base de datos privada para la gestión del estado de sincronización de 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>
      Omite este paso si utilizas el motor de sincronización básico o el modo de solo lectura.
    </Warning>
  </Step>

  <Step title="Configurar autenticación">
    Configura la autenticación de par de claves (recomendado) para mayor seguridad:

    1. Genera un par de claves pública/privada siguiendo la [documentación de Snowflake](https://docs.snowflake.com/en/user-guide/key-pair-auth)
    2. Configura la clave pública en tu usuario de Snowflake
    3. Usa la clave privada en la configuración de conexión de OneSignal

    Alternativamente, puedes usar autenticación por contraseña (obsoleto - se bloqueará en noviembre de 2025).
  </Step>

  <Step title="Conectar a OneSignal">
    En OneSignal, vaya a **Datos > Integraciones** y haga clic en **Agregar integración**.

    Selecciona **Snowflake** y proporciona los siguientes detalles de conexión:

    * **Nombre de cuenta:** Tu identificador de cuenta de Snowflake (p. ej., `abc123.us-east-1`)
    * **Almacén:** `CENSUS_WAREHOUSE`
    * **Usuario:** `CENSUS`
    * **Base de datos:** El nombre de tu base de datos de eventos
    * **Esquema:** El nombre de tu esquema de datos de eventos
    * **Autenticación:** Par de claves (proporciona la clave privada y la frase de contraseña opcional)
  </Step>
</Steps>

***

### Mapeo de datos de eventos

Mapee su {DATA_TYPE_0} de {PLATFORM_0} al formato de eventos personalizados de OneSignal:

| Campo de OneSignal | {COLUMN_HEADER_0} | Descripción                | Requerido |
| ------------------ | ----------------- | -------------------------- | --------- |
| `name`             | `event_name`      | Identificador de evento    | Sí        |
| `external_id`      | `user_id`         | Identificador de usuario   | Sí        |
| `timestamp`        | `event_timestamp` | Cuándo ocurrió el evento   | No        |
| `properties`       | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No        |

#### Esquema de tabla de eventos de ejemplo

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

#### Modo de consulta SQL

Escribe consultas SQL personalizadas para transformar tus datos de eventos:

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

### Configuración avanzada

#### Gestión de costos del almacén

* Usa tamaño de almacén X-Small para optimización de costos
* Configura suspensión automática (60 segundos) y reanudación automática
* Programa sincronizaciones durante horas de menor actividad
* Considera compartir el almacén con otros sistemas de procesamiento por lotes

#### Soporte de sincronizaciones en vivo

Para el procesamiento de eventos en tiempo real, habilita el seguimiento de cambios en tus tablas de eventos:

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

#### Seguridad de red

Si utilizas la política de red de IPs permitidas de Snowflake, agrega las direcciones IP de OneSignal a tu lista de permitidos. Contacta al soporte de OneSignal para conocer los rangos de IP actuales.

***

## Limitaciones

* Las consultas analíticas complejas pueden afectar el rendimiento y los costos del almacén
* La autenticación por Usuario/Contraseña quedará obsoleta en noviembre de 2025
* La base de datos CENSUS está reservada solo para operaciones de OneSignal

***

## Desconectar recurso compartido de datos con OneSignal

Envíanos un correo electrónico a `snowflake-data-sharing@onesignal.com` para solicitar la desactivación de tu recurso compartido de datos con OneSignal.

***

## Preguntas frecuentes

### ¿Qué método de autenticación debo usar?

Usa **autenticación de par de claves** (recomendado). La autenticación por Usuario/Contraseña será bloqueada por Snowflake a partir de noviembre de 2025.

### ¿Puedo usar un almacén existente?

Sí, puedes compartir un almacén con otros sistemas de procesamiento por lotes como dbt o Fivetran para optimizar costos. Asegúrate de que el almacén tenga capacidad suficiente para tus necesidades de procesamiento de eventos.

### ¿Cómo puedo optimizar los costos?

* Usa tamaño de almacén X-Small
* Configura suspensión automática agresiva (60 segundos)
* Programa sincronizaciones durante horas de menor actividad
* Usa sincronizaciones por hora/diarias en lugar de sincronización continua

***
