

# Conexión a Pendo
<a name="connecting-to-pendo"></a>

Pendo proporciona un rico almacén de datos para los datos de interacción con los usuarios. Los clientes transferirán estos datos a AWS para poder unirlos con otros datos de productos, realizar análisis adicionales y crear paneles, así como establecer alertas si así lo desean.

**Topics**
+ [Compatibilidad de AWS Glue con Pendo](pendo-support.md)
+ [Políticas que contienen las operaciones de la API para crear y usar conexiones](pendo-configuring-iam-permissions.md)
+ [Configuración de Pendo](pendo-configuring.md)
+ [Configuración de conexiones a Pendo](pendo-configuring-connections.md)
+ [Lectura de entidades de Pendo](pendo-reading-from-entities.md)
+ [Opciones de conexión a Pendo](pendo-connection-options.md)
+ [Limitaciones](pendo-connector-limitations.md)

# Compatibilidad de AWS Glue con Pendo
<a name="pendo-support"></a>

AWS Glue admite Pendo de la siguiente manera:

**¿Es compatible como origen?**  
Sí. Puede utilizar los trabajos de ETL de AWS Glue para consultar datos de Pendo.

**¿Es compatible como destino?**  
No.

**Versiones de la API de Pendo compatibles**  
 v1 

# Políticas que contienen las operaciones de la API para crear y usar conexiones
<a name="pendo-configuring-iam-permissions"></a>

En el siguiente ejemplo de política se describen los permisos de AWS necesarios para crear y utilizar conexiones. Si va a crear un nuevo rol, cree una política que contenga lo siguiente: 

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

****  

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

------

Si no desea utilizar el método anterior, como alternativa, utilice las siguientes políticas de IAM administradas:
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): concede acceso a los recursos que necesitan diversos procesos de AWS Glue para ejecutarse en su nombre. Entre estos recursos se incluyen AWS Glue, Amazon S3, IAM, CloudWatch Logs y Amazon EC2. Si aplica la convención de nomenclatura en los recursos especificados en esta política, los procesos de AWS Glue tienen los permisos necesarios. Normalmente, esta política se asocia a los roles que se especifican a la hora de definir rastreadores, trabajos y puntos de conexión de desarrollo. 
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acceso completo a los recursos de AWS Gluecuando una identidad a la que está vinculada la política utiliza la Consola de administración de AWS. Si sigue la convención de nomenclatura para los recursos especificados en esta política, los usuarios dispondrán de todas las funciones de la consola. Esta política se suele adjuntar a los usuarios de la consola AWS Glue. 

# Configuración de Pendo
<a name="pendo-configuring"></a>

Antes de poder utilizar AWS Glue para transferir desde Pendo, deberá cumplir los siguientes requisitos:

## Requisitos mínimos
<a name="pendo-configuring-min-requirements"></a>
+ Tener una cuenta de Pendo con una `apiKey` con `write access` habilitado.
+  La cuenta de Pendo debe disponer de acceso de API con una licencia válida. 

Si cumple estos requisitos, estará listo para conectar AWS Glue a la cuenta de Pendo. Si es una conexión típica, no necesita hacer nada más en Pendo.

# Configuración de conexiones a Pendo
<a name="pendo-configuring-connections"></a>

Pendo admite la autenticación personalizada.

Para consultar la documentación pública de Pendo sobre la generación de las claves de API necesarias para la autorización personalizada, consulte [Authentication – Pendo REST API Documentation](https://engageapi.pendo.io/?bash#getting-started). 

Para configurar una conexión a Pendo:

1. En AWS Secrets Manager, cree un secreto con los siguientes detalles: 
   + En el caso de una aplicación conectada administrada por el cliente, el secreto debe contener el secreto del consumidor de la aplicación conectada con `apiKey` como clave. 
**nota**  
Es imprescindible crear un secreto por conexión en AWS Glue.

1. En AWS Glue Studio, cree una conexión en **Conexiones de datos** según los pasos que se indican a continuación:

   1. Al seleccionar un **Origen de datos**, elija Pendo.

   1. Proporcione la `instanceUrl` de la instancia de Pendo a la que se quiere conectar.

   1. Seleccione el rol de IAM que AWS Glue puede asumir y que cuente con los permisos necesarios para realizar las siguientes acciones: 

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

****  

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

------

   1. Seleccione el `secretName` que desee usar para esta conexión en AWS Glue para colocar los tokens. 

   1.  Seleccione las opciones de red si quiere usar su red. 

1. Conceda el rol de IAM asociado a su permiso de trabajo de AWS Glue para leer `secretName`. 

1. En la configuración del trabajo de AWS Glue, proporcione `connectionName` como una conexión de red adicional.

# Lectura de entidades de Pendo
<a name="pendo-reading-from-entities"></a>

 **Requisitos previos** 

Un objeto de Pendo desde el que desea leer. Consulte la tabla de entidades compatibles que aparece a continuación para comprobar las entidades disponibles. 

 **Entidades compatibles** 
+ [Característica](https://developers.pendo.io/docs/?bash#feature)
+ [Guía](https://developers.pendo.io/docs/?bash#guide)
+ [Page](https://developers.pendo.io/docs/?bash#page)
+ [Informar](https://developers.pendo.io/docs/?bash#report)
+ [Datos del informe](https://developers.pendo.io/docs/?bash#return-report-contents-as-array-of-json-objects)
+ [Visitante](https://developers.pendo.io/docs/?bash#visitor)
+ [Cuenta de](https://developers.pendo.io/docs/?bash#entities)
+ [Evento](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento de característica](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento guía](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Evento de página](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento de encuesta](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Evento de seguimiento](https://developers.pendo.io/docs/?bash#events-grouped)


| Entidad | Se puede filtrar | Admite límite | Admite Ordenar por | Admite Seleccionar \$1 | Admite Partición | 
| --- | --- | --- | --- | --- | --- | 
| Característica | No | No | No | Sí | No | 
| Guía | No | No | No | Sí | No | 
| Page | No | No | No | Sí | No | 
| Informar | No | No | No | Sí | No | 
| Datos del informe | No | No | No | Sí | No | 
| Visitante (API de agregación) | Sí | No | Sí | Sí | No | 
| Cuenta (API de agregación) | Sí | No | Sí | Sí | No | 
| Cuenta (API de agregación) | Sí | No | Sí | Sí | No | 
| Evento de característica (API de agregación) | Sí | No | Sí | Sí | Sí | 
| Evento de guía (API de agregación) | Sí | No | Sí | Sí | Sí | 
| Cuenta (API de agregación) | Sí | No | Sí | Sí | Sí | 
| Evento de página (API de agregación) | Sí | No | Sí | Sí | Sí | 
| Evento de encuesta (API de agregación) | Sí | No | Sí | Sí | Sí | 
| Evento de seguimiento (API de agregación) | Sí | No | Sí | Sí | Sí | 

 **Ejemplo** 

```
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"
    }
```

## Consultas de particionamiento
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

Puede proporcionar las opciones adicionales de Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` y `NUM_PARTITIONS` si quiere utilizar la simultaneidad en Spark. Con estos parámetros, la consulta original se dividiría en un número `NUM_PARTITIONS` de subconsultas que las tareas de Spark pueden ejecutar simultáneamente.
+ `PARTITION_FIELD`: el nombre del campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`: un valor de límite inferior **inclusivo** del campo de partición elegido.

  Para el campo DateTime, aceptamos el valor en formato ISO.

  Ejemplo de valor válido:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: un valor límite superior **exclusivo** del campo de partición elegido.
+ `NUM_PARTITIONS`: el número de particiones.

En la tabla siguiente, se describen los detalles de compatibilidad de campos de particiones de entidades:


| Nombre de la entidad | 
| --- | 
| Evento | 
|  Evento de característica  | 
| Evento de guía | 
| Evento de página | 
| Evento de encuesta | 
| Evento de seguimiento | 

Ejemplo:

```
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"
    }
```

# Opciones de conexión a Pendo
<a name="pendo-connection-options"></a>

Existen las siguientes opciones para establecer conexión con Pendo:
+  `ENTITY_NAME`(cadena): (obligatorio) se utiliza para leer y escribir. El nombre del objeto en Pendo. 
+ `INSTANCE_URL`(cadena): (obligatorio) una URL de instancia de Pendo válida con los siguientes valores permitidos:
  + [Predeterminado](https://app.pendo.io/)
  + [Europa](https://app.eu.pendo.io/)
  + [US1](https://us1.app.pendo.io/)
+ `API_VERSION`(cadena): (obligatorio) se usa para lectura. Versión de la API de REST de Pendo Engage que desea utilizar. Por ejemplo: 3.0.
+ `SELECTED_FIELDS`(lista<Cadena>): predeterminado: empty(SELECT \$1). Se usa para leer. Columnas que desee seleccionar para el objeto.
+ `FILTER_PREDICATE`(cadena): predeterminado: vacío. Se usa para leer. Debe estar en el formato de Spark SQL.
+ `QUERY`(cadena): predeterminado: vacío. Se usa para leer. Consulta completa de Spark SQL.
+ `PARTITION_FIELD`(cadena): se usa para leer. Campo que se utilizará para particionar la consulta.
+ `LOWER_BOUND`(cadena): se usa para leer. Un valor de límite inferior inclusivo del campo de partición elegido.
+ `UPPER_BOUND`(cadena): se usa para leer. Un valor límite superior exclusivo del campo de partición elegido. 
+ `NUM_PARTITIONS`(entero): predeterminado: 1. Se usa para leer. Número de particiones para leer.

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

El conector de Pendo presenta las siguientes limitaciones:
+ No se admite la paginación en Pendo.
+ La filtración solo es compatible con los objetos de la API de agregación: (`Account`, `Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event`, `Track Event` y `Visitor`).
+ DateTimeRange es un parámetro de filtro obligatorio para los objetos de la API de agregación (`Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event,` y `Track Event`)
+ El periodo dayRange se redondeará hacia abajo hasta el comienzo del periodo en la zona horaria correspondiente. Por ejemplo, si se proporciona el filtro `2023-01-12T07:55:27.065Z`, este periodo se redondeará al inicio del período, es decir `2023-01-12T00:00:00Z`. 