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

# Amazon Redshift

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

export const PLATFORM_0 = "Amazon Redshift"

export const DATA_TYPE_0 = "columns"

export const COLUMN_HEADER_0 = "Redshift Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event details"

## Descripción general

La integración de OneSignal + Amazon Redshift habilita la sincronización de eventos personalizados desde su almacén de datos Redshift a OneSignal para activar campañas de mensajería automatizadas y Journeys basados en el comportamiento del usuario.

Amazon Redshift es un servicio de almacén de datos completamente administrado y a escala de petabytes que hace que sea rentable analizar grandes volúmenes de datos usando sus herramientas de inteligencia empresarial existentes.

***

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

### Amazon Redshift

* **Clúster de Redshift** con acceso de red
* **Usuario de base de datos** con permisos apropiados
* **Tablas de eventos** que contengan datos de comportamiento estructurados
* **Conectividad de red** desde OneSignal a su clúster de Redshift

***

## Configuración

<Steps>
  <Step title="Crear usuario dedicado para OneSignal">
    Cree una cuenta de usuario dedicada con permisos apropiados:

    ```sql theme={null}
    -- Crear usuario de OneSignal con contraseña fuerte
    CREATE USER CENSUS WITH PASSWORD '<contraseña-fuerte-única>';

    -- Crear esquema privado de contabilidad para el estado de sincronización (omitir si modo de solo lectura)
    CREATE SCHEMA CENSUS;

    -- Otorgar acceso completo al esquema de contabilidad (omitir si modo de solo lectura)
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Asegurar acceso a objetos existentes en el esquema de contabilidad (omitir si modo de solo lectura)
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="Otorgar permisos a datos de eventos">
    Proporcione acceso de lectura a esquemas que contengan sus datos de eventos:

    ```sql theme={null}
    -- Otorgar acceso al esquema (repetir para cada esquema con datos de eventos)
    GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

    -- Otorgar acceso de lectura a tablas existentes
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

    -- Otorgar acceso de lectura a tablas futuras
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Otorgar permisos de ejecución en funciones
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```
  </Step>

  <Step title="Configurar acceso de red">
    Agregue las direcciones IP de OneSignal a sus grupos de seguridad de Redshift. Redshift previene el acceso externo por defecto.

    Puede encontrar las direcciones IP de OneSignal para su región en la configuración de integración. Para obtener más información, visite el Centro de ayuda de AWS Redshift.
  </Step>

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

    1. Seleccione **Amazon Redshift** de la lista
    2. Ingrese sus detalles de conexión:
       * **Host:** Su endpoint de clúster Redshift
       * **Port:** Usualmente 5439
       * **Database:** Nombre de su base de datos
       * **Username:** `CENSUS`
       * **Password:** La contraseña que creó
    3. Pruebe la conexión
    4. Configure qué tablas contienen sus datos de eventos
  </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       |

### Esquema de tabla de eventos de ejemplo

```sql theme={null}
-- Tabla de eventos de Redshift de ejemplo
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1),
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP DEFAULT GETDATE(),
    event_data SUPER,
    session_id VARCHAR(255),
    created_at TIMESTAMP DEFAULT GETDATE()
)
DISTKEY(user_id)
SORTKEY(event_timestamp);
```

### Modo de consulta SQL

Escriba consultas SQL personalizadas para transformar sus datos de eventos:

```sql theme={null}
-- Ejemplo: Eventos recientes de alto valor
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_data
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, GETDATE())
    AND JSON_EXTRACT_PATH_TEXT(event_data, 'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;
```

***

## Integración con dbt

Si está usando dbt con Redshift, asegúrese de que OneSignal retenga el acceso después de cada ejecución de dbt:

### Opción 1: Permisos detallados

Agregue post-hooks en su proyecto dbt para otorgar acceso después de que cada modelo se construya:

```sql theme={null}
-- En su modelo dbt
{{ config(
    post_hook="GRANT SELECT ON {{ this }} TO CENSUS"
) }}
```

### Opción 2: Privilegios predeterminados (Recomendado)

Otorgue permisos predeterminados para su usuario de producción de dbt:

```sql theme={null}
-- Debe ser ejecutado por el superusuario de Redshift
ALTER DEFAULT PRIVILEGES FOR USER "<your_dbt_run_user>"
IN SCHEMA "<your_dbt_target_schema>"
GRANT SELECT ON TABLES TO CENSUS;
```

***

## Configuración de red avanzada

### Configuración de túnel SSH

Para clústeres de Redshift en redes privadas:

1. **Crear usuario SSH**: Configure un usuario dedicado en su host SSH
2. **Configurar túnel**: Habilite "Use SSH Tunnel" en la configuración de integración de OneSignal
3. **Instalar par de claves**: Agregue la clave pública de OneSignal a `~/.ssh/authorized_keys`
4. **Probar conexión**: Verifique la conectividad del túnel

### Implementación de VPC

Para Redshift dentro de AWS VPC:

OneSignal usa el comando `UNLOAD` para la extracción eficiente de datos masivos. Las implementaciones de VPC requieren un **S3 VPC Endpoint** para permitir que Redshift se comunique con S3.

**Configurar S3 VPC Endpoint:**

1. Navegue al servicio VPC en la consola de AWS
2. Cree un VPC Endpoint para el servicio S3
3. Asocie con su subred de Redshift
4. Configure las tablas de enrutamiento

***

## Optimización de rendimiento

### Claves de distribución y ordenamiento

Optimice sus tablas de eventos para cargas de trabajo analíticas:

```sql theme={null}
-- Distribuir por user_id para consultas centradas en el usuario
CREATE TABLE analytics.user_events (
    -- columnas
)
DISTKEY(user_id)
SORTKEY(event_timestamp, event_name);
```

### Almacenamiento columnar

Aproveche el almacenamiento columnar de Redshift para análisis:

* **Compresión**: Redshift comprime automáticamente las columnas
* **Mapas de zona**: Mejore el rendimiento de consultas con datos ordenados
* **Orientado a columnas**: Eficiente para consultas analíticas en datos de eventos

***

## Limitaciones

* Múltiples esquemas requieren otorgamientos de permisos separados
* Las vistas que hacen referencia a tablas de esquema cruzado necesitan permisos adicionales
* El acceso a procedimientos almacenados complejos puede requerir configuración adicional
* Las implementaciones de VPC requieren configuración de S3 VPC Endpoint

***

## Preguntas frecuentes

### ¿Cómo maneja OneSignal grandes conjuntos de datos de eventos?

OneSignal usa el comando `UNLOAD` de Redshift para la extracción eficiente de datos masivos, que está optimizado para cargas de trabajo analíticas a gran escala.

### ¿Puedo usar el modo de solo lectura?

Sí, puede omitir la creación del esquema de contabilidad y usar el modo de solo lectura si prefiere una configuración más simple y no puede permitir que OneSignal cree tablas.

### ¿Qué hay de la compatibilidad con dbt?

OneSignal proporciona patrones de integración de dbt específicos para garantizar que los permisos se mantengan después de las ejecuciones de dbt. Use post-hooks o privilegios predeterminados según su configuración.
