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.
OneSignal + Materialize 集成可以自动将您的 Materialize 流式数据库中的自定义事件同步到 OneSignal,以基于实时用户行为触发自动化消息活动和 Journey。
Materialize 是一个与 PostgreSQL 兼容的流式数据库,维护您数据的增量更新视图,实现实时分析和事件处理。
- 访问自定义事件(目前处于测试阶段)
- 升级账户计划(免费应用不可用)。
Materialize 要求
- 具有控制台访问权限的 Materialize 账户
- 用于外部工具身份验证的 应用程序密码
- 包含事件数据的 物化视图 或表
- 您的 Materialize 数据库中可访问的 事件数据
获取 Materialize 连接详细信息
登录 Materialize 控制台并导航到连接页面查找您的连接详情。
创建应用密码
在 Materialize 控制台中,为 OneSignal 创建一个新的应用密码用于身份验证。
连接到 OneSignal
在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成。选择 Materialize 并提供:
- 主机: 您的 Materialize 主机名(在 Materialize 控制台连接页面的外部工具下找到)
- 用户名: 您的电子邮件地址(用于登录 Materialize)
- 密码: 在步骤 2 中创建的应用密码
- 数据库: 数据库名称(可选,默认为
materialize)
事件数据映射
将您的 映射到 OneSignal 的自定义事件格式:
| OneSignal 字段 | 描述 | 必需 | |
|---|
name | event_name | 事件标识符 | 是 |
external_id | user_id | 用户标识符 | 是 |
timestamp | event_timestamp | 事件发生时间 | 否 |
properties | event_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 将始终读取您数据的最新状态,而无需额外的处理开销。