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

# MotherDuck

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

export const PLATFORM_0 = "MotherDuck"

export const DATA_TYPE_0 = "table columns"

export const COLUMN_HEADER_0 = "MotherDuck Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event metadata"

## Resumen

La integración de OneSignal + MotherDuck permite la sincronización automática de eventos personalizados desde tus bases de datos de MotherDuck a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en comportamiento de usuario.

MotherDuck es un servicio DuckDB-en-la-nube que proporciona capacidades OLAP (Procesamiento Analítico en Línea) rápidas con la simplicidad de SQL.

***

## Requisitos

* Access to [Event Streams](/docs/en/event-streams) for outbound message events (Plan limitations and overages apply)
* Access to [Custom Events](/docs/en/custom-events) for inbound event syncing (Plan limitations and overages apply)
* [Updated Account Plan](https://onesignal.com/pricing) (not available on free apps)

### MotherDuck

* **Cuenta de MotherDuck** con acceso a base de datos
* **Token de servicio** para autenticación
* **Base de datos** que contenga datos de eventos
* **Tablas o vistas** con información de eventos estructurada

***

## Configuración

<Steps>
  <Step title="Crear token de servicio de MotherDuck">
    Genera un token de acceso para que OneSignal se conecte a MotherDuck:

    1. Inicia sesión en la interfaz web de MotherDuck en `app.motherduck.com`
    2. Haz clic en tu perfil en la esquina superior izquierda
    3. Navega a **Settings** > **General** > **Access Tokens**
    4. Haz clic en **Create Token**
    5. Establece la fecha de vencimiento (o déjala ilimitada)
    6. Copia el token de servicio generado
  </Step>

  <Step title="Preparar tus datos de eventos">
    Asegúrate de que tu base de datos de MotherDuck contenga tablas de eventos estructuradas correctamente:

    ```sql theme={null}
    -- Example event table structure
    CREATE TABLE user_events (
        event_name VARCHAR,
        user_id VARCHAR,
        event_timestamp TIMESTAMP,
        event_properties JSON,
        session_id VARCHAR
    );
    ```
  </Step>

  <Step title="Conectar a OneSignal">
    In OneSignal, go to **Data > Integrations** and click **Add Integration**.

    Selecciona **MotherDuck** y proporciona:

    * **Service Token:** Token del Paso 1
    * **Database Name:** El nombre de tu base de datos de MotherDuck
    * **Connection String:** `md:nombre_de_tu_base_de_datos`
  </Step>

  <Step title="Configurar sincronización de datos">
    Selecciona las tablas o escribe consultas SQL personalizadas para definir qué datos de eventos sincronizar:

    ```sql theme={null}
    SELECT
        event_name,
        user_id,
        event_timestamp,
        event_properties
    FROM user_events
    WHERE event_timestamp >= CURRENT_DATE - INTERVAL 7 DAYS
    ```
  </Step>
</Steps>

***

### Event data mapping

Map your {PLATFORM_0} {DATA_TYPE_0} to OneSignal's custom events format:

| OneSignal Field | {COLUMN_HEADER_0} | Description                | Required |
| --------------- | ----------------- | -------------------------- | -------- |
| `name`          | `event_name`      | Event identifier           | Yes      |
| `external_id`   | `user_id`         | User identifier            | Yes      |
| `timestamp`     | `event_timestamp` | When event occurred        | No       |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0} | No       |

### Ejemplo de consulta de eventos

```sql theme={null}
-- Optimized event query for OneSignal sync
SELECT
    event_name,
    user_id,
    event_timestamp,
    {
        'source': 'motherduck',
        'session_id': session_id,
        'device_type': device_type,
        'value': event_value
    }::JSON as event_properties
FROM analytics.user_events
WHERE event_timestamp >= CURRENT_TIMESTAMP - INTERVAL 1 DAY
ORDER BY event_timestamp DESC
```

***

## Modos de procesamiento

### Modo de tabla

Sincroniza tablas completas directamente desde tu base de datos de MotherDuck. OneSignal mapeará automáticamente las columnas a campos de eventos.

### Modo de consulta SQL

Escribe consultas SQL personalizadas de DuckDB para transformar y filtrar tus datos de eventos:

```sql theme={null}
-- Advanced event aggregation
SELECT
    'daily_summary' as event_name,
    user_id,
    DATE_TRUNC('day', event_timestamp) as event_timestamp,
    {
        'total_events': COUNT(*),
        'unique_sessions': COUNT(DISTINCT session_id),
        'last_activity': MAX(event_timestamp)
    }::JSON as event_properties
FROM user_events
WHERE event_timestamp >= CURRENT_DATE - INTERVAL 7 DAYS
GROUP BY user_id, DATE_TRUNC('day', event_timestamp)
```

***

## Limitaciones

* La complejidad de consultas afecta el rendimiento de sincronización
* Conjuntos de resultados grandes pueden impactar la velocidad de sincronización
* El análisis de JSON requiere tipado de columnas apropiado

***

## Preguntas frecuentes

### ¿Cómo optimizo el rendimiento de consultas en MotherDuck?

Aprovecha las ventajas del almacenamiento columnar de DuckDB seleccionando solo las columnas necesarias y aplicando filtros temprano en tus consultas.

### ¿Puedo sincronizar desde múltiples bases de datos de MotherDuck?

Sí, puedes crear integraciones separadas para cada base de datos de MotherDuck en tu cuenta.

***
