跳转到主要内容

概览

OneSignal + Materialize 集成可以自动将您的 Materialize 流式数据库中的自定义事件同步到 OneSignal,以基于实时用户行为触发自动化消息活动和 Journey。 Materialize 是一个与 PostgreSQL 兼容的流式数据库,维护您数据的增量更新视图,实现实时分析和事件处理。

要求

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

Materialize 要求

  • 具有控制台访问权限的 Materialize 账户
  • 用于外部工具身份验证的 应用程序密码
  • 包含事件数据的 物化视图 或表
  • 您的 Materialize 数据库中可访问的 事件数据

设置

1

获取 Materialize 连接详细信息

登录 Materialize 控制台并导航到连接页面查找您的连接详情。
2

创建应用密码

在 Materialize 控制台中,为 OneSignal 创建一个新的应用密码用于身份验证。
3

连接到 OneSignal

在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成选择 Materialize 并提供:
  • 主机: 您的 Materialize 主机名(在 Materialize 控制台连接页面的外部工具下找到)
  • 用户名: 您的电子邮件地址(用于登录 Materialize)
  • 密码: 在步骤 2 中创建的应用密码
  • 数据库: 数据库名称(可选,默认为 materialize
4

测试连接

点击测试验证连接是否正常工作。

事件数据映射

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

实时事件视图示例

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

处理模式

物化视图(推荐)

通过从随着新数据到达而自动更新的物化视图同步,利用 Materialize 的实时处理功能:
-- 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;

SQL 查询模式

编写自定义的 PostgreSQL 兼容查询来转换您的事件数据:
-- 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;

实时流处理

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

限制

  • Materialize 仅支持基本同步引擎
  • 实时查询可能消耗更多计算资源
  • 大型数据集的复杂连接应该被优化
  • 物化视图需要持续的集群资源

常见问题

如何优化 Materialize 中的实时性能?

在经常查询的列上使用索引,并考虑按时间范围对大型事件数据集进行分区以获得更好的性能。

我可以同时从表和物化视图同步数据吗?

是的,OneSignal 可以从 Materialize 中的静态表和实时物化视图中读取数据。

实时同步是如何工作的?

Materialize 维护增量更新的视图,因此 OneSignal 将始终读取您数据的最新状态,而无需额外的处理开销。
I