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

> Exporte eventos de mensajes de OneSignal a Databricks e importe eventos de comportamiento de Databricks a OneSignal para activar Journeys y personalizar mensajes.

export const DATA_TYPE_0 = "columnas de tabla de eventos"

export const PLATFORM_0 = "Databricks"

export const COLUMN_HEADER_0 = "Columna de Databricks"

export const PROPERTIES_DESCRIPTION_0 = "Columnas adicionales como JSON"

## Descripción general

La integración de OneSignal + Databricks admite **dos flujos**:

* **Exportar**: Envíe eventos de mensajes de OneSignal a Databricks para análisis e informes.
* **Importar**: Envíe eventos personalizados desde Databricks a OneSignal para activar Journeys y personalizar campañas.

<Info> La exportación e importación se configuran por separado. Puede configurar una sin la otra. </Info>

***

## Exportar eventos de mensajes de OneSignal a Databricks

Sincronice todos sus eventos de mensajes desde OneSignal en su lakehouse de Databricks para análisis y visibilidad casi en tiempo real.

**Requisitos**

* [Plan Professional o superior](https://onesignal.com/pricing)
* Eventos personalizados habilitados (para importaciones de eventos)
* Plataforma Databricks: AWS, Azure o GCP
* Plan Databricks: Premium o superior
* Databricks Unity Catalog (recomendado para gobernanza)
* Databricks SQL Warehouse para consultas
* Tablas de eventos Delta Lake (para importación de eventos personalizados)

**Pasos de configuración**

### 1. Recopilar detalles del almacén SQL

<Steps>
  <Step title="Inicie sesión en su espacio de trabajo de Databricks">
    Vaya a **SQL Warehouses** en su espacio de trabajo de Databricks.
  </Step>

  <Step title="Seleccione su almacén">
    Seleccione su almacén y abra la pestaña **Connection details**.
  </Step>

  <Step title="Guarde los siguientes detalles">
    * Server Hostname
    * Port
    * HTTP Path

    <Frame caption="Detalles de conexión SQL de Databricks para configuración de 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="Detalles de conexión SQL de Databricks para configuración de Fivetran" width="1810" height="988" data-path="images/docs/1ce7c549df4a383336633d9f258bec12107a895dc9467134d672c12c2c85923f-cluster-databricks.png" />
    </Frame>
  </Step>
</Steps>

### 2. Crear un principal de servicio

<Steps>
  <Step title="Ir a la página Service Principals">
    Vaya a **Workspace Settings > Identity and Access > Service Principals**.
  </Step>

  <Step title="Agregar un nuevo principal de servicio">
    Haga clic en **Add Service Principal**, luego en **Add New**.
  </Step>

  <Step title="Nombrar el principal de servicio">
    Nómbrelo (por ejemplo, `onesignal-sync`).

    <Frame caption="Modal para agregar un principal de servicio, con la opción 'Add new' resaltada">
      <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 para agregar un principal de servicio, con la opción 'Add new' resaltada" width="932" height="392" data-path="images/docs/b8eeb211ceb77247f711eb312d3d68d1cb0da10788fd81fd37ae27e929e35cde-Screenshot_2025-04-01_at_9.16.12_PM.png" />
    </Frame>
  </Step>
</Steps>

### 3. Generar un secreto

<Steps>
  <Step title="Hacer clic en el principal creado" />

  <Step title="Ir a la pestaña Secrets" />

  <Step title="Generar un secreto">
    Haga clic en **Generate Secret** y guárdelo de forma segura.

    <Warning>
      El secreto solo es visible una vez: guárdelo de forma segura.
    </Warning>

    <Frame caption="Modal 'Generate secret' de Databricks que muestra el secreto OAuth y el ID de cliente para autenticación 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="Modal 'Generate secret' de Databricks que muestra el secreto OAuth y el ID de cliente para autenticación API" width="746" height="368" data-path="images/docs/ff24d4d5bf9b21e0cadf67055f1e1a5a4b517b82e9c006520a02b4fd404d259e-Screenshot_2025-03-28_at_4.14.17_PM.png" />
    </Frame>
  </Step>
</Steps>

### 4. Asignar permisos

<Steps>
  <Step title="Navegar a su catálogo y abrir la pestaña Permissions" />

  <Step title="Hacer clic en Grant" />

  <Step title="Asignar los siguientes permisos al principal de servicio">
    * USE CATALOG
    * USE SCHEMA
    * SELECT
    * MODIFY
    * CREATE SCHEMA
    * CREATE TABLE

    <Frame caption="Pantalla de asignación de privilegios para un principal de Databricks con permisos de catálogo personalizados seleccionados.">
      <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="Pantalla de asignación de privilegios para un principal de Databricks con permisos de catálogo personalizados seleccionados" width="1034" height="812" data-path="images/docs/5755c8739fd66a0f35fec57b817d54d202c64ae95bf8219645ba76abdc8fbe0b-Screenshot_2025-04-01_at_9.19.14_PM.png" />
    </Frame>
  </Step>
</Steps>

### 5. Conectar OneSignal

<Steps>
  <Step title="Activar la integración">
    En OneSignal, navegue a **Data > Integrations > Databricks**.
  </Step>

  <Step title="Ingresar los detalles">
    * Server Hostname
    * Port
    * HTTP Path
    * Catalog Name
    * Schema Name
    * Credenciales del principal de servicio (ID + Secret)

    <Frame caption="Formulario de configuración de Databricks de OneSignal con campos para catálogo, nombre de host, ruta HTTP y credenciales 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="Formulario de configuración de Databricks de OneSignal con campos para catálogo, nombre de host, ruta HTTP y credenciales OAuth" width="718" height="796" data-path="images/docs/816a07ed459d3d19910630da0cb52b2075c06d6eaf85af98e969703edab88ad5-Screenshot_2025-03-28_at_4.12.07_PM.png" />
    </Frame>
  </Step>

  <Step title="Configurar la integración">
    * **Sync Frequency:** tan frecuente como cada 15 minutos
    * **Dataset/Table Names:** preconfigurado como `onesignal_events_<app-id>` y `message_events` (editable)
    * **Event Types:** elija cuáles sincronizar: seleccione todos o solo los que necesite
  </Step>

  <Step title="Seleccionar eventos">
    Seleccione los eventos que le interesa recibir en su catálogo de Databricks.

    <Frame caption="Pantalla de configuración de exportación de eventos de OneSignal que muestra el estado de sincronización, la configuración del conjunto de datos y los tipos de eventos de mensajes seleccionados.">
      <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="Pantalla de configuración de exportación de eventos de OneSignal que muestra el estado de sincronización, la configuración del conjunto de datos y los tipos de eventos de mensajes seleccionados" width="2738" height="1254" data-path="images/docs/1a5ff2af7dc8fc42a91ce70583a03b361fd8a343bc57fd3123f26a5d21dabbf8-Screenshot_2025-04-09_at_11.56.58_AM.png" />
    </Frame>
  </Step>

  <Step title="Completar la configuración">
    Haga clic en **Save** y espere la confirmación de éxito
  </Step>
</Steps>

<Note>
  La sincronización inicial de datos puede tardar de 15 a 30 minutos en aparecer en BigQuery.

  Mientras espera, envíe mensajes por push, correo electrónico, in-app o SMS para activar los eventos seleccionados.
</Note>

### 6. Ver datos en Databricks

1. Abra su **Catalog** en Databricks.

2. Una vez que se complete la sincronización, aparecerá su esquema configurado.

3. Acceda y consulte la tabla `message_events`.

   <Frame caption="Vista de catálogo de Databricks que muestra la tabla de eventos de mensajes de OneSignal bajo un esquema de producción.">
     <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="Vista de catálogo de Databricks que muestra la tabla de eventos de mensajes de OneSignal bajo un esquema de producción" width="854" height="618" data-path="images/docs/1b59f6eff2070490f194df8a7496fab6cf17f8fc9355cfb7b77c7c076799632e-Screenshot_2025-04-01_at_9.22.01_PM.png" />
   </Frame>

4. Haga clic en las tablas para obtener una vista previa de datos de muestra.

   <Frame caption="Datos de muestra de la tabla message_events_1 con campos de eventos de OneSignal sincronizados.">
     <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="Datos de muestra de la tabla message_events_1 con campos de eventos de OneSignal sincronizados" width="1196" height="374" data-path="images/docs/112f17e471b8e29173429bfbbd4b34fb68923c9f76faa55b06161114249fcaab-Screenshot_2025-04-01_at_9.22.08_PM.png" />
   </Frame>

<Info>
  Si tiene problemas como esquemas faltantes, errores de permisos o eventos con formato incorrecto, contacte a `support@onesignal.com`.
</Info>

## Eventos y propiedades de mensajes

### Tipos de eventos de mensajes

**Propiedad:** `event_kind`
**Tipo:** `String`

El tipo de mensaje y evento (por ejemplo, `message.push.received`, `message.push.sent`).

| Evento de mensaje (OneSignal) |           `event_kind`           | Descripción                                                                      |
| :---------------------------: | :------------------------------: | -------------------------------------------------------------------------------- |
|          Push enviado         |        `message.push.sent`       | Notificación push enviada exitosamente.                                          |
|         Push recibido         |      `message.push.received`     | Push entregado (ver [Entrega confirmada](/docs/es/confirmed-delivery)).          |
|           Push clic           |      `message.push.clicked`      | El usuario hizo clic en el push.                                                 |
|          Push fallido         |       `message.push.failed`      | Fallo de entrega. Ver informes de mensajes.                                      |
|       Push dado de baja       |    `message.push.unsubscribed`   | El usuario se dio de baja del push.                                              |
|        Impresión in-app       |     `message.iam.impression`     | Mensaje in-app mostrado.                                                         |
|          In-app clic          |       `message.iam.clicked`      | Mensaje in-app clicado.                                                          |
|      Página in-app vista      |   `message.iam.page_displayed`   | Página in-app mostrada.                                                          |
|         Email enviado         |       `message.email.sent`       | Email entregado.                                                                 |
|         Email recibido        |     `message.email.received`     | Email aceptado por el servidor de correo del destinatario.                       |
|         Email abierto         |      `message.email.opened`      | Email abierto. Ver [Informes de email](/docs/es/email-message-reports).          |
|    Enlace de email clicado    |      `message.email.clicked`     | Enlace en el email clicado.                                                      |
|       Email dado de baja      |   `message.email.unsubscribed`   | Destinatario dado de baja.                                                       |
|   Email reportado como spam   | `message.email.reported_as_spam` | Marcado como spam. Ver [Entregabilidad de email](/docs/es/email-deliverability). |
|         Email rebotado        |      `message.email.bounced`     | Rebote debido a fallo de entrega permanente.                                     |
|         Email fallido         |      `message.email.failed`      | Entrega fallida.                                                                 |
|        Email suprimido        |    `message.email.suppressed`    | Suprimido debido a lista de supresión.                                           |
|          SMS enviado          |        `message.sms.sent`        | SMS enviado.                                                                     |
|         SMS entregado         |      `message.sms.delivered`     | SMS entregado exitosamente.                                                      |
|          SMS fallido          |       `message.sms.failed`       | SMS falló al entregar.                                                           |
|        SMS no entregado       |     `message.sms.undelivered`    | SMS rechazado o inalcanzable.                                                    |

### Esquema de datos de eventos

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

|                Nombre de columna                |      Tipo     | Descripción                                                                  |
| :---------------------------------------------: | :-----------: | ---------------------------------------------------------------------------- |
|                    `event_id`                   |      UUID     | Identificador único del evento                                               |
|                `event_timestamp`                |   Timestamp   | Hora de ocurrencia del evento                                                |
|                   `event_kind`                  |     String    | El [Tipo de evento](#tipos-de-eventos-de-mensajes)                           |
|            `subscription_device_type`           |     String    | Tipo de dispositivo (por ejemplo, iOS, Android, Web, Email, SMS)             |
|                    `language`                   |     String    | Código de idioma de suscripción                                              |
|                    `version`                    |     String    | Versión de integración                                                       |
|                   `device_os`                   |     String    | Versión del sistema operativo del dispositivo                                |
|                  `device_type`                  |     Number    | Tipo de dispositivo numérico                                                 |
|                     `token`                     |     String    | Token push, número de teléfono o email                                       |
|                `subscription_id`                |      UUID     | ID de suscripción                                                            |
|                   `subscribed`                  |    Boolean    | Estado de suscripción                                                        |
|                  `onesignal_id`                 |      UUID     | ID de usuario de OneSignal                                                   |
|                  `last_active`                  |     String    | Marca de tiempo de última actividad                                          |
|                      `sdk`                      |     String    | Versión del SDK de OneSignal                                                 |
|                  `external_id`                  |     String    | ID de usuario externo que debe coincidir con el ID de usuario de integración |
|                     `app_id`                    |      UUID     | ID de aplicación de OneSignal                                                |
|                  `template_id`                  |      UUID     | ID de plantilla (si aplica)                                                  |
|                   `message_id`                  |      UUID     | ID de lote/solicitud de mensaje                                              |
|                  `message_name`                 |     String    | Nombre del mensaje                                                           |
|                 `message_title`                 |     String    | Título del mensaje (solo en inglés)                                          |
|                `message_contents`               |     String    | Cuerpo del mensaje truncado (solo en inglés)                                 |
|                 `failure_reason`                |     String    | Razón del fallo (para eventos de fallo de push y email)                      |
| `_created`, `_id`, `_index`, `_fivetran_synced` | *Uso interno* | Metadatos de sincronización de Fivetran                                      |

### Notas

* Las sincronizaciones después de guardar/activar pueden tardar de 15 a 30 minutos adicionales en completarse.
* Desactivar aún puede resultar en una sincronización final después de la desactivación.
* Para garantizar una sincronización de datos eficiente, nuestro sistema crea y gestiona automáticamente conjuntos de datos de preparación. Estos conjuntos de datos, nombrados con un patrón como `fivetran_{dos palabras aleatorias}_staging`, almacenan temporalmente datos durante el procesamiento antes de que se integren en su esquema principal. Estos conjuntos de datos de preparación son esenciales para mantener un flujo de trabajo optimizado y no deben eliminarse, ya que se recrearán automáticamente.

***

## Importar eventos desde Databricks

Envíe datos de eventos de comportamiento desde Databricks a OneSignal para:

* Activar Journeys basados en la actividad del usuario
* Personalizar mensajes según 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)

- **Espacio de trabajo de Databricks** con SQL Warehouse o clúster de cómputo
- **Token de acceso personal** con permisos apropiados
- **Tablas de datos de eventos** que contengan datos de comportamiento en formato Delta Lake
- **Unity Catalog** (recomendado para gobernanza de datos)

**Pasos de configuración**

<Steps>
  <Step title="Crear token de acceso personal de Databricks">
    Genere un token de acceso personal para que OneSignal acceda a su espacio de trabajo de Databricks:

    1. Navegue a **User Settings** en su espacio de trabajo de Databricks
    2. Haga clic en la pestaña **Developer** y luego en **Access tokens**
    3. Haga clic en **Generate new token**
    4. Ingrese un comentario como "OneSignal Integration" y establezca la expiración (recomendamos 90 días)
    5. Guarde el token generado (lo necesitará para OneSignal)
  </Step>

  <Step title="Configurar acceso a SQL Warehouse">
    Asegúrese de que OneSignal pueda consultar sus datos de eventos a través de SQL Warehouse:

    1. Navegue a **SQL Warehouses** en su espacio de trabajo de Databricks
    2. Seleccione o cree un SQL Warehouse para acceso de OneSignal
    3. Anote el **Server Hostname** y la **HTTP Path** de los detalles de conexión
    4. Asegúrese de que el almacén tenga acceso a sus tablas de datos de eventos
  </Step>

  <Step title="Otorgar permisos de tabla">
    Otorgue a OneSignal acceso de lectura a las tablas que contengan datos de eventos:

    ```sql theme={null}
    -- Para espacios de trabajo con Unity Catalog habilitado
    GRANT SELECT ON TABLE catalog.schema.event_table TO `onesignal@yourdomain.com`;

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

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

    Seleccione **Databricks** y proporcione:

    * **Server Hostname**: El nombre de host de su SQL Warehouse de Databricks
    * **HTTP Path**: Ruta HTTP de SQL Warehouse
    * **Personal Access Token**: Token creado en el paso 1
    * **Catalog** (opcional): Nombre del Unity Catalog si usa Unity Catalog
  </Step>

  <Step title="Configurar fuente de datos de eventos">
    Especifique la tabla de Databricks que contiene sus datos de eventos:

    * **Database/Schema**: Nombre de base de datos o esquema que contiene las tablas de eventos
    * **Table**: Nombre de tabla con registros de eventos (por ejemplo, `user_events`)
    * **Event Query**: Consulta SQL opcional para filtrar o transformar datos de eventos

    Su tabla de eventos debe contener columnas para:

    * Nombre/tipo de evento (String)
    * Identificador de usuario (String)
    * Marca de tiempo del evento (Timestamp)
    * Propiedades de eventos adicionales
  </Step>

  <Step title="Probar la conexión">
    Haga clic en **Test Connection** para verificar que OneSignal pueda acceder a su espacio de trabajo de Databricks y leer datos de eventos.
  </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        |

### Configuración avanzada

#### Integración de Unity Catalog

Aproveche Unity Catalog para acceso de datos gobernado:

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

### Optimización de Delta Lake

Optimice las tablas de eventos para un mejor rendimiento de consultas:

* **Particionamiento**: Particione por fecha (`event_date`) para consultas basadas en tiempo más rápidas
* **Z-Ordering**: Z-order por `user_id` y `event_name` para mejor filtrado
* **Funciones de Delta Lake**: Use clustering líquido para optimización automática

#### Procesamiento de eventos en streaming

Para procesamiento de eventos en tiempo real, considere:

* **Structured Streaming**: Procese eventos a medida que llegan
* **Delta Live Tables**: Construya pipelines robustos de procesamiento de eventos
* **Auto Loader**: Ingesta continua de nuevos archivos de eventos

<Warning>
  Asegúrese de que su SQL Warehouse tenga recursos de cómputo suficientes para manejar las consultas de OneSignal sin afectar otras cargas de trabajo.
</Warning>

***

## Preguntas frecuentes

### ¿Por qué veo diferentes IDs de mensaje con el mismo contenido?

Esto sucede cuando el mismo mensaje se envía más de una vez, probablemente a través de un flujo transaccional o plantilla de mensaje reutilizada en múltiples envíos.

### ¿Con qué frecuencia OneSignal sincroniza eventos desde Databricks?

OneSignal sincroniza datos de eventos según su programa configurado, con un intervalo mínimo de 15 minutos.

### ¿Puedo usar notebooks de Databricks para procesamiento de eventos?

Sí, puede usar notebooks para procesar y preparar datos de eventos, luego exponerlos a través de tablas que OneSignal pueda consultar.

### ¿Qué pasa con la optimización de costos para consultas de eventos?

Considere usar SQL Warehouses sin servidor para cómputo rentable bajo demanda que se escala automáticamente según la carga de consultas.

***
