

# Domo에 연결
<a name="connecting-to-data-domo"></a>

Domo는 클라우드 기반 대시보딩 도구입니다. Domo의 엔터프라이즈 애플리케이션 플랫폼을 사용하면 Domo를 확장하는 데 필요한 기반이 마련되므로 사용자 지정 솔루션을 더욱 빠르게 구축할 수 있습니다.

**Topics**
+ [AWS Glue의 Domo 지원](domo-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](domo-configuring-iam-permissions.md)
+ [Domo 구성](domo-configuring.md)
+ [Domo 연결 구성](domo-configuring-connections.md)
+ [Domo 엔터티에서 읽기](domo-reading-from-entities.md)
+ [Domo 연결 옵션](domo-connection-options.md)
+ [Domo 제한 사항](domo-connection-limitations.md)

# AWS Glue의 Domo 지원
<a name="domo-support"></a>

AWS Glue에서는 다음과 같이 Domo를 지원합니다.

**소스로 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Domo에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
아니요.

**지원되는 Domo API 버전**  
다음 Domo API 버전이 지원됩니다.
+ v1

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="domo-configuring-iam-permissions"></a>

다음 샘플 정책은 연결을 생성하고 사용하는 데 필요한 AWS IAM 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

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

# Domo 구성
<a name="domo-configuring"></a>

AWS Glue를 사용하여 Domo에서 지원되는 대상으로 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="domo-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ Domo 계정에서 API 액세스가 활성화되어 있습니다.
+ 계정에 대해 인증된 직접 호출을 수행하는 경우 AWS Glue에서 데이터에 안전하게 액세스하기 위해 사용하는 클라이언트 자격 증명을 제공하는 앱이 Domo 개발자 계정 아래에 있습니다. 자세한 내용은 [Domo 개발자 앱 생성](#domo-configuring-creating-developer-app) 섹션을 참조하세요.

이러한 요구 사항을 충족하면 Domo 계정에 AWS Glue를 연결할 준비가 된 것입니다.

## Domo 개발자 앱 생성
<a name="domo-configuring-creating-developer-app"></a>

클라이언트 ID 및 클라이언트 보안 암호를 가져오려면 개발자 계정을 생성합니다.

1. [Domo 개발자 로그인 페이지](https://developer.domo.com/manage-clients)로 이동합니다.

1. **로그인**을 선택합니다.

1. 도메인 이름을 입력하고 **Continue**를 클릭합니다.

1. **My Account**로 마우스를 가리킨 다음 **New Client**를 선택합니다.

1. 이름 및 설명을 입력하고 범위(‘data’)를 선택한 다음 **Create**를 선택합니다.

1. 생성된 새 클라이언트에서 생성된 **클라이언트 ID**와 **클라이언트 보안 암호**를 가져옵니다.

# Domo 연결 구성
<a name="domo-configuring-connections"></a>

Domo는 OAuth2에 대한 CLIENT CREDENTIALS 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 클라이언트 애플리케이션만 서버에 인증하고, 사용자는 관여하지 않으므로 2각 OAuth로 간주됩니다.
+ 사용자는 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Domo에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다.
+ 권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성에 대한 공개 Domo 설명서는 [OAuth Authentication](https://developer.domo.com/portal/1845fc11bbe5d-api-authentication)을 참조하세요.

다음 단계를 따라 Domo 연결을 구성합니다.

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1. 고객 관리형 연결된 앱의 경우 보안 암호는 앱 액세스 토큰, `client_id` 및 `client_secret`을 포함해야 합니다.

   1. 참고: AWS Glue에서 연결의 보안 암호를 생성해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **연결**에서 **연결 생성**을 선택합니다.

   1. **데이터 소스**를 선택할 때 Domo를 선택합니다.

   1. 다음 작업에 대한 권한이 있고 AWS Glue에서 수임할 수 있는 AWS 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`을 읽을 수 있는 권한을 부여합니다.

# Domo 엔터티에서 읽기
<a name="domo-reading-from-entities"></a>

**사전 조건**

읽으려는 Domo 객체. 객체 이름(예: Data Set 또는 Data Permission Policies)이 필요합니다. 다음 표에는 지원되는 엔터티가 나와 있습니다.

**소스에 대해 지원되는 엔터티**:


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 데이터 세트 | 예 | 예 | 예 | 예 | 예 | 
| Data Permission Policies | 아니요 | 아니요 | 아니요 | 예 | 아니요 | 

**예시:**

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1"
    }
```

## Domo 엔터티 및 필드 세부 정보
<a name="domo-reading-from-entities-field-details"></a>

정적 메타데이터를 포함하는 엔터티:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/domo-reading-from-entities.html)

다음 엔터티에 대해 Domo에서는 메타데이터를 동적으로 가져도록 엔드포인트를 제공하므로 운영자 지원이 엔터티의 데이터 유형 수준에서 캡처됩니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/domo-reading-from-entities.html)

## 분할 쿼리
<a name="domo-reading-from-partitioning"></a>

**필드 기반 분할**

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND`, `NUM_PARTITIONS`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(**경계 포함**).

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

  유효한 값의 예제:

  ```
  "2023-01-15T11:18:39.205Z"
  ```

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

  유효한 값의 예제:

  ```
  "2023-01-15"
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).

  유효한 값의 예제:

  ```
  "2023-02-15T11:18:39.205Z"
  ```
+ `NUM_PARTITIONS`: 파티션 수.

엔터티 수준 분할 필드 지원 세부 정보는 다음 표에 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/domo-reading-from-entities.html)

예시:

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "permissionTime"
        "LOWER_BOUND": "2023-01-15T11:18:39.205Z"
        "UPPER_BOUND": "2023-02-15T11:18:39.205Z"
        "NUM_PARTITIONS": "2"
    }
```

**레코드 기반 분할**

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`NUM_PARTITIONS`)을 제공할 수 있습니다. 이 파라미터를 사용하면 Spark 태스크에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원본 쿼리가 분할됩니다.

레코드 기반 분할에서는 존재하는 총 레코드 수를 Domo에서 쿼리하고 제공된 `NUM_PARTITIONS` 수로 나눕니다. 그런 다음, 결과 레코드 수를 각 하위 쿼리에서 동시에 가져옵니다.

예시:

```
Domo_read = glueContext.create_dynamic_frame.from_options(
    connection_type="domo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "dataset",
        "API_VERSION": "v1",
        "NUM_PARTITIONS": "2"
    }
```

# Domo 연결 옵션
<a name="domo-connection-options"></a>

다음은 Domo의 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Domo에서의 객체 이름.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용하려는 Domo Rest API 버전.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.

# Domo 제한 사항
<a name="domo-connection-limitations"></a>

다음은 Domo의 제한 사항 또는 참고 사항입니다.
+ SDK 제한으로 인해 ‘\$1’로 시작하는 쿼리 가능한 필드(예: \$1BATCH\$1ID )에 대해 필터링이 예상대로 작동하지 않습니다.
+ API 제한으로 인해 입력한 날짜 이전의 날짜에 필터링이 작동합니다. 이는 증분 풀에도 영향을 미칩니다. 이 제한을 해결하려면 UTC 시간대에 따라 날짜를 선택하여 필요한 날짜에 대한 데이터를 가져옵니다.