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

> Sincronize eventos personalizados do Materialize para OneSignal para acionar Journeys automatizadas e campanhas de mensagens personalizadas com base no comportamento do usuário em tempo real.

export const DATA_TYPE_0 = "view or table columns"

export const PLATFORM_0 = "Materialize"

export const COLUMN_HEADER_0 = "Materialize Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON object with event metadata"

## Visão geral

A integração OneSignal + Materialize permite sincronização automática de eventos personalizados do seu banco de dados de streaming Materialize para o OneSignal para acionar campanhas de mensagens automatizadas e Journeys com base no comportamento do usuário em tempo real.

Materialize é um banco de dados de streaming compatível com PostgreSQL que mantém visualizações incrementalmente atualizadas de seus dados, permitindo análises em tempo real e processamento de eventos.

***

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

### Materialize

* **Conta Materialize** com acesso ao console
* **App Password** para autenticação de ferramenta externa
* **Materialized views** ou tabelas contendo dados de eventos
* **Dados de eventos** acessíveis no seu banco de dados Materialize

***

## Configuração

<Steps>
  <Step title="Obter detalhes de conexão do Materialize">
    Faça login no console do Materialize e navegue até a página **Connect** para encontrar seus detalhes de conexão.
  </Step>

  <Step title="Criar App Password">
    No console do Materialize, crie uma nova **App Password** para o OneSignal usar para autenticação.
  </Step>

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

    Selecione **Materialize** e forneça:

    * **Host:** Seu nome de host Materialize (encontrado em **External Tools** na página Connect do console Materialize)
    * **Username:** Seu endereço de email (usado para fazer login no Materialize)
    * **Password:** A App Password criada no Passo 2
    * **Database:** Nome do banco de dados (opcional, padrão é `materialize`)
  </Step>

  <Step title="Testar conexão">
    Clique em **Test** para verificar se a conexão está funcionando corretamente.
  </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 Visualização de Evento em Tempo 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 Processamento

### Materialized Views (Recomendado)

Aproveite o processamento em tempo real do Materialize sincronizando a partir de materialized views que atualizam automaticamente conforme novos dados chegam:

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

Escreva consultas personalizadas compatíveis com PostgreSQL para transformar seus dados de evento:

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

### Processamento de Stream em Tempo 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;
```

***

## Limitações

* Materialize suporta apenas o Basic Sync Engine
* Consultas em tempo real podem consumir mais recursos de computação
* Joins complexos em grandes conjuntos de dados devem ser otimizados
* Materialized views requerem recursos de cluster contínuos

***

## FAQ

### Como otimizo o desempenho em tempo real no Materialize?

Use índices em colunas consultadas com frequência e considere particionar grandes conjuntos de dados de eventos por intervalos de tempo para melhor desempenho.

### Posso sincronizar de tabelas e materialized views?

Sim, o OneSignal pode ler de tabelas estáticas e materialized views em tempo real no Materialize.

### Como funciona a sincronização em tempo real?

O Materialize mantém visualizações atualizadas incrementalmente, então o OneSignal sempre lerá o estado mais recente dos seus dados sem sobrecarga de processamento adicional.

***
