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

# Greenplum

> 将自定义事件从 Greenplum 同步到 OneSignal，以基于用户行为触发自动化 Journeys 和个性化消息推送活动。

export const PLATFORM_0 = "Greenplum"

export const DATA_TYPE_0 = "table columns"

export const COLUMN_HEADER_0 = "Greenplum Column"

export const PROPERTIES_DESCRIPTION_0 = "JSON/JSONB object with event metadata"

## 概览

OneSignal + Greenplum 集成允许将自定义事件从您的 Greenplum 数据库同步到 OneSignal，以基于用户行为触发自动化消息推送活动和 Journeys。

Greenplum 是一个基于 PostgreSQL 构建的大規模并行处理 (MPP) 数据库，专为大規模分析工作负载而设计。

***

## 要求

* 访问自定义事件（目前处于测试阶段）
* [升级账户计划](https://onesignal.com/pricing)（免费应用不可用）。

### Greenplum 要求

* 具有网络访问权限的 **Greenplum 实例**
* 具有适当权限的 **数据库用户**
* 包含结构化行为数据的 **事件表**

***

## 同步引擎和权限

OneSignal 从 Greenplum 中的表和视图读取数据，并同步它以触发自动化消息推送活动。为了限制对数据库的负载，OneSignal 维护状态跟踪表，使其只能同步自上次同步以来已修改的数据（增量同步）。在配置 Greenplum 连接时，您将选择一个同步引擎来决定如何处理状态跟踪。

**基本同步引擎** 在 OneSignal 拥有的基础设施上维护状态跟踪表，配置更简单，只需要读取访问权限。

**高级同步引擎** 通过在您自己的 Greenplum 实例内的专用架构中维护状态跟踪表来提供增强的性能。

## 设置

<Steps>
  <Step title="创建 Census 用户">
    为 OneSignal 创建一个专用的数据库用户：

    ```sql theme={null}
    -- Create CENSUS user and set password
    CREATE USER CENSUS WITH PASSWORD '<strong unique password>';
    ```
  </Step>

  <Step title="选择同步引擎并配置权限">
    **对于基本同步引擎（只读访问）：**

    向您的事件数据模式授予读取访问权限。将 `<your schema>` 替换为您的模式名称：

    ```sql theme={null}
    -- Let the census user read all existing tables in this schema
    GRANT SELECT ON ALL TABLES IN SCHEMA "<your schema>" TO CENSUS;

    -- Let the census user read any new tables added to this schema
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your schema>" GRANT SELECT ON TABLES TO CENSUS;

    -- Let the census user execute any existing functions in this schema
    GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your schema>" TO CENSUS;

    -- Let the census user execute any new functions added to this schema
    ALTER DEFAULT PRIVILEGES IN SCHEMA "<your schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
    ```

    **对于高级同步引擎（增强性能）：**

    首先完成上面的基本同步引擎步骤，然后添加：

    ```sql theme={null}
    -- Create a private bookkeeping schema where Census can store sync state
    CREATE SCHEMA CENSUS;

    -- Give the census user full access to the bookkeeping schema
    GRANT ALL ON SCHEMA CENSUS TO CENSUS;

    -- Ensure the census user has access to any existing objects in the bookkeeping schema
    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;

    -- Let the census user see your data schema
    GRANT USAGE ON SCHEMA "<your schema>" TO CENSUS;
    ```
  </Step>

  <Step title="连接到 OneSignal">
    在 OneSignal 中，前往 **数据 > 集成**，然后点击 **添加集成**。

    选择 **Greenplum** 并提供：

    * **主机：** 您的 Greenplum 主主机
    * **端口：** 5432（或自定义端口）
    * **数据库：** 您的数据库名称
    * **用户名：** `CENSUS`
    * **密码：** 步骤 1 中的密码
    * **同步引擎：** 根据步骤 2 选择基本或高级
  </Step>
</Steps>

***

### 事件数据映射

将您的 {PLATFORM_0} {DATA_TYPE_0} 映射到 OneSignal 的自定义事件格式：

| OneSignal 字段  | {COLUMN_HEADER_0} | 描述                         | 必需 |
| ------------- | ----------------- | -------------------------- | -- |
| `name`        | `event_name`      | 事件标识符                      | 是  |
| `external_id` | `user_id`         | 用户标识符                      | 是  |
| `timestamp`   | `event_timestamp` | 事件发生时间                     | 否  |
| `properties`  | `event_data`      | {PROPERTIES_DESCRIPTION_0} | 否  |

### 示例事件表模式

```sql theme={null}
-- Example Greenplum event table
CREATE TABLE analytics.user_events (
    event_id BIGSERIAL,
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    event_properties JSONB,
    session_id VARCHAR(255),
    device_type VARCHAR(50)
);
```

***

## 处理模式

### 表模式

直接从您的 Greenplum 数据库同步整个表或视图。OneSignal 将自动将列映射到事件字段。

### SQL 查询模式

编写自定义的 PostgreSQL 兼容查询来转换您的事件数据：

```sql theme={null}
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_properties
FROM analytics.user_events
WHERE event_timestamp >= NOW() - INTERVAL '7 days'
    AND (event_properties->>'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;
```

### MPP 查询优化

通过确保您的事件查询针对分布式执行进行了优化，来利用 Greenplum 的并行处理能力。使用适当的分布键并避免跨段数据移动以获得更好的性能。

***

## 高级网络配置

OneSignal 可以成功连接到使用高级网络控制的 Greenplum 实例，包括区域约束、IP 地址允许列表或 SSH 隧道。

我们建议配置您的 Greenplum 实例使用 TLS v1.2 或更高版本进行所有连接。

## 限制

* 大型分析查询可能影响集群性能
* JSON/JSONB 操作应该针对分布进行优化
* 为了获得性能，应尽量减少跨段连接

***

## 常见问题

### 我应该选择哪个同步引擎？

如果您喜欢更简单的设置和只读访问，请使用**基本同步引擎**。如果您需要增强的性能并允许 OneSignal 在您的 Greenplum 实例中创建表，请选择**高级同步引擎**。

### 如何为 Greenplum 的 MPP 架构优化查询？

确保查询有效利用分布键，避免段之间不必要的数据移动，并利用 Greenplum 的列式存储进行分析。

### 我可以使用 Greenplum 的外部表来存储事件数据吗？

是的，OneSignal 可以从引用存储在外部系统中的 Parquet 或 CSV 等格式数据的外部表中读取。

***
