

# Conexão ao Pendo
<a name="connecting-to-pendo"></a>

O Pendo fornece um armazenamento de dados avançado para dados de interação do usuário. Os clientes transferirão esses dados para a AWS para que possam combiná-los a outros dados do produto, realizar análises adicionais, criar painéis e definir alertas, se quiserem.

**Topics**
+ [Suporte do AWS Glue para o Pendo](pendo-support.md)
+ [Políticas que contêm as operações de API para criar e usar conexões](pendo-configuring-iam-permissions.md)
+ [Configuração do Pendo](pendo-configuring.md)
+ [Configuração de conexões do Pendo](pendo-configuring-connections.md)
+ [Leitura de entidades do Pendo](pendo-reading-from-entities.md)
+ [Opções de conexão do Pendo](pendo-connection-options.md)
+ [Limitações](pendo-connector-limitations.md)

# Suporte do AWS Glue para o Pendo
<a name="pendo-support"></a>

O AWS Glue oferece suporte ao Pendo da seguinte forma:

**Compatível como fonte?**  
Sim. Você pode usar trabalhos de ETL do AWS Glue para consultar dados do Pendo.

**Compatível como destino?**  
Não.

**Versões compatíveis da API do Pendo**  
 v1 

# Políticas que contêm as operações de API para criar e usar conexões
<a name="pendo-configuring-iam-permissions"></a>

O exemplo de política a seguir descreve as permissões da AWS necessárias para criar e usar conexões. Se você estiver criando um novo perfil, crie uma política que contenha o seguinte: 

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

****  

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

------

Se não quiser usar o método anterior, uma alternativa será usar as seguintes políticas do IAM gerenciadas:
+  [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole): concede acesso a recursos que vários processos do AWS Glue exigem para serem executados em seu nome. Esses recursos incluem o AWS Glue, Amazon S3, IAM, CloudWatch Logs e Amazon EC2. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os processos do AWS Glue terão as permissões necessárias. Esta política geralmente é anexada a funções especificadas durante a definição de crawlers, trabalhos e endpoints de desenvolvimento. 
+  [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess): concede acesso total aos recursos do AWS Glue quando uma identidade à qual a política está anexada usa o Console de Gerenciamento da AWS. Se você seguir a convenção de nomenclatura para os recursos especificados nesta política, os usuários poderão acessar todos os recursos do console. Esta política geralmente é anexada aos usuários do console do AWS Glue. 

# Configuração do Pendo
<a name="pendo-configuring"></a>

Antes de usar o AWS Glue para transferir do Pendo, os seguintes requisitos deverão ser atendidos:

## Requisitos mínimos
<a name="pendo-configuring-min-requirements"></a>
+ Você tem uma conta do Pendo com uma `apiKey` habilitada com `write access`.
+  Sua conta do Pendo tem acesso à API com uma licença válida. 

Se você atender a esses requisitos, poderá conectar o AWS Glue à sua conta do Pendo. Para conexões típicas, você não precisa fazer mais nada no Pendo.

# Configuração de conexões do Pendo
<a name="pendo-configuring-connections"></a>

O Pendo oferece suporte à autenticação personalizada.

Para obter a documentação pública do Pendo sobre como gerar as chaves de API necessárias para a autorização personalizada, consulte [Autenticação – Documentação da API REST do Pendo](https://engageapi.pendo.io/?bash#getting-started). 

Para configurar uma conexão do Pendo:

1. No AWS Secrets Manager, crie um segredo com os seguintes detalhes: 
   + Para uma aplicação conectada gerenciada pelo cliente, o segredo deve conter o segredo do consumidor da aplicação conectada com a chave `apiKey`. 
**nota**  
É preciso criar um segredo por conexão em AWS Glue.

1. Em AWS Glue Studio, crie uma conexão em **Conexões de dados** seguindo estas etapas:

   1. Ao selecionar uma **Fonte de dados**, selecione o Pendo.

   1. Forneça o `instanceUrl` da instância do Pendo à qual você deseja se conectar.

   1. Selecione o perfil do IAM que o AWS Glue pode assumir e tem permissões para as seguintes ações: 

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

****  

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

------

   1. Selecione o `secretName` que você deseja usar para essa conexão no AWS Glue para colocar os tokens. 

   1.  Selecione as opções de rede se quiser usar sua rede. 

1. Conceda permissão ao perfil do IAM associado ao seu trabalho do AWS Glue para ler `secretName`. 

1. Na configuração do trabalho do AWS Glue, forneça `connectionName` como uma conexão de rede adicional.

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

 **Pré-requisitos** 

Um objeto do Pendo do qual você deseja ler. Consulte a tabela de entidades compatíveis abaixo para verificar as entidades disponíveis. 

 **Entidades compatíveis** 
+ [Recurso do](https://developers.pendo.io/docs/?bash#feature)
+ [Guia](https://developers.pendo.io/docs/?bash#guide)
+ [Página](https://developers.pendo.io/docs/?bash#page)
+ [Relatório](https://developers.pendo.io/docs/?bash#report)
+ [Dados de relatório](https://developers.pendo.io/docs/?bash#return-report-contents-as-array-of-json-objects)
+ [Visitante](https://developers.pendo.io/docs/?bash#visitor)
+ [Conta da](https://developers.pendo.io/docs/?bash#entities)
+ [Event](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento do recurso](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento do guia](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Evento da página](https://developers.pendo.io/docs/?bash#events-grouped)
+ [Evento de enquete](https://developers.pendo.io/docs/?bash#events-ungrouped)
+ [Evento de rastreamento](https://developers.pendo.io/docs/?bash#events-grouped)


| Entidade | Pode ser filtrada | Oferece suporte a limite | Oferece suporte a Ordenar por | Oferece suporte a Selecionar \$1 | Oferece suporte a particionamento | 
| --- | --- | --- | --- | --- | --- | 
| Recurso | Não | Não | Não | Sim | Não | 
| Guia | Não | Não | Não | Sim | Não | 
| Página | Não | Não | Não | Sim | Não | 
| Relatório | Não | Não | Não | Sim | Não | 
| Dados de relatório | Não | Não | Não | Sim | Não | 
| Visitante (API de agregação) | Sim | Não | Sim | Sim | Não | 
| Conta (API de agregação) | Sim | Não | Sim | Sim | Não | 
| Evento (API de agregação) | Sim | Não | Sim | Sim | Não | 
| Evento do recurso (API de agregação) | Sim | Não | Sim | Sim | Sim | 
| Evento do guia (API de agregação) | Sim | Não | Sim | Sim | Sim | 
| Conta (API de agregação) | Sim | Não | Sim | Sim | Sim | 
| Evento da página (API de agregação) | Sim | Não | Sim | Sim | Sim | 
| Evento de enquete (API de agregação) | Sim | Não | Sim | Sim | Sim | 
| Evento de rastreamento (API de agregação) | Sim | Não | Sim | Sim | Sim | 

 **Exemplo** 

```
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 particionamento
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

É possível fornecer as opções adicionais do Spark `PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND` e `NUM_PARTITIONS` se quiser utilizar a simultaneidade no Spark. Com esses parâmetros, a consulta original seria dividida em `NUM_PARTITIONS` subconsultas, que poderiam ser executadas pelas tarefas do Spark simultaneamente.
+ `PARTITION_FIELD`: o nome do campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`: um valor limite inferior **inclusivo** do campo de partição escolhido.

  Para o campo DateTime, aceitamos o valor no formato ISO.

  Exemplo de valor válido:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: um valor limite superior **exclusivo** do campo de partição escolhido.
+ `NUM_PARTITIONS`: o número de partições.

A tabela a seguir descreve os detalhes do suporte do campo de particionamento da entidade:


| Nome da entidade | 
| --- | 
| Event | 
|  Evento do recurso  | 
| Evento do guia | 
| Evento da página | 
| Evento de enquete | 
| Evento de rastreamento | 

Exemplo:

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

# Opções de conexão do Pendo
<a name="pendo-connection-options"></a>

Estas são as opções de conexão do Pendo:
+  `ENTITY_NAME`(string): (obrigatório) usado para leitura/gravação. O nome do seu objeto no Pendo. 
+ `INSTANCE_URL`(string): (obrigatório) um URL de instância válida do Pendo com os valores permitidos a seguir.
  + [Padrão](https://app.pendo.io/)
  + [Europa](https://app.eu.pendo.io/)
  + [US1](https://us1.app.pendo.io/)
+ `API_VERSION`(string): (obrigatório) usado para leitura. A versão da API Rest do Pendo Engage que você deseja usar. Por exemplo: 3.0.
+ `SELECTED_FIELDS`(Lista<String>): padrão: vazio(SELECIONE \$1). Usado para leitura. Colunas que deseja selecionar para o objeto.
+ `FILTER_PREDICATE`(string): padrão: vazio. Usado para leitura. Deve estar no formato Spark SQL.
+ `QUERY`(String): padrão: vazia. Usado para leitura. Consulta completa do Spark SQL.
+ `PARTITION_FIELD`(string): usado para leitura. Campo a ser usado para particionar a consulta.
+ `LOWER_BOUND`(string): usado para leitura. Um valor limite inferior inclusivo do campo de partição escolhido.
+ `UPPER_BOUND`(string): usado para leitura. Um valor limite superior exclusivo do campo de partição escolhido. 
+ `NUM_PARTITIONS`(Inteiro): padrão: 1. Usado para leitura. Número de partições para leitura.

# Limitações
<a name="pendo-connector-limitations"></a>

Estas são as limitações do conector do Pendo:
+ Não há suporte à paginação no Pendo.
+ Somente os objetos da API de agregação (`Account`, `Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event`, `Track Event` e `Visitor`) oferecem suporte à filtragem
+ DateTimeRange é um parâmetro de filtro obrigatório para objetos da API de agregação (`Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event,`, `Track Event`)
+ O período dayRange será arredondado para baixo até o início do período no fuso horário. Por exemplo, se o filtro fornecido for `2023-01-12T07:55:27.065Z`, esse período será arredondado para o início do período, que é `2023-01-12T00:00:00Z`. 