跳转到主要内容

概览

OneSignal + Greenplum 集成允许将自定义事件从您的 Greenplum 数据库同步到 OneSignal,以基于用户行为触发自动化消息推送活动和 Journeys。 Greenplum 是一个基于 PostgreSQL 构建的大規模并行处理 (MPP) 数据库,专为大規模分析工作负载而设计。

要求

  • 访问自定义事件(目前处于测试阶段)
  • 升级账户计划(免费应用不可用)。

Greenplum 要求

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

同步引擎和权限

OneSignal 从 Greenplum 中的表和视图读取数据,并同步它以触发自动化消息推送活动。为了限制对数据库的负载,OneSignal 维护状态跟踪表,使其只能同步自上次同步以来已修改的数据(增量同步)。在配置 Greenplum 连接时,您将选择一个同步引擎来决定如何处理状态跟踪。 基本同步引擎 在 OneSignal 拥有的基础设施上维护状态跟踪表,配置更简单,只需要读取访问权限。 高级同步引擎 通过在您自己的 Greenplum 实例内的专用架构中维护状态跟踪表来提供增强的性能。

设置

1

创建 Census 用户

为 OneSignal 创建一个专用的数据库用户:
-- Create CENSUS user and set password
CREATE USER CENSUS WITH PASSWORD '<strong unique password>';
2

选择同步引擎并配置权限

对于基本同步引擎(只读访问):向您的事件数据模式授予读取访问权限。将 <your schema> 替换为您的模式名称:
-- 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;
对于高级同步引擎(增强性能):首先完成上面的基本同步引擎步骤,然后添加:
-- 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;
3

连接到 OneSignal

在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成选择 Greenplum 并提供:
  • 主机: 您的 Greenplum 主主机
  • 端口: 5432(或自定义端口)
  • 数据库: 您的数据库名称
  • 用户名: CENSUS
  • 密码: 步骤 1 中的密码
  • 同步引擎: 根据步骤 2 选择基本或高级

事件数据映射

将您的 映射到 OneSignal 的自定义事件格式:
OneSignal 字段描述必需
nameevent_name事件标识符
external_iduser_id用户标识符
timestampevent_timestamp事件发生时间
propertiesevent_data

示例事件表模式

-- 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 兼容查询来转换您的事件数据:
-- 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 等格式数据的外部表中读取。
I