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

# Materialize

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

export const PLATFORM_0 = "Materialize"

export const DATA_TYPE_0 = "columnas de vista o tabla"

export const COLUMN_HEADER_0 = "Columna de Materialize"

export const PROPERTIES_DESCRIPTION_0 = "Objeto JSON con metadatos de evento"

## Resumen

La integración de OneSignal + Materialize permite la sincronización automática de eventos personalizados desde tu base de datos de streaming de Materialize a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en comportamiento de usuario en tiempo real.

Materialize es una base de datos de streaming compatible con PostgreSQL que mantiene vistas actualizadas incrementalmente de tus datos, habilitando análisis en tiempo real y procesamiento de eventos.

***

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

### Materialize

* **Cuenta de Materialize** con acceso a consola
* **App Password** para autenticación de herramientas externas
* **Vistas materializadas** o tablas que contengan datos de eventos
* **Datos de eventos** accesibles en tu base de datos de Materialize

***

## Configuración

<Steps>
  <Step title="Obtener detalles de conexión de Materialize">
    Inicia sesión en la consola de Materialize y navega a la página **Connect** para encontrar tus detalles de conexión.
  </Step>

  <Step title="Crear App Password">
    En la consola de Materialize, crea una nueva **App Password** para que OneSignal la use para autenticación.
  </Step>

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

    Selecciona **Materialize** y proporciona:

    * **Host:** El nombre de host de tu Materialize (se encuentra en **External Tools** en la página Connect de la consola de Materialize)
    * **Username:** Tu dirección de email (usada para iniciar sesión en Materialize)
    * **Password:** La App Password creada en el Paso 2
    * **Database:** Nombre de base de datos (opcional, predeterminado es `materialize`)
  </Step>

  <Step title="Probar conexión">
    Haz clic en **Test** para verificar que la conexión funciona correctamente.
  </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 vista de evento en tiempo real

```sql theme={null}
-- Real-time materialized view for recent events
CREATE MATERIALIZED VIEW analytics.recent_user_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties,
    session_id,
    device_type
FROM raw_events.stream
WHERE event_timestamp >= NOW() - INTERVAL '1 day';
```

***

## Modos de procesamiento

### Vistas materializadas (Recomendado)

Aprovecha el procesamiento en tiempo real de Materialize sincronizando desde vistas materializadas que se actualizan automáticamente cuando llegan nuevos datos:

```sql theme={null}
-- High-value events materialized view
CREATE MATERIALIZED VIEW analytics.high_value_events AS
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties || jsonb_build_object(
        'source', 'materialize',
        'value_tier', 'high'
    ) as event_properties
FROM raw_events.stream
WHERE (event_properties->>'value')::numeric > 100;
```

### Modo de consulta SQL

Escribe consultas personalizadas compatibles con PostgreSQL para transformar tus datos de eventos:

```sql theme={null}
-- Real-time user activity summary
SELECT
    'activity_summary' as event_name,
    user_id,
    NOW() as event_timestamp,
    jsonb_build_object(
        'events_last_hour', COUNT(*),
        'unique_sessions', COUNT(DISTINCT session_id),
        'total_value', SUM((event_properties->>'value')::numeric),
        'last_seen', MAX(event_timestamp)
    ) as event_properties
FROM analytics.recent_user_events
WHERE event_timestamp >= NOW() - INTERVAL '1 hour'
GROUP BY user_id
HAVING COUNT(*) >= 5;
```

### Procesamiento de flujo en tiempo real

```sql theme={null}
-- Progressive profiling view
CREATE MATERIALIZED VIEW analytics.user_progression AS
SELECT
    user_id,
    COUNT(*) as total_events,
    COUNT(DISTINCT event_name) as unique_event_types,
    MAX(event_timestamp) as last_activity,
    CASE
        WHEN COUNT(*) >= 50 THEN 'power_user'
        WHEN COUNT(*) >= 20 THEN 'active_user'
        WHEN COUNT(*) >= 5 THEN 'engaged_user'
        ELSE 'new_user'
    END as user_segment
FROM raw_events.stream
GROUP BY user_id;
```

***

## Limitaciones

* Materialize solo soporta el Motor de sincronización básico
* Las consultas en tiempo real pueden consumir más recursos de cómputo
* Las uniones complejas en conjuntos de datos grandes deben optimizarse
* Las vistas materializadas requieren recursos de clúster continuos

***

## Preguntas frecuentes

### ¿Cómo optimizo el rendimiento en tiempo real en Materialize?

Usa índices en columnas consultadas frecuentemente y considera particionar conjuntos de datos de eventos grandes por rangos de tiempo para mejor rendimiento.

### ¿Puedo sincronizar desde tablas y vistas materializadas?

Sí, OneSignal puede leer tanto de tablas estáticas como de vistas materializadas en tiempo real en Materialize.

### ¿Cómo funciona la sincronización en tiempo real?

Materialize mantiene vistas actualizadas incrementalmente, por lo que OneSignal siempre leerá el estado más reciente de tus datos sin sobrecarga de procesamiento adicional.

***
