

# 连接到 Pendo
<a name="connecting-to-pendo"></a>

Pendo 为用户交互数据提供了丰富的数据存储功能。客户将用户交互数据传输到 AWS，如此就可以将此类数据与其他产品数据合并，进行额外的分析和控制面板制作，也能根据需要设置提醒。

**Topics**
+ [AWS Glue 对 Pendo 的支持](pendo-support.md)
+ [包含创建和使用连接的 API 操作的策略](pendo-configuring-iam-permissions.md)
+ [配置 Pendo](pendo-configuring.md)
+ [配置 Pendo 连接](pendo-configuring-connections.md)
+ [从 Pendo 实体读取内容](pendo-reading-from-entities.md)
+ [Pendo 连接选项](pendo-connection-options.md)
+ [限制](pendo-connector-limitations.md)

# AWS Glue 对 Pendo 的支持
<a name="pendo-support"></a>

AWS Glue 对 Pendo 的支持情况如下：

**是否支持作为来源？**  
是。可以使用 AWS Glue ETL 作业查询 Pendo 中的数据。

**是否支持作为目标？**  
否。

**支持的 Pendo API 版本**  
 v1 

# 包含创建和使用连接的 API 操作的策略
<a name="pendo-configuring-iam-permissions"></a>

以下示例策略描述了创建和使用连接所需的 AWS 权限。如果您要创建新角色，请创建包含以下内容的策略：

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

如果不想使用前述方法，也可以使用以下托管 IAM 策略：
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole)：授予对各种 AWS Glue 进程代表您运行所需的资源的访问权限。这些资源包括 AWS Glue、Amazon S3、IAM、CloudWatch Logs 和 Amazon EC2。如果您遵循此策略中指定的资源的命名约定，则 AWS Glue 进程具有所需的权限。此策略通常附加到在定义爬网程序、作业和开发终端节点时指定的角色。
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess)：策略所附加到的身份使用 AWS 管理控制台时，授予对 AWS Glue 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。

# 配置 Pendo
<a name="pendo-configuring"></a>

必须满足以下要求，才能使用 AWS Glue 从 Pendo 传输数据：

## 最低要求
<a name="pendo-configuring-min-requirements"></a>
+ 拥有 Pendo 账户，并已启用 `apiKey` 和 `write access`。
+  Pendo 账户拥有 API 访问权限和有效许可证。

如果满足这些要求，就可以将 AWS Glue 连接到 Pendo 账户。对于常见连接，无需在 Pendo 中执行其他操作。

# 配置 Pendo 连接
<a name="pendo-configuring-connections"></a>

Pendo 支持自定义身份验证。

有关生成自定义身份验证所需 API 密钥的 Pendo 公共文档，请参阅 [Authentication – Pendo REST API Documentation](https://engageapi.pendo.io/?bash#getting-started) 

要配置 Pendo 连接，请执行以下操作：

1. 在 AWS Secrets Manager 中，创建一个包含以下详细信息的密钥：
   + 对于客户托管的关联应用程序：密钥应包含关联应用程序的使用者密钥，并将 `apiKey` 作为键。
**注意**  
必须在 AWS Glue 中为每个连接创建密钥。

1. 在 AWS Glue Studio 中，按照以下步骤在**数据连接**下创建连接：

   1. 选择**数据来源**时，请选择 Pendo。

   1. 提供要连接的 Pendo 实例的 `instanceUrl`。

   1. 选择 AWS Glue 可以代入并有权执行以下操作的 IAM 角色：

------
#### [ JSON ]

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 在 AWS Glue 中选择您要用于此连接的 `secretName`，然后放置令牌。

   1.  如果要使用网络，请选择网络选项。

1. 向与您的 AWS Glue 作业关联的 IAM 角色授予读取 `secretName` 的权限。

1. 在 AWS Glue 作业配置中，提供 `connectionName` 作为附加网络连接。

# 从 Pendo 实体读取内容
<a name="pendo-reading-from-entities"></a>

 **先决条件** 

要从中读取内容的 Pendo 对象。请参阅下面的支持的实体表，查看可用的实体。

 **支持的实体** 
+ [功能](https://developers.pendo.io/docs/?bash#feature)
+ [Guide](https://developers.pendo.io/docs/?bash#guide)
+ [页面](https://developers.pendo.io/docs/?bash#page)
+ [报告](https://developers.pendo.io/docs/?bash#report)
+ [Report Data](https://developers.pendo.io/docs/?bash#return-report-contents-as-array-of-json-objects)
+ [Visitor](https://developers.pendo.io/docs/?bash#visitor)
+ [Account](https://developers.pendo.io/docs/?bash#entities)
+ [Event (事件)](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Feature Event](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Guide Event](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Page Event](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Poll Event](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Track Event](https://developers.pendo.io/docs/?bash#events-grouped)


| 实体 | 可以筛选 | 支持限制 | 支持排序依据 | 支持 Select \$1 | 支持分区 | 
| --- | --- | --- | --- | --- | --- | 
| 功能 | 否 | 否 | 否 | 是 | 否 | 
| Guide | 否 | 否 | 否 | 是 | 否 | 
| 页面 | 否 | 否 | 否 | 是 | 否 | 
| 报告 | 否 | 否 | 否 | 是 | 否 | 
| Report Data | 否 | 否 | 否 | 是 | 否 | 
| Visitor（Aggregation API） | 是 | 否 | 是 | 是 | 否 | 
| Account（Aggregation API） | 是 | 否 | 是 | 是 | 否 | 
| Event（Aggregation API） | 是 | 否 | 是 | 是 | 否 | 
| Feature Event（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 
| Guide Event（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 
| Account（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 
| Page Event（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 
| Poll Event（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 
| Track Event（Aggregation API） | 是 | 否 | 是 | 是 | 是 | 

 **示例** 

```
Pendo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.Pendo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "feature",
        "API_VERSION": "v1",
        "INSTANCE_URL": "instanceUrl"
    }
```

## 对查询进行分区
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

如果您想在 Spark 中利用并发，可以提供其他 Spark 选项：`PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用这些参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。
+ `PARTITION_FIELD`：用于对查询进行分区的字段的名称。
+ `LOWER_BOUND`：所选分区字段的**包含**下限值。

  对于日期时间字段，我们接受 ISO 格式的值。

  有效值示例：

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`：所选分区字段的**排除**上限值。
+ `NUM_PARTITIONS`：分区的数量。

下表描述实体分区字段支持详细信息：


| 实体名称 | 
| --- | 
| 事件 | 
|  Feature Event  | 
| Guide Event | 
| Page Event | 
| Poll Event | 
| Track Event | 

示例：

```
pendo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="glue.spark.pendo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "event",
        "API_VERSION": "v1",
        "INSTANCE_URL": "instanceUrl"
        "NUM_PARTITIONS": "10",
        "PARTITION_FIELD": "appId"
        "LOWER_BOUND": "4656"
        "UPPER_BOUND": "7788"
    }
```

# Pendo 连接选项
<a name="pendo-connection-options"></a>

以下是 Pendo 的连接选项：
+  `ENTITY_NAME`（字符串）：（必填）用于读取/写入。Pendo 中对象的名称。
+ `INSTANCE_URL`（字符串）：（必填）有效的 Pendo 实例 URL，其中包含以下允许的值：
  + [默认](https://app.pendo.io/)
  + [欧洲](https://app.eu.pendo.io/)
  + [US1](https://us1.app.pendo.io/)
+ `API_VERSION`（字符串）：（必填）用于读取。要使用的 Pendo Engage Rest API 版本。例如：3.0。
+ `SELECTED_FIELDS`（列表<字符串>）–默认：empty(SELECT \$1)。用于读取。您想要为对象选择的列。
+ `FILTER_PREDICATE`（字符串）– 默认：空。用于读取。应采用 Spark SQL 格式。
+ `QUERY`（字符串）– 默认：空。用于读取。完整的 Spark SQL 查询。
+ `PARTITION_FIELD`（字符串）– 用于读取。用于分区查询的字段。
+ `LOWER_BOUND`（字符串）– 用于读取。所选分区字段的包含下限值。
+ `UPPER_BOUND`（字符串）– 用于读取。所选分区字段的排除上限值。
+ `NUM_PARTITIONS`（整数）– 默认：1。用于读取。要读取的分区数。

# 限制
<a name="pendo-connector-limitations"></a>

以下是 Pendo 连接器的限制：
+ Pendo 不支持分页。
+ 仅聚合 API 对象（`Account`、`Event`、`Feature Event`、`Guide Events`、`Page Event`、`Poll Event`、`Track Event` 和 `Visitor`）支持筛选
+ DateTimeRange 是聚合 API 对象（`Event`、`Feature Event`、`Guide Events`、`Page Event`、`Poll Event,`、`Track Event`）的必填筛选条件参数
+ dayRange 时段将向下四舍五入为该时区时段的起始时间。例如，如果提供的筛选条件为 `2023-01-12T07:55:27.065Z`，则该时段将四舍五入至起始时间，也就是 `2023-01-12T00:00:00Z`。