

# Google Ads에 연결
<a name="connecting-to-googleads"></a>

 Google Ads API는 대규모 또는 복잡한 Google Ads 계정 및 캠페인을 관리하는 데 사용되는 Google Ads에 대한 프로그래밍 방식 인터페이스입니다. Google Ads 사용자인 경우 Google Ads 계정에 AWS Glue를 연결할 수 있습니다. 그런 다음, Google Ads를 ETL 작업에서의 데이터 소스로 사용할 수 있습니다. 이러한 작업을 실행하여 Google Ads 및 AWS 서비스 또는 기타 지원되는 애플리케이션 간에 데이터를 전송합니다.

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

# Google Ads의 AWS Glue 지원
<a name="googleads-support"></a>

AWS Glue는 다음과 같이 Google Ads를 지원합니다.

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

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

**지원되는 Google Ads API 버전**  
v18

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="googleads-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 Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Google Ads 구성
<a name="googleads-configuring"></a>

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

## 최소 요구 사항
<a name="googleads-configuring-min-requirements"></a>
+  이메일 및 암호가 설정된 Google Ads 계정이 있습니다. 계정 생성에 대한 자세한 내용은 [Google Ads 계정 생성](googleads-create-account.md)을 참조하세요.
+  API 액세스에 대해 Google Ads 계정이 활성화되어 있습니다. Google Ads API는 모두 추가 비용 없이 사용 가능합니다.
+  Google Ads 계정을 사용하면 연결된 앱을 설치할 수 있습니다. 이 기능에 대한 액세스 권한이 없는 경우 Google Ads 관리자에게 문의하세요.

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

# Google Ads 연결 구성
<a name="googleads-configuring-connections"></a>

 Google Ads는 OAuth2에 대한 `AUTHORIZATION_CODE` 권한 부여 유형을 지원합니다.

 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 '3각' OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다. AWS Glue 콘솔은 사용자를 Google Ads로 리디렉션합니다. 사용자가 로그인하고 Google Ads 인스턴스에 액세스하도록 요청된 권한을 AWS Glue에 허용해야 합니다.

 사용자는 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Google Ads에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 Google Ads로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.

 이 권한 부여 유형은 새로 고침 토큰과 액세스 토큰을 생성합니다. 액세스 토큰은 수명이 짧으며 새로 고침 토큰을 사용하여 사용자 상호 작용 없이 자동으로 새로 고칠 수 있습니다.

 자세한 내용은 [권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성의 퍼블릭 Google Ads 설명서](https://developers.google.com/workspace/guides/create-credentials)를 참조하세요.

Google Ads 연결을 구성하는 방법:

1.  AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성하세요. AWS Glue에서 각 연결에 대한 보안 암호를 생성해야 합니다.

   1.  AuthorizationCode 권한 부여 유형의 경우: 
      +  고객 관리형 연결된 앱의 경우 - 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.

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

   1. **연결 유형**을 선택할 때 Google Ads를 선택합니다.

   1. 연결하려는 Facebook Ads의 `developer token`을 제공합니다.

   1. 관리자로 로그인하려는 경우 Google Ads의 `MANAGER ID`를 제공합니다.

   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`을 읽을 수 있는 권한을 부여합니다.

# Google Ads 엔터티에서 읽기
<a name="googleads-reading-from-entities"></a>

 **사전 조건** 
+  읽으려는 Google Ads 객체. 사용 가능한 엔터티를 확인하려면 아래 지원되는 엔터티 테이블을 참조하세요.

 **지원되는 엔터티** 


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 광고 그룹 광고 | 예 | 예 | 예 | 아니요 | 예 | 
| 광고 그룹 | 예 | 예 | 예 | 아니요 | 예 | 
| 캠페인 예산 | 예 | 예 | 예 | 예 | 예 | 
| 계정 예산 | 예 | 아니요 | 예 | 예 | 아니요 | 
| 캠페인 | 예 | 예 | 예 | 예 | 예 | 
| Account | 예 | 아니요 | 예 | 아니요 | 아니요 | 

 **예제** 

```
googleAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googleads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "campaign-3467***",
        "API_VERSION": "v16"
    }
```

 **Google Ads 엔터티 및 필드 세부 정보** 


| 개체 | 필드 | 데이터 형식 | 지원되는 연산자 | 
| --- | --- | --- | --- | 
| Account | resourceName | String | \$1=, = | 
| Account | callReportingEnabled | 불 | \$1=, = | 
| Account | callConversionReportingEnabled | 불 | \$1=, = | 
| Account | callConversionAction | String | \$1=, = | 
| Account | conversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | crossAccountConversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | payPerConversionEligibilityFailureReasons | 나열 |  | 
| Account | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | currencyCode | String | \$1=, =, LIKE | 
| Account | timeZone | String | \$1=, =, LIKE | 
| Account | autoTaggingEnabled | 불 | \$1=, = | 
| Account | hasPartnersBadge | 불 | \$1=, = | 
| Account | manager | 불 | \$1=, = | 
| Account | testAccount | 불 | \$1=, = | 
| Account | date | 날짜 | BETWEEN, =, <, >, <=, >= | 
| Account | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | acceptedCustomerDataTerms | 불 |  | 
| Account | conversionTrackingStatus | String | \$1=, =, LIKE | 
| Account | enhancedConversionsForLeadsEnabled | 불 |  | 
| Account | googleAdsConversionCustomer | String |  | 
| Account | status | String | \$1=, = | 
| Account | allConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| Account | allConversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| Account | conversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| Account | conversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| Account | valuePerAllConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| Account | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | invalidClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | costPerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| Account | costPerConversion | 배정밀도 실수 | \$1=, =, <, > | 
| Account | conversions | 배정밀도 실수 | \$1=, =, <, > | 
| Account | absoluteTopImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| Account | impressions | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | topImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| Account | averageCpc | 배정밀도 실수 | \$1=, =, <, > | 
| Account | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | averageCost | 배정밀도 실수 | \$1=, =, <, > | 
| Account | ctr | 배정밀도 실수 | \$1=, =, <, > | 
| Account | activeViewCtr | 배정밀도 실수 | \$1=, =, <, > | 
| Account | searchImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| Account | conversionAction | String | \$1=, = | 
| Account | conversionActionCategory | String | \$1=, = | 
| Account | conversionActionName | String | \$1=, =, LIKE | 
| 계정 예산 | resourceName | String | \$1=, = | 
| 계정 예산 | status | String | \$1=, = | 
| 계정 예산 | proposedEndTimeType | String | \$1=, = | 
| 계정 예산 | approvedEndTimeType | String | \$1=, = | 
| 계정 예산 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 계정 예산 | billingSetup | String | \$1=, = | 
| 계정 예산 | name | String | \$1=, =, LIKE | 
| 계정 예산 | approvedStartDateTime |  DateTime | BETWEEN, =, <, >, <=, >= | 
| 계정 예산 | proposedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 계정 예산 | approvedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 계정 예산 | adjustedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 계정 예산 | amountServedMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | resourceName | String | \$1=, =, LIKE | 
| 광고 그룹 | status | String | \$1=, =, LIKE | 
| 광고 그룹 | type | String | \$1=, =, LIKE | 
| 광고 그룹 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | name | String | \$1=, =, LIKE | 
| 광고 그룹 | campaign | String | \$1=, = | 
| 광고 그룹 | cpcBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | targetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | cpmBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | cpvBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | targetCpmMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | effectiveTargetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | date | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 광고 그룹 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | useAudienceGrouped | 불 | \$1=, = | 
| 광고 그룹 | effectiveCpcBidMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | allConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | allConversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | conversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | conversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | valuePerAllConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | valuePerConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | averageCost | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | costPerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | costPerConversion | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | averagePageViews | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | allConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | averageCpc | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | absoluteTopImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | impressions | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 | topImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | activeViewCtr | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | ctr | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | searchTopImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | searchImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | searchAbsoluteTopImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | relativeCtr | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 | conversionAction | String | \$1=, = | 
| 광고 그룹 | conversionActionCategory | String | \$1=, = | 
| 광고 그룹 | conversionActionName | String | \$1=, =, LIKE | 
| 광고 그룹 | updateMask | String |  | 
| 광고 그룹 | 생성 | Struct |  | 
| 광고 그룹 | 업데이트 | Struct |  | 
| 광고 그룹 | primaryStatus | String | \$1=, = | 
| 광고 그룹 | primaryStatusReasons | 나열 |  | 
| 광고 그룹 광고 | resourceName | String | \$1=, = | 
| 광고 그룹 광고 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | status | String | \$1=, = | 
| 광고 그룹 광고 | labels | 나열 |  | 
| 광고 그룹 광고 | adGroup | String | \$1=, = | 
| 광고 그룹 광고 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | approvalStatus | String | \$1=, = | 
| 광고 그룹 광고 | reviewStatus | String | \$1=, = | 
| 광고 그룹 광고 | adStrength | String | \$1=, = | 
| 광고 그룹 광고 | type | String | \$1=, = | 
| 광고 그룹 광고 | businessName | String | \$1=, =, LIKE | 
| 광고 그룹 광고 | date | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 광고 그룹 광고 | allConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | allConversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | conversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | conversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | valuePerAllConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | valuePerConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | averageCost | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | costPerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | costPerConversion | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | averagePageViews | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | allConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | averageCpc | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | topImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | impressions | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 광고 그룹 광고 | absoluteTopImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | activeViewCtr | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | ctr | 배정밀도 실수 | \$1=, =, <, > | 
| 광고 그룹 광고 | conversionAction | String | \$1=, = | 
| 광고 그룹 광고 | conversionActionCategory | String | \$1=, = | 
| 광고 그룹 광고 | conversionActionName | String | \$1=, =, LIKE | 
| 광고 그룹 광고 | updateMask | String |  | 
| 광고 그룹 광고 | 생성 | Struct |  | 
| 광고 그룹 광고 | 업데이트 | Struct |  | 
| 광고 그룹 광고 | policyValidationParameter | Struct |  | 
| 광고 그룹 광고 | primaryStatus | String | \$1=, = | 
| 광고 그룹 광고 | primaryStatusReasons | 나열 |  | 
| 캠페인 | resourceName | String | \$1=, = | 
| 캠페인 | status | String | \$1=, = | 
| 캠페인 | baseCampaign | String | \$1=, = | 
| 캠페인 | name | String | \$1=, =, LIKE | 
| 캠페인 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | campaignBudget | String | \$1=, =, LIKE | 
| 캠페인 | startDate | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 | endDate | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 | adServingOptimizationStatus | String | \$1=, = | 
| 캠페인 | advertisingChannelType | String | \$1=, = | 
| 캠페인 | advertisingChannelSubType | String | \$1=, = | 
| 캠페인 | experimentType | String | \$1=, = | 
| 캠페인 | servingStatus | String | \$1=, = | 
| 캠페인 | biddingStrategyType | String | \$1=, = | 
| 캠페인 | domainName | String | \$1=, =, LIKE | 
| 캠페인 | languageCode | String | \$1=, =, LIKE | 
| 캠페인 | useSuppliedUrlsOnly | 불 | \$1=, = | 
| 캠페인 | positiveGeoTargetType | String | \$1=, = | 
| 캠페인 | negativeGeoTargetType | String | \$1=, = | 
| 캠페인 | paymentMode | String | \$1=, = | 
| 캠페인 | optimizationGoalTypes | 나열 |  | 
| 캠페인 | date | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 | averageCost | 배정밀도 실수 |  | 
| 캠페인 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | impressions | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | useAudienceGrouped | 불 | \$1=, = | 
| 캠페인 | activeViewMeasurableCostMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | costPerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | costPerConversion | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | invalidClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | publisherPurchasedClicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | averagePageViews | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 | allConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | allConversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | conversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | conversionsValueByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | valuePerAllConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | valuePerConversionsByConversionDate | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | allConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | absoluteTopImpressionPercentage | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | searchAbsoluteTopImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | averageCpc | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | searchImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | searchTopImpressionShare | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | activeViewCtr | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | ctr | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | relativeCtr | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 | updateMask | String |  | 
| 캠페인 | 생성 | Struct |  | 
| 캠페인 | 업데이트 | Struct |  | 
| 캠페인 예산 | resourceName | String | \$1=, = | 
| 캠페인 예산 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | status | String | \$1=, = | 
| 캠페인 예산 | deliveryMethod | String | \$1=, = | 
| 캠페인 예산 | 기간 | String | \$1=, = | 
| 캠페인 예산 | type | String | \$1=, = | 
| 캠페인 예산 | name | String | \$1=, =, LIKE | 
| 캠페인 예산 | amountMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | explicitlyShared | 불 | \$1=, = | 
| 캠페인 예산 | referenceCount | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | hasRecommendedBudget | 불 | \$1=, = | 
| 캠페인 예산 | date | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 예산 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | startDate | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 예산 | endDate | 날짜 | BETWEEN, =, <, >, <=, >= | 
| 캠페인 예산 | maximizeConversionValueTargetRoas | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | maximizeConversionsTargetCpaMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | selectiveOptimizationConversionActions | String |  | 
| 캠페인 예산 | averageCost | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | costPerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | costPerConversion | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | allConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | valuePerAllConversions | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | averageCpc | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | impressions | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 캠페인 예산 | ctr | 배정밀도 실수 | \$1=, =, <, > | 
| 캠페인 예산 | updateMask | String |  | 
| 캠페인 예산 | 생성 | Struct |  | 
| 캠페인 예산 | 업데이트 | Struct |  | 

 **분할 쿼리** 

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

   날짜의 경우 Spark SQL 쿼리에 사용된 Spark 날짜 형식을 허용합니다. 유효한 값의 예제: `"2024-02-06"`.
+  `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(경계 제외).
+  `NUM_PARTITIONS`: 파티션 수.

 엔터티 수준의 분할 필드 지원 세부 정보는 다음 표에 캡처되어 있습니다.


| Entity Name | 분할 필드 | 데이터 형식 | 
| --- | --- | --- | 
| 광고 그룹 광고 | date | 날짜 | 
| 광고 그룹 | date | 날짜 | 
| 캠페인 | date | 날짜 | 
| 캠페인 예산 | date | 날짜 | 

 **예제** 

```
googleads_read = glueContext.create_dynamic_frame.from_options(
    connection_type="googleads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "campaign-3467***",
        "API_VERSION": "v16",
        "PARTITION_FIELD": "date"
        "LOWER_BOUND": "2024-01-01"
        "UPPER_BOUND": "2024-06-05"
        "NUM_PARTITIONS": "10"
    }
)
```

# Google Ads 연결 옵션
<a name="googleads-connection-options"></a>

다음은 Google Ads의 연결 옵션입니다.
+  `ENTITY_NAME`(문자열) - (필수) 읽기/쓰기에 사용됩니다. Google Ads에서의 객체 이름입니다.
+  `API_VERSION`(문자열) - (필수) 읽기/쓰기에 사용됩니다. 사용할 Snapchat Ads Rest API 버전입니다. 예: v16.
+  `DEVELOPER_TOKEN`(문자열) - (필수) 읽기/쓰기에 사용됩니다. API에 요청하는 개발자 또는 애플리케이션을 인증하는 데 필요합니다.
+  `MANAGER_ID`(문자열) - 읽기/쓰기에 사용됩니다. 여러 Google Ads 계정을 관리할 수 있는 고유 ID입니다. 권한 있는 관리자의 고객 ID입니다. 관리자 계정을 통해 고객 계정에 액세스하는 경우 `MANAGER_ID`가 필요합니다. 자세한 내용은 [login-customer-id](https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid)를 참조하세요.
+  `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+  `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+  `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+  `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+  `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+  `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+  `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.

# Google Ads 계정 생성
<a name="googleads-create-account"></a>

1.  사용자 자격 증명을 사용하여 [Google Ads 개발자 계정](https://console.cloud.google.com)으로 로그인하고 \$1MyProject로 이동하세요.  
![\[스크린샷은 Google Ads 개발자 계정에 로그인하는 시작 화면을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-log-in-developer-account.png)

1.  **New Project**를 선택하고 등록된 애플리케이션이 없는 경우 Google 프로젝트를 생성하는 데 필요한 정보를 제공하세요.  
![\[스크린샷은 프로젝트 선택 페이지를 보여줍니다. 오른쪽 상단에서 새 프로젝트를 선택하세요.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-new-project.png)  
![\[스크린샷은 프로젝트 이름을 입력하고 위치를 선택하는 새 프로젝트 창을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-new-project-name-location.png)

1.  **Navigation Tab**, **API and Setting**, **Create Client Id** 및 **Create ClientSecret**을 차례로 선택하세요. 그러면 AWS Glue 및 GoogleAds 간 연결을 생성하는 데 추가 구성이 필요합니다. 자세한 내용은 [API credentials](https://console.cloud.google.com/apis/credentials)를 참조하세요.  
![\[스크린샷은 API 및 서비스 구성 페이지를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-apis-and-services.png)

1.  **CREATE CREDENTIALS**를 선택하고 **OAuth client ID**를 선택하세요.  
![\[스크린샷은 자격 증명 생성 드롭다운과 Oauth 클라이언트 ID 옵션이 강조 표시된 API 및 서비스 구성 페이지를 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-create-credentials.png)

1.  **Application type**을 **Web application**으로 선택하세요.  
![\[스크린샷은 OAuth 클라이언트 ID 생성 페이지 및 웹 애플리케이션에 해당하는 애플리케이션 유형을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-oauth-client-id-application-type.png)

1.  **Authorised redirect URIs**에서 OAuth 리디렉션 URI를 추가하고 **Create**를 선택하세요. 필요한 경우 여러 리디렉션 URI를 추가할 수 있습니다.  
![\[스크린샷은 Create OAuth client ID 페이지와 Authorised redirect URIs 섹션을 보여줍니다. 여기에서 URI를 추가하고, 필요한 경우 ADD URI를 선택합니다. 완료되면 CREATE를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-oauth-redirect-uris.png)

1.  AWS Glue 및 Google Ads 간 연결을 생성할 때 **Client Id** 및 **Client Secret**이 생성됩니다.  
![\[스크린샷은 Create OAuth client ID 페이지와 Authorised redirect URIs 섹션을 보여줍니다. 여기에서 URI를 추가하고, 필요한 경우 ADD URI를 선택합니다. 완료되면 CREATE를 선택합니다.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-oauth-client-created.png)

1.  애플리케이션 요구 사항에 따라 범위를 추가하고 **OAuth consent screen**을 선택한 다음 필요한 정보를 제공하고 요구 사항에 따라 범위를 추가하세요.  
![\[스크린샷은 선택한 범위 업데이트 페이지를 보여줍니다. 필요에 따라 범위를 선택하세요.\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/images/google-ads-selected-scopes.png)

# 제한 사항
<a name="googleads-connector-limitations"></a>

다음은 Google Ads 커넥터의 제한 사항입니다.
+ `MANAGER_ID`는 연결을 생성하는 경우 선택적 입력입니다. 그러나 특정 관리자의 기반이 되는 고객에게 액세스하려는 경우 `MANAGER_ID`는 필수 입력입니다. 아래 표에서는 연결에서 `MANAGER_ID`의 포함 여부에 따른 액세스 제한 사항을 설명합니다.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/googleads-connector-limitations.html)
+ 관리자 계정을 객체로 선택하면 `Account`만 하위 객체로 표시됩니다. Google Ads 커넥터에서 캠페인, 광고 등과 같은 엔터티는 관리자 계정이 아닌 개별 클라이언트 계정을 기반으로 검색됩니다.
+ 관리자 계정에 대한 지표는 검색할 수 없습니다. 대신 개별 클라이언트 계정에 대한 지표를 검색할 수 있습니다.
+  각 계정에는 활성 캠페인과 일시 중지된 캠페인을 모두 포함하여 최대 10,000개의 캠페인이 있을 수 있습니다. 자세한 내용은 [Campaign per account](https://support.google.com/google-ads/answer/6372658)를 참조하세요.
+  보고서를 생성할 때 표시할 특정 지표를 선택하는 경우 선택한 지표가 모두 0인 행은 반환되지 않습니다. 자세한 내용은 [Zero Metrics](https://developers.google.com/google-ads/api/docs/reporting/zero-metrics?hl=en#exclude_zero_metrics_by_segmenting)를 참조하세요.
+  다음 필드의 경우 전체 매핑 흐름은 계정, 광고 그룹 및 광고 그룹 광고 엔터티, 특히 conversionAction, conversionActionCategory, conversionActionName에 대해서는 작동하지 않습니다. 자세한 내용은 [Segment and Metrics](https://developers.google.com/google-ads/api/docs/reporting/segmentation?hl=en#selectability_between_segments_and_metrics)를 참조하세요.
+ `segments.date` 필드를 선택하면 날짜 범위 필터가 필수입니다.