使用临时 ID

临时资源名称

BatchJobService 支持临时资源名称,可在同一批处理作业中的后续操作中引用这些名称,包括通过 sequence_token 上传的多个连续 AddBatchJobOperations 请求。这样,您就可以在分配服务器端 ID 之前,在单个批量作业中创建广告系列及其依赖的广告组、广告和条件。在以下一般规则和示例中,单个请求是指整个 BatchJob 的所有 AddBatchJobOperations 上传内容。

为此,您可以指定新资源的 resource_name 以使用负 ID。例如,假设您创建了一个广告系列,并将其资源名称指定为 customers/<YOUR_CUSTOMER_ID>/campaigns/-1。在后续操作中创建广告组时,您可以使用该资源名称引用该广告组,并且您指定的 -1 将自动替换为所创建广告系列的实际 ID。

使用临时资源名称时,请注意以下事项:

  • 临时资源名称只能在资源中定义后使用。在以下示例中,广告组操作必须出现在操作列表中的广告系列操作之后。
  • 临时资源名称不会在作业或变异请求之间保留。 如需引用在之前的作业或 mutate 请求中创建的资源,请使用其真实的资源名称。
  • 对于单个作业或 mutate 请求,每个临时资源名称都必须使用唯一的负数,即使它们来自不同的资源类型也是如此。如果在单个作业或 mutate 请求中重复使用临时 ID,则会返回错误。

示例

假设您想在单个 API 请求中添加一个广告系列、一个广告组和一个广告。您将创建一个与以下内容类似的请求结构:

mutate_operations: [
  {
    campaign_operation: {
      create: {
        resource_name: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1",
        ...
      }
    }
  },
  {
    ad_group_operation: {
      create: {
        resource_name: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2",
        campaign: "customers/<YOUR_CUSTOMER_ID>/campaigns/-1"
        ...
      }
    }
  },
  {
    ad_group_ad_operation: {
      create: {
        ad_group: "customers/<YOUR_CUSTOMER_ID>/adGroups/-2"
        ...
      }
    }
  },
]

由于我们无法重复使用广告系列使用的 -1,因此广告组会使用新的临时 ID。我们还会在创建广告组广告时引用此广告组。广告组本身引用了我们在请求中较早的操作中为广告系列建立的资源名称,而 ad_group_ad_operation 中的 resource_name 是不必要的,因为没有进一步的操作引用它。

批量作业中的错误处理

由于批量作业中的标准操作在启用部分失败的情况下执行(原子子批次中除外),因此,如果具有临时 ID 的父资源未能通过验证,则引用该临时 ID 的任何相关子操作都会失败并显示 NewResourceCreationError.TEMP_ID_RESOURCE_HAD_ERRORS。在同一批量作业中的多个 create 操作中重复使用同一负 ID 会返回 NewResourceCreationError.DUPLICATE_TEMP_IDS。临时 ID 仅在创建资源 (create) 或引用新创建的父资源时有效;例如,在调用 AddBatchJobOperations 时,在 AdGroupCriterionOperation.remove 中传递负临时 ID 会返回 RequestError.RESOURCE_NAME_MALFORMED