

# 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 Management 콘솔을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Pendo 구성
<a name="pendo-configuring"></a>

AWS Glue를 사용하여 Pendo에서 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="pendo-configuring-min-requirements"></a>
+ `write access`가 활성화된 `apiKey`가 있는 Pendo 계정이 있습니다.
+  Pendo 계정에 유효한 라이선스가 있는 API 액세스 권한이 있습니다.

이러한 요구 사항을 충족하면 Pendo 계정에 AWS Glue를 연결할 준비가 된 것입니다. 일반적인 연결의 경우 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 객체. 사용 가능한 엔터티를 확인하려면 아래 지원되는 엔터티 테이블을 참조하세요.

 **지원되는 엔터티** 
+ [Feature](https://developers.pendo.io/docs/?bash#feature)
+ [Guide](https://developers.pendo.io/docs/?bash#guide)
+ [Page](https://developers.pendo.io/docs/?bash#page)
+ [Report](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 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| Feature | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Guide | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Page | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| Report | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 
| 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`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(**경계 포함**).

  DateTime 필드의 경우 ISO 형식의 값이 허용됩니다.

  유효한 값의 예제:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).
+ `NUM_PARTITIONS`: 파티션 수.

다음 표에서는 엔터티 분할 필드 지원 세부 정보를 설명합니다.


| 엔터티 이름 | 
| --- | 
| Event | 
|  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`(List<String>) - 기본값: 비어 있습니다(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에서 지원되지 않습니다.
+ 필터링은 Aggregate API 객체(`Account`, `Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event`, `Track Event` 및 `Visitor`)에서만 지원됩니다.
+ DateTimeRange는 Aggregate API 객체(`Event`, `Feature Event`, `Guide Events`, `Page Event`, `Poll Event,` `Track Event`)에 대한 필수 필터 파라미터입니다.
+ dayRange 기간은 시간대의 기간 시작 시점으로 버림됩니다. 예를 들어 제공된 필터가 `2023-01-12T07:55:27.065Z`인 경우 이 기간은 기간의 시작 시점, 즉 `2023-01-12T00:00:00Z`로 버림됩니다.