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

# Amazon Athena

> 将 Amazon Athena 的自定义事件同步到 OneSignal，基于用户行为触发自动化旅程和个性化消息活动。

export const PLATFORM_0 = "Athena"

export const DATA_TYPE_0 = "table columns"

export const COLUMN_HEADER_0 = "Athena Column"

export const PROPERTIES_DESCRIPTION_0 = "Event metadata from S3 data lake"

## 概述

OneSignal + Amazon Athena 集成可以自动将您的 Athena 数据湖中的自定义事件直接同步到 OneSignal 的自定义事件 API。这使您可以基于存储在 AWS 数据基础设施中的真实用户行为触发自动化旅程和个性化消息活动。

您可以同步购买、产品浏览、订阅变更或任何自定义用户操作等事件，自动触发入门序列、重新参与活动、交易消息以及跨推送通知、电子邮件、应用内消息和短信的定向促销。

***

## 要求

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

### Amazon Athena 要求

* 具有 Athena 访问权限的 **AWS 账户**
* 已配置的 **Athena 工作组**（默认值："primary"）
* 用于 Athena 查询输出的 **S3 查询结果存储桶**
* Athena、S3 和 AWS Glue 访问的 **IAM 权限**
* 存储在 S3 中并在 AWS Glue 中编目的**事件数据**

***

## 设置

### 配置 AWS 权限

OneSignal 需要特定权限才能通过 Athena 查询您的事件数据。请使用以下权限创建 IAM 策略：

<Steps>
  <Step title="创建 IAM 策略">
    创建包含这些权限的 IAM 策略：

    ```json theme={null}
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "athena:StartQueryExecution",
                    "athena:GetQueryExecution",
                    "athena:GetQueryResultsStream",
                    "athena:GetQueryResults",
                    "athena:CreatePreparedStatement",
                    "athena:DeletePreparedStatement",
                    "glue:GetTable",
                    "glue:GetTables",
                    "glue:GetDatabase",
                    "glue:GetDatabases",
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:GetBucketLocation"
                ],
                "Resource": [
                    "arn:aws:glue:<region>:<aws-account-id>:table/<database>/*",
                    "arn:aws:glue:<region>:<aws-account-id>:database/<database>",
                    "arn:aws:glue:<region>:<aws-account-id>:catalog",
                    "arn:aws:athena:<region>:<aws-account-id>:workgroup/<workgroup>",
                    "arn:aws:s3:::<query-results-bucket>",
                    "arn:aws:s3:::<query-results-bucket>/*",
                    "arn:aws:s3:::<event-data-bucket>",
                    "arn:aws:s3:::<event-data-bucket>/*"
                ]
            }
        ]
    }
    ```

    <Info>
      将占位符替换为您实际的 AWS 区域、账户 ID、数据库名称、工作组和存储桶名称。
    </Info>
  </Step>

  <Step title="创建 IAM 用户或角色">
    为 OneSignal 创建一个 IAM 用户并附加上面创建的策略，或准备使用基于角色的访问。
  </Step>

  <Step title="记录连接详细信息">
    收集以下信息：

    * **AWS 访问密钥 ID** 和 **秘密访问密钥**（如果使用 IAM 用户）
    * **S3 查询结果存储桶** URL
    * **AWS 区域**
    * **Athena 工作组**（默认值："primary"）
  </Step>
</Steps>

### 配置 OneSignal Athena 连接

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

  <Step title="选择 Amazon Athena">
    从可用集成列表中选择 **Amazon Athena**。
  </Step>

  <Step title="输入连接详细信息">
    提供您的 Athena 连接信息：

    * **AWS 访问密钥 ID**：您的 IAM 用户访问密钥
    * **AWS 秘密访问密钥**：您的 IAM 用户秘密密钥
    * **AWS 区域**：您的 Athena 区域
    * **S3 查询结果存储桶**：查询输出的 URL
    * **Athena 工作组**：您的工作组名称
  </Step>

  <Step title="测试连接">
    点击**测试连接**以验证 OneSignal 可以访问您的 Athena 实例并执行查询。
  </Step>
</Steps>

### 替代方案：基于角色的访问

为了增强安全性，您可以使用 IAM 角色代替访问密钥：

<Steps>
  <Step title="启用基于角色的访问">
    在 Athena 连接设置中，勾选**使用角色**并将访问密钥留空。
  </Step>

  <Step title="创建 IAM 角色">
    在 AWS 控制台中，创建一个具有以下设置的 IAM 角色：

    * **可信实体**：其他 AWS 账户
    * **账户 ID**：`341876425553`（OneSignal 的 AWS 账户）
    * **外部 ID**：OneSignal 中显示的 ID（在初次连接尝试后显示）
    * **权限**：上面创建的 IAM 策略
  </Step>

  <Step title="完成连接">
    在 OneSignal 中输入角色 ARN 并测试连接。
  </Step>
</Steps>

***

## 事件数据映射

连接后，您需要将 Athena 表映射到 OneSignal 自定义事件字段：

<Steps>
  <Step title="选择事件表">
    选择包含要同步到 OneSignal 的事件数据的表或视图。
  </Step>

  <Step title="映射必需的事件字段">
    映射自定义事件的必需字段：

    * **事件名称**：包含事件类型的列（例如 "purchase"、"signup"）
    * **用户标识符**：外部用户 ID、电子邮件或电话号码列
    * **事件时间戳**：事件发生的时间（可选）
  </Step>

  <Step title="映射事件载荷数据">
    将其他列映射到事件载荷属性：

    * 自定义事件属性（product\_id、价格、类别等）
    * 上下文数据（来源、活动等）
    * 行为指标（价值、数量等）
  </Step>

  <Step title="配置同步设置">
    设置事件处理频率和交付偏好。
  </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} | 否  |

***

## 限制

* **查询性能**：Athena 按查询和扫描数据计费 - 请优化您的事件表
* **S3 依赖性**：需要正确配置的 S3 存储桶和 Glue 目录
* **数据新鲜度**：事件同步频率取决于您的 S3 数据更新频率

***

## 常见问题

### 如果我的 Athena 查询失败会怎样？

OneSignal 将记录查询错误并重试失败的查询。如果遇到持续性失败，请检查您的 IAM 权限和 S3 存储桶访问权限。

### OneSignal 同步事件的频率

OneSignal 根据您配置的同步频率检查新事件，最小间隔为 15 分钟。

***

## 需要帮助？

请通过 `support@onesignal.com` 联系我们的支持团队，或使用应用内聊天获取 Athena 集成设置方面的帮助。
