

# 连接到 Google Ads
<a name="connecting-to-googleads"></a>

 Google Ads API 是 Google Ads 的编程接口，用于管理大型或复杂的 Google Ads 账户和广告活动。如果是 Google Ads 用户，则可将 AWS Glue 连接到 Google Ads 账户。然后，可以使用 Google Ads 作为 ETL 作业中的数据来源。通过运行这些作业，可在 Google Ads 与 AWS 服务或其他受支持的应用程序之间传输数据。

**Topics**
+ [AWS Glue 对 Google Ads 的支持](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)

# AWS Glue 对 Google Ads 的支持
<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 管理控制台时，授予对 AWS Glue 资源的完全访问权限。如果遵循此策略中指定的资源的命名约定，则用户具有完全控制台功能。此策略通常附加到 AWS Glue 控制台的用户。

# 配置 Google Ads
<a name="googleads-configuring"></a>

您必须满足以下要求，才能使用 AWS Glue 从 Google Ads 传出数据：

## 最低要求
<a name="googleads-configuring-min-requirements"></a>
+  您拥有一个 Google Ads 账户，以及电子邮件地址和密码。有关创建账户的更多信息，请参阅 [Creating a Google Ads account](googleads-create-account.md)。
+  您的 Google Ads 账户已启用 API 访问权限。对 Google Ads API 的所有使用均无需额外付费。
+  您的 Google Ads 账户允许您安装连接的应用程序。如果您无法使用此功能，请联系您的 Google Ads 管理员。

 如果满足这些要求，就可以将 AWS Glue 连接到 Google Ads 账户。

# 配置 Google Ads 连接
<a name="googleads-configuring-connections"></a>

 Google Ads 支持 OAuth2 的 `AUTHORIZATION_CODE` 授权类型。

 此授权类型被视为“三足型”OAuth，因为它依赖于将用户重定向到第三方授权服务器来对用户进行身份验证。它用于通过 AWS Glue 控制台创建连接。AWS Glue 控制台会将用户重定向到 Google Ads，用户必须登录并向 AWS Glue 授予所请求的权限，以便访问其 Google Ads 实例。

 用户可以选择在 Google Ads 中创建自己的关联应用程序，并在通过 AWS Glue 控制台创建连接时，提供自己的客户端 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. 提供想要连接到的 Google 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 | 字符串 | \$1=, = | 
| Account | callReportingEnabled | 布尔值 | \$1=, = | 
| Account | callConversionReportingEnabled | 布尔值 | \$1=, = | 
| Account | callConversionAction | 字符串 | \$1=, = | 
| Account | conversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | crossAccountConversionTrackingId | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | payPerConversionEligibilityFailureReasons | 列表 |  | 
| Account | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| Account | currencyCode | 字符串 | \$1=, =, LIKE | 
| Account | timeZone | 字符串 | \$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 | 字符串 | \$1=, =, LIKE | 
| Account | enhancedConversionsForLeadsEnabled | 布尔值 |  | 
| Account | googleAdsConversionCustomer | 字符串 |  | 
| Account | 状态 | 字符串 | \$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 | 展示 | 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 | 字符串 | \$1=, = | 
| Account | conversionActionCategory | 字符串 | \$1=, = | 
| Account | conversionActionName | 字符串 | \$1=, =, LIKE | 
| 账户预算 | resourceName | 字符串 | \$1=, = | 
| 账户预算 | 状态 | 字符串 | \$1=, = | 
| 账户预算 | proposedEndTimeType | 字符串 | \$1=, = | 
| 账户预算 | approvedEndTimeType | 字符串 | \$1=, = | 
| 账户预算 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 账户预算 | billingSetup | 字符串 | \$1=, = | 
| 账户预算 | 名称 | 字符串 | \$1=, =, LIKE | 
| 账户预算 | approvedStartDateTime |  日期时间 | BETWEEN, =, <, >, <=, >= | 
| 账户预算 | proposedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 账户预算 | approvedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 账户预算 | adjustedSpendingLimitMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 账户预算 | amountServedMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组 | resourceName | 字符串 | \$1=, =, LIKE | 
| 广告组 | 状态 | 字符串 | \$1=, =, LIKE | 
| 广告组 | type | 字符串 | \$1=, =, LIKE | 
| 广告组 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组 | 名称 | 字符串 | \$1=, =, LIKE | 
| 广告组 | 市场活动 | 字符串 | \$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=, =, <, > | 
| 广告组 | 展示 | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组 | topImpressionPercentage | 双精度 | \$1=, =, <, > | 
| 广告组 | activeViewCtr | 双精度 | \$1=, =, <, > | 
| 广告组 | ctr | 双精度 | \$1=, =, <, > | 
| 广告组 | searchTopImpressionShare | 双精度 | \$1=, =, <, > | 
| 广告组 | searchImpressionShare | 双精度 | \$1=, =, <, > | 
| 广告组 | searchAbsoluteTopImpressionShare | 双精度 | \$1=, =, <, > | 
| 广告组 | relativeCtr | 双精度 | \$1=, =, <, > | 
| 广告组 | conversionAction | 字符串 | \$1=, = | 
| 广告组 | conversionActionCategory | 字符串 | \$1=, = | 
| 广告组 | conversionActionName | 字符串 | \$1=, =, LIKE | 
| 广告组 | updateMask | 字符串 |  | 
| 广告组 | 创建 | 结构体 |  | 
| 广告组 | 更新 | 结构体 |  | 
| 广告组 | primaryStatus | 字符串 | \$1=, = | 
| 广告组 | primaryStatusReasons | 列表 |  | 
| 广告组广告 | resourceName | 字符串 | \$1=, = | 
| 广告组广告 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组广告 | 状态 | 字符串 | \$1=, = | 
| 广告组广告 | labels | 列表 |  | 
| 广告组广告 | adGroup | 字符串 | \$1=, = | 
| 广告组广告 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组广告 | approvalStatus | 字符串 | \$1=, = | 
| 广告组广告 | reviewStatus | 字符串 | \$1=, = | 
| 广告组广告 | adStrength | 字符串 | \$1=, = | 
| 广告组广告 | type | 字符串 | \$1=, = | 
| 广告组广告 | businessName | 字符串 | \$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=, =, <, > | 
| 广告组广告 | 展示 | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 广告组广告 | absoluteTopImpressionPercentage | 双精度 | \$1=, =, <, > | 
| 广告组广告 | activeViewCtr | 双精度 | \$1=, =, <, > | 
| 广告组广告 | ctr | 双精度 | \$1=, =, <, > | 
| 广告组广告 | conversionAction | 字符串 | \$1=, = | 
| 广告组广告 | conversionActionCategory | 字符串 | \$1=, = | 
| 广告组广告 | conversionActionName | 字符串 | \$1=, =, LIKE | 
| 广告组广告 | updateMask | 字符串 |  | 
| 广告组广告 | 创建 | 结构体 |  | 
| 广告组广告 | 更新 | 结构体 |  | 
| 广告组广告 | policyValidationParameter | 结构体 |  | 
| 广告组广告 | primaryStatus | 字符串 | \$1=, = | 
| 广告组广告 | primaryStatusReasons | 列表 |  | 
| 活动 | resourceName | 字符串 | \$1=, = | 
| 活动 | 状态 | 字符串 | \$1=, = | 
| 活动 | baseCampaign | 字符串 | \$1=, = | 
| 活动 | 名称 | 字符串 | \$1=, =, LIKE | 
| 活动 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动 | campaignBudget | 字符串 | \$1=, =, LIKE | 
| 活动 | startDate | 日期 | BETWEEN, =, <, >, <=, >= | 
| 活动 | endDate | 日期 | BETWEEN, =, <, >, <=, >= | 
| 活动 | adServingOptimizationStatus | 字符串 | \$1=, = | 
| 活动 | advertisingChannelType | 字符串 | \$1=, = | 
| 活动 | advertisingChannelSubType | 字符串 | \$1=, = | 
| 活动 | experimentType | 字符串 | \$1=, = | 
| 活动 | servingStatus | 字符串 | \$1=, = | 
| 活动 | biddingStrategyType | 字符串 | \$1=, = | 
| 活动 | domainName | 字符串 | \$1=, =, LIKE | 
| 活动 | languageCode | 字符串 | \$1=, =, LIKE | 
| 活动 | useSuppliedUrlsOnly | 布尔值 | \$1=, = | 
| 活动 | positiveGeoTargetType | 字符串 | \$1=, = | 
| 活动 | negativeGeoTargetType | 字符串 | \$1=, = | 
| 活动 | paymentMode | 字符串 | \$1=, = | 
| 活动 | optimizationGoalTypes | 列表 |  | 
| 活动 | date | 日期 | BETWEEN, =, <, >, <=, >= | 
| 活动 | averageCost | 双精度 |  | 
| 活动 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动 | costMicros | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动 | 展示 | 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 | 字符串 |  | 
| 活动 | 创建 | 结构体 |  | 
| 活动 | 更新 | 结构体 |  | 
| 活动预算 | resourceName | 字符串 | \$1=, = | 
| 活动预算 | id | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动预算 | 状态 | 字符串 | \$1=, = | 
| 活动预算 | deliveryMethod | 字符串 | \$1=, = | 
| 活动预算 | 周期 | 字符串 | \$1=, = | 
| 活动预算 | type | 字符串 | \$1=, = | 
| 活动预算 | 名称 | 字符串 | \$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 | 字符串 |  | 
| 活动预算 | averageCost | 双精度 | \$1=, =, <, > | 
| 活动预算 | costPerAllConversions | 双精度 | \$1=, =, <, > | 
| 活动预算 | costPerConversion | 双精度 | \$1=, =, <, > | 
| 活动预算 | videoViews | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动预算 | clicks | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动预算 | allConversions | 双精度 | \$1=, =, <, > | 
| 活动预算 | valuePerAllConversions | 双精度 | \$1=, =, <, > | 
| 活动预算 | averageCpc | 双精度 | \$1=, =, <, > | 
| 活动预算 | 展示 | BigInteger | BETWEEN, =, \$1=, <, >, <=, >= | 
| 活动预算 | ctr | 双精度 | \$1=, =, <, > | 
| 活动预算 | updateMask | 字符串 |  | 
| 活动预算 | 创建 | 结构体 |  | 
| 活动预算 | 更新 | 结构体 |  | 

 **对查询进行分区** 

 如果您想在 Spark 中利用并发，可以提供附加 Spark 选项 `PARTITION_FIELD`、`LOWER_BOUND`、`UPPER_BOUND` 和 `NUM_PARTITIONS`。使用这些参数，原始查询将被拆分为 `NUM_PARTITIONS` 个子查询，这些子查询可以由 Spark 任务同时执行。
+  `PARTITION_FIELD`：用于对查询进行分区的字段的名称。
+  `LOWER_BOUND`：所选分区字段的包含下限值。

   对于日期，我们接受 Spark SQL 查询中使用的 Spark 日期格式。有效值示例：`"2024-02-06"`。
+  `UPPER_BOUND`：所选分区字段的排除上限值。
+  `NUM_PARTITIONS`：分区的数量。

 基于实体的分区字段支持详细信息如下表中所示。


| 实体名称 | 分区字段 | 数据类型 | 
| --- | --- | --- | 
| 广告组广告 | 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`（字符串）–（必填）用于读/写。要使用的 Google Ads Rest API 版本。示例：v16。
+  `DEVELOPER_TOKEN`（字符串）–（必填）用于读/写。对发出 API 请求的开发人员或应用程序进行身份验证时需要用到该项。
+  `MANAGER_ID`（字符串）：用于读取/写入。允许管理多个 Google Ads 账户的唯一标识符。这是授权管理员的客户 ID。如果通过管理员账户访问客户账户，则需要 `MANAGER_ID`。有关更多信息，请参阅 [login-customer-id](https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid)。
+  `SELECTED_FIELDS`（列表<字符串>）–默认：empty(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/zh_cn/glue/latest/dg/images/google-ads-log-in-developer-account.png)

1.  如果您还没有注册任何应用程序，请选择**新建项目**，然后提供创建 Google 项目所需的信息。  
![\[屏幕截图显示了“选择项目”页面。选择右上角的“新建项目”。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-new-project.png)  
![\[屏幕截图显示了“新建项目”窗口，用于输入项目名称并选择位置。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-new-project-name-location.png)

1.  选择**导航**选项卡，然后选择 **API 和设置**，然后选择**创建客户端 Id** 和**客户密钥**，这需要进一步配置才能在 AWS Glue 与 Google Ads 之间建立连接。有关更多信息，请参阅 [API credentials](https://console.cloud.google.com/apis/credentials)。  
![\[屏幕截图显示了 API 和服务配置页面。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-apis-and-services.png)

1.  选择**创建凭证**，然后选择 **OAuth 客户端 ID**。  
![\[屏幕截图显示了 API 和服务配置页面，其中突出显示了“创建凭证”下拉列表和“Oauth 客户端 ID”选项。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-create-credentials.png)

1.  对于**应用程序类型**，选择 **Web 应用程序**。  
![\[屏幕截图显示了“创建 OAuth 客户端 ID”页面，并且对于“应用程序类型”选择了 “Web 应用程序”。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-oauth-client-id-application-type.png)

1.  在**授权重定向 URI** 下，添加 OAuth 重定向 URI，然后选择**创建**。您可以根据需要添加多个重定向 URI。  
![\[屏幕截图显示的是“创建 OAuth 客户端 ID”页面和“授权重定向 URI”部分。在此处添加 URI，并根据需要选择“添加 URI”。操作完成后选择“创建”。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-oauth-redirect-uris.png)

1.  您的**客户端 Id** 和**客户端密钥**将在创建 AWS Glue 与 Google Ads 之间的连接时生成。  
![\[屏幕截图显示的是“创建 OAuth 客户端 ID”页面和“授权重定向 URI”部分。在此处添加 URI，并根据需要选择“添加 URI”。操作完成后选择“创建”。\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/images/google-ads-oauth-client-created.png)

1.  根据应用程序需求添加范围，选择 **OAuth 同意屏幕**并提供所需的信息，然后根据要求添加范围。  
![\[屏幕截图显示了“更新选定范围”页面。根据需要选择范围。\]](http://docs.aws.amazon.com/zh_cn/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/zh_cn/glue/latest/dg/googleads-connector-limitations.html)
+ 选择管理员账户作为对象时，只会显示 `Account` 为子对象。在 Google Ads 连接器中，将根据各个客户端账户而不是管理员账户来检索活动、广告等实体。
+ 虽然无法检索管理员账户的指标，但可以检索各个客户端账户的指标。
+  每个账户可以包含最多 10000 个活动，包括处于活动状态和暂停状态的活动。有关更多信息，请参阅[每个账户的活动](https://support.google.com/google-ads/answer/6372658)。
+  创建报告时，如果您选择要显示某些指标，则不会返回所选指标全部为零的任何行。有关更多信息，请参阅 [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` 字段时，必须使用日期范围筛选器。