跳转到主要内容

概述

OneSignal + Amazon Redshift 集成可以将您的 Redshift 数据仓库中的自定义事件同步到 OneSignal,以基于用户行为触发自动化消息活动和旅程。 Amazon Redshift 是一个完全托管的、PB 级的数据仓库服务,使您能够使用现有的商业智能工具经济高效地分析大量数据。

要求

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

Amazon Redshift 要求

  • 具有网络访问权限的 Redshift 集群
  • 具有适当权限的数据库用户
  • 包含结构化行为数据的事件表
  • 从 OneSignal 到您的 Redshift 集群的网络连接

设置

1

为 OneSignal 创建专用用户

创建一个具有适当权限的专用用户账户:
-- Create OneSignal user with strong password
CREATE USER CENSUS WITH PASSWORD '<strong-unique-password>';

-- Create private bookkeeping schema for sync state (skip if read-only mode)
CREATE SCHEMA CENSUS;

-- Grant full access to bookkeeping schema (skip if read-only mode)
GRANT ALL ON SCHEMA CENSUS TO CENSUS;

-- Ensure access to existing objects in bookkeeping schema (skip if read-only mode)
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA CENSUS TO CENSUS;
2

授予事件数据权限

为包含事件数据的模式提供读取访问权限:
-- Grant schema access (repeat for each schema with event data)
GRANT USAGE ON SCHEMA "<your_schema>" TO CENSUS;

-- Grant read access to existing tables
GRANT SELECT ON ALL TABLES IN SCHEMA "<your_schema>" TO CENSUS;

-- Grant read access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT SELECT ON TABLES TO CENSUS;

-- Grant execute permissions on functions
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA "<your_schema>" TO CENSUS;
ALTER DEFAULT PRIVILEGES IN SCHEMA "<your_schema>" GRANT EXECUTE ON FUNCTIONS TO CENSUS;
3

配置网络访问

将 OneSignal 的 IP 地址添加到您的 Redshift 安全组中。Redshift 默认阻止外部访问。您可以在集成设置中找到您所在区域的 OneSignal IP 地址。有关更多信息,请访问 AWS Redshift 帮助中心。
4

连接到 OneSignal

在 OneSignal 中,前往 数据 > 集成,然后点击 添加集成
  1. 从列表中选择 Amazon Redshift
  2. 输入您的连接详细信息:
    • **主机:**您的 Redshift 集群端点
    • **端口:**通常为 5439
    • **数据库:**您的数据库名称
    • 用户名:CENSUS
    • **密码:**您创建的密码
  3. 测试连接
  4. 配置包含事件数据的表

事件数据映射

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

示例事件表模式

-- Example Redshift event table
CREATE TABLE analytics.user_events (
    event_id BIGINT IDENTITY(1,1),
    event_name VARCHAR(100) NOT NULL,
    user_id VARCHAR(255) NOT NULL,
    event_timestamp TIMESTAMP DEFAULT GETDATE(),
    event_data SUPER,
    session_id VARCHAR(255),
    created_at TIMESTAMP DEFAULT GETDATE()
)
DISTKEY(user_id)
SORTKEY(event_timestamp);

SQL 查询示例

编写自定义 SQL 查询来转换您的事件数据:
-- Example: Recent high-value events
SELECT
    event_name,
    user_id,
    event_timestamp,
    event_data
FROM analytics.user_events
WHERE event_timestamp >= DATEADD(day, -7, GETDATE())
    AND JSON_EXTRACT_PATH_TEXT(event_data, 'value')::NUMERIC > 100
ORDER BY event_timestamp DESC;

dbt 集成

如果您在 Redshift 中使用 dbt,请确保 OneSignal 在每次 dbt 运行后保持访问权限:

选项1:细粒度权限

在您的 dbt 项目中添加后置钩子,以在每个模型构建后授予访问权限:
-- In your dbt model
{{ config(
    post_hook="GRANT SELECT ON {{ this }} TO CENSUS"
) }}

选项2:默认权限(推荐)

为您的 dbt 生产用户授予默认权限:
-- Must be run by Redshift superuser
ALTER DEFAULT PRIVILEGES FOR USER "<your_dbt_run_user>"
IN SCHEMA "<your_dbt_target_schema>"
GRANT SELECT ON TABLES TO CENSUS;

高级网络配置

SSH 隧道配置

对于私有网络上的 Redshift 集群:
  1. 创建 SSH 用户:在您的 SSH 主机上设置专用用户
  2. 配置隧道:在 OneSignal 集成设置中启用“使用 SSH 隧道”
  3. 安装密钥对:将 OneSignal 的公钥添加到 ~/.ssh/authorized_keys
  4. 测试连接:验证隧道连接

VPC 配置

对于 AWS VPC 内的 Redshift: OneSignal 使用 UNLOAD 命令进行高效的批量数据提取。VPC 部署需要 S3 VPC 端点以允许 Redshift 与 S3 通信。 设置 S3 VPC 端点:
  1. 在 AWS 控制台中导航到 VPC 服务
  2. 为 S3 服务创建 VPC 端点
  3. 与您的 Redshift 子网关联
  4. 配置路由表

性能优化

分布和排序键

为分析工作负载优化您的事件表:
-- Distribute by user_id for user-centric queries
CREATE TABLE analytics.user_events (
    -- columns
)
DISTKEY(user_id)
SORTKEY(event_timestamp, event_name);

列式存储

利用 Redshift 的列式存储进行分析:
  • 压缩:Redshift 自动压缩列
  • 区域映射:通过排序数据提高查询性能
  • 面向列:对事件数据的分析查询高效

限制

  • 多个模式需要分别授予权限
  • 引用跨模式表的视图需要额外权限
  • 复杂的存储过程访问可能需要额外设置
  • VPC 部署需要 S3 VPC 端点配置

常见问题

OneSignal 如何处理大量事件数据?

OneSignal 使用 Redshift 的 UNLOAD 命令进行高效的批量数据提取,该命令为大规模分析工作负载进行了优化。

我可以使用只读模式吗?

可以,如果您希望更简单的设置并且不能允许 OneSignal 创建表,您可以跳过记账模式创建并使用只读模式。

dbt 兼容性怎么样?

OneSignal 提供特定的 dbt 集成模式,以确保在 dbt 运行后维持权限。根据您的设置使用后置钩子或默认权限。
I