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

> Sincronize eventos personalizados do Amazon Redshift para o OneSignal para acionar Jornadas automatizadas e campanhas de mensagens personalizadas com base no comportamento do usuário.

export const DATA_TYPE_0 = "colunas"

export const PLATFORM_0 = "Amazon Redshift"

export const COLUMN_HEADER_0 = "Coluna Redshift"

export const PROPERTIES_DESCRIPTION_0 = "Objeto JSON com detalhes do evento"

## Visão geral

A integração OneSignal + Amazon Redshift permite a sincronização de eventos personalizados do seu data warehouse Redshift para o OneSignal para acionar campanhas de mensagens automatizadas e Jornadas com base no comportamento do usuário.

O Amazon Redshift é um serviço de data warehouse totalmente gerenciado em escala de petabytes que torna econômico analisar grandes volumes de dados usando suas ferramentas de business intelligence existentes.

***

## Requisitos

* Acesso a [Event Streams](/docs/pt-BR/event-streams) para eventos de mensagem de saída (Limitações de plano e excedentes se aplicam)
* Acesso a [Custom Events](/docs/pt-BR/custom-events) para sincronização de eventos de entrada (Limitações de plano e excedentes se aplicam)
* [Plano de Conta Atualizado](https://onesignal.com/pricing) (não disponível em apps gratuitos)

### Amazon Redshift

* **Cluster Redshift** com acesso à rede
* **Usuário de banco de dados** com permissões apropriadas
* **Tabelas de eventos** contendo dados comportamentais estruturados
* **Conectividade de rede** do OneSignal ao seu cluster Redshift

***

## Configuração

<Steps>
  <Step title="Criar usuário dedicado para OneSignal">
    Crie uma conta de usuário dedicada com permissões apropriadas:

    ```sql theme={null}
    -- Criar usuário OneSignal com senha forte
    CREATE USER CENSUS WITH PASSWORD '<senha-forte-única>';

    -- Criar schema privado de controle para estado de sincronização (pular se modo somente leitura)
    CREATE SCHEMA CENSUS;

    -- Conceder acesso total ao schema de controle (pular se modo somente leitura)
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Garantir acesso aos objetos existentes no schema de controle (pular se modo somente leitura)
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
    ```
  </Step>

  <Step title="Conceder permissões aos dados de eventos">
    Forneça acesso de leitura aos schemas contendo seus dados de eventos:

    ```sql theme={null}
    -- Conceder acesso ao schema (repetir para cada schema com dados de eventos)
    GRANT USAGE ON SCHEMA "<seu_schema>" TO CENSUS;

    -- Conceder acesso de leitura às tabelas existentes
    GRANT SELECT ON ALL TABLES IN SCHEMA "<seu_schema>" TO CENSUS;

    -- Conceder acesso de leitura às tabelas futuras
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Conceder permissões de execução em funções
    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 acesso à rede">
    Adicione os endereços IP do OneSignal aos seus grupos de segurança do Redshift. O Redshift impede acesso externo por padrão.

    Você pode encontrar os endereços IP do OneSignal para sua região nas configurações de integração. Para mais informações, visite o Centro de Ajuda do AWS Redshift.
  </Step>

  <Step title="Conectar ao OneSignal">
    No OneSignal, vá para **Data > Integrations** e clique em **Add Integration**.

    1. Selecione **Amazon Redshift** da lista
    2. Insira seus detalhes de conexão:
       * **Host:** O endpoint do seu cluster Redshift
       * **Porta:** Geralmente 5439
       * **Banco de Dados:** Nome do seu banco de dados
       * **Nome de Usuário:** `CENSUS`
       * **Senha:** A senha que você criou
    3. Teste a conexão
    4. Configure quais tabelas contêm seus dados de eventos
  </Step>
</Steps>

***

### Mapeamento de dados de evento

Mapeie seu {DATA_TYPE_0} {PLATFORM_0} para o formato de eventos personalizados do OneSignal:

| Campo OneSignal | {COLUMN_HEADER_0} | Descrição                  | Obrigatório |
| --------------- | ----------------- | -------------------------- | ----------- |
| `name`          | `event_name`      | Identificador de evento    | Sim         |
| `external_id`   | `user_id`         | Identificador de usuário   | Sim         |
| `timestamp`     | `event_timestamp` | Quando o evento ocorreu    | Não         |
| `properties`    | `event_data`      | {PROPERTIES_DESCRIPTION_0} | Não         |

### Exemplo de Schema de Tabela de Eventos

```sql theme={null}
-- Exemplo de tabela de eventos Redshift
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

Escreva consultas SQL personalizadas para transformar seus dados de eventos:

```sql theme={null}
-- Exemplo: Eventos recentes 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;
```

***

## Integração dbt

Se você está usando dbt com Redshift, garanta que o OneSignal mantenha acesso após cada execução do dbt:

### Opção 1: Permissões Granulares

Adicione post-hooks em seu projeto dbt para conceder acesso após a construção de cada modelo:

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

### Opção 2: Privilégios Padrão (Recomendado)

Conceda permissões padrão para seu usuário de produção dbt:

```sql theme={null}
-- Deve ser executado por superusuário Redshift
ALTER DEFAULT PRIVILEGES FOR USER "<seu_usuario_dbt>"
IN SCHEMA "<seu_schema_destino_dbt>"
GRANT SELECT ON TABLES TO CENSUS;
```

***

## Configuração Avançada de Rede

### Configuração de Túnel SSH

Para clusters Redshift em redes privadas:

1. **Criar usuário SSH**: Configure um usuário dedicado em seu host SSH
2. **Configurar túnel**: Habilite "Usar Túnel SSH" nas configurações de integração do OneSignal
3. **Instalar par de chaves**: Adicione a chave pública do OneSignal em `~/.ssh/authorized_keys`
4. **Testar conexão**: Verifique a conectividade do túnel

### Implantação VPC

Para Redshift dentro da AWS VPC:

O OneSignal usa o comando `UNLOAD` para extração eficiente de dados em massa. Implantações VPC requerem um **Endpoint VPC S3** para permitir que o Redshift se comunique com o S3.

**Configurar Endpoint VPC S3:**

1. Navegue até o serviço VPC no Console AWS
2. Crie Endpoint VPC para o serviço S3
3. Associe com sua sub-rede Redshift
4. Configure tabelas de roteamento

***

## Otimização de Desempenho

### Chaves de Distribuição e Ordenação

Otimize suas tabelas de eventos para cargas de trabalho analíticas:

```sql theme={null}
-- Distribuir por user_id para consultas centradas no usuário
CREATE TABLE analytics.user_events (
    -- columns
)
DISTKEY(user_id)
SORTKEY(event_timestamp, event_name);
```

### Armazenamento Colunar

Aproveite o armazenamento colunar do Redshift para análises:

* **Compressão**: Redshift comprime colunas automaticamente
* **Mapas de Zona**: Melhore o desempenho de consultas com dados ordenados
* **Orientado a colunas**: Eficiente para consultas analíticas em dados de eventos

***

## Limitações

* Múltiplos schemas requerem concessões de permissão separadas
* Views referenciando tabelas cross-schema precisam de permissões adicionais
* Acesso a procedimentos armazenados complexos pode requerer configuração adicional
* Implantações VPC requerem configuração de Endpoint VPC S3

***

## FAQ

### Como o OneSignal lida com grandes conjuntos de dados de eventos?

O OneSignal usa o comando `UNLOAD` do Redshift para extração eficiente de dados em massa, otimizado para cargas de trabalho analíticas de grande escala.

### Posso usar modo somente leitura?

Sim, você pode pular a criação do schema de controle e usar modo somente leitura se preferir uma configuração mais simples e não puder permitir que o OneSignal crie tabelas.

### E quanto à compatibilidade com dbt?

O OneSignal fornece padrões de integração dbt específicos para garantir que as permissões sejam mantidas após execuções do dbt. Use post-hooks ou privilégios padrão dependendo da sua configuração.
