Google Merchant Center 转移作业

借助适用于 Google Merchant Center 的 BigQuery Data Transfer Service,您可以自动安排和管理用于 Google Merchant Center 报告数据的周期性加载作业。

支持的报告

适用于 Google Merchant Center 的 BigQuery Data Transfer Service 目前支持以下数据:

产品和产品问题

  • 这包括通过 Feed 或通过 Content API for Shopping 向 Merchant Center 提供的产品数据。它还包括 Google 检测到的产品的商品级别问题。此数据可以在 Google Merchant Center 中进行查看,也可以通过查询 Content API for Shopping 进行查看。

  • 如需了解如何将此数据加载到 BigQuery,请参阅 Google Merchant Center 商品表架构

价格基准

  • 这包括产品级层价格基准数据,其定义与 Google Merchant Center 提供的价格竞争力报告的定义相同。

  • 如需了解如何将此数据加载到 BigQuery,请参阅 Google Merchant Center 价格基准表架构

畅销商品

  • 其中包括关于购物广告和非付费商品详情中最受欢迎的商品和品牌,以及您商品目录中是否存在这些信息的数据。

  • 该数据基于 Google Merchant Center 提供的畅销商品报告

  • 畅销商品报告由以下表组成:

    1. BestSellers_TopProducts_ 是热门产品根据每个国家/地区和 Google 商品类别的排名列表。该表代表所有购物广告和非付费商品详情中来自所有商家的数据。
    2. BestSellers_TopProducts_Inventory_ 是热门商品与您的商品目录之间的映射表。
    3. BestSellers_TopBrands_ 是按国家/地区和 Google 商品类别计算得出的热门品牌的排名列表。它代表来自所有购物广告和非付费商品详情中所有商家的数据。
  • 如需了解如何将畅销商品数据加载到 BigQuery 中,请参阅 Google Merchant Center 热门产品商品目录热门品牌表架构。

适用于 Google Merchant Center 的 BigQuery Data Transfer Service 目前支持以下报告选项:

报告选项 支持
时间表

可配置为每天、每周、每月或自定义。默认情况下,创建转移作业时,将此项设置为每日。传输作业之间的最短间隔为 6 小时。

限制

所有 Merchant Center 转移作业都存在以下限制:

  • 在为商家 ID 创建转移作业后,最长可能需要等待 90 分钟,您的商家帐号的数据才能准备就绪,可进行转移。
  • 您无法配置回填时长上限。目前不支持历史回填。您只能为今天设置回填。

产品和产品问题

  • BigQuery 中的产品和产品问题数据不代表您的商家帐号的实时视图。要查看数据的时间轴,请参阅架构中的 product_data_timestamp 字段。

价格基准

  • 价格基准数据并不代表价格基准的实时视图。要查看数据的时间轴,请参阅价格基准架构中的 price_benchmark_timestamp 字段。
  • 并非所有产品都有价格基准。

畅销商品

  • 并非所有国家/地区都包含排名数据。报告中包含的国家/地区如下:US、DE、FR、UK、NL、JP、AU、CA、SE、IT、ES、CH、DK、CZ、BE 和 RU。
  • 畅销商品数据不代表品牌排名的实时视图。要查看数据的时间轴,请参阅 BestSellers_TopProducts_BestSellers_TopBrands_ 架构中的 rank_timestamp 字段。
  • BestSellers_TopProducts_ 表中仅包含购物广告和非付费商品详情中最受欢迎的商品。
  • BestSellers_TopBrands_ 表中仅包含购物广告和非付费商品详情中最受欢迎的品牌。Products_ 表中可能会有含未映射到 BestSellers_TopBrands_ 表中的任何品牌的 google_brand_id 的行。
  • google_brand_id 字段中的品牌 ID 可能会随时间发生变化,以反映商家和品牌的变化性质。因此,无法保证长时间跟踪一组品牌。
  • 虽然品牌按多种不同类别进行排名,但 Products_ 表中的所有产品均采用叶类别。要加入非叶类别的品牌和产品,请使用 google_product_category_ids 字段(如畅销商品示例查询所示)。

多客户帐号 (MCA) 支持

建议具有多个商家 ID 的现有客户配置父级多客户帐号 (MCA)。 通过配置 MCA,您可以创建单项转移作业来覆盖您所有的商家 ID。

与使用单个商家 ID 相比,使用 Google Merchant Center MCA 具有多项优势:

  • 您无需再管理多个转移作业,即可为多个商家 ID 转移报告数据。
  • 由于所有商家 ID 的数据都存储在同一个表中,编写涉及多个商家 ID 的查询变得容易得多。
  • 使用 MCA 可以缓解潜在的 BigQuery 加载作业配额问题,因为您的所有商家 ID 数据都将加载到同一作业中。

使用 MCA 的一项可能的缺点是后续查询费用有可能较高。由于您的所有数据都存储在同一个表中,检索单个商家 ID 数据的查询仍然必须扫描整个表。

如果使用的是 MCA,则 MCA ID 将在 aggregator_id 下列出,各子帐号将在 merchant_id 下列出。对于不使用 MCA 的帐号,aggregator_id 将设置为 null

准备工作

在创建 Google Merchant Center 转移作业之前,请执行以下操作:

  • 确认您已完成启用 BigQuery Data Transfer Service 所需的所有操作。
  • 创建 BigQuery 数据集以存储 Google Merchant Center 数据。
  • 如果您打算使用经典版 BigQuery 网页界面创建转移作业,请允许显示来自 bigquery.cloud.google.com 的弹出式窗口,这样您才能看到权限窗口。您必须向适用于 Google Merchant Center 的 BigQuery Data Transfer Service 授予管理 Google 购物中的产品详情和帐号的权限。
  • 如果您要设置 Pub/Sub 的转移作业运行通知,必须拥有 pubsub.topics.setIamPolicy 权限。如果您只是要设置电子邮件通知,则无需 Pub/Sub 权限。如需了解详情,请参阅 BigQuery Data Transfer Service 运行通知

所需权限

请确保创建转移作业的人员拥有以下所需权限:

  • BigQuery

    • 创建转移作业所需的 bigquery.transfers.update 权限
    • 针对目标数据集的 bigquery.datasets.update 权限

    预定义 IAM 角色 bigquery.admin 中包含 bigquery.transfers.updatebigquery.datasets.update 权限。如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制参考文档

  • Google Merchant Center

    • 访问转移作业配置中使用的 Google Merchant Center 帐号。您可以点击 Google Merchant Center 界面中的用户部分来验证访问权限。

    • 要访问价格竞争力和畅销商品数据,您必须首先启用“市场洞察”计划

设置 Google Merchant Center 转移作业

为 Google Merchant Center 报告设置数据转移作业需要:

  • 商家 ID多客户帐号 ID:这是 Google Merchant Center 界面左上角部分显示的商家 ID。

如需为 Google Merchant Center 报告创建数据转移作业,请执行以下操作:

控制台

  1. 转到 Cloud Console 中的 BigQuery 页面。

    转到 BigQuery 页面

  2. 点击转移

  3. 点击创建转移作业

  4. 创建转移作业页面上:

    • 来源类型部分的来源中,选择 Google Merchant Center

    • 转移配置名称部分的显示名中,输入转移作业的名称,例如 My Transfer。转移作业名称可以是任何容易辨识的值,方便您以后在需要修改该作业时能轻松识别。

      转移作业名称

    • 时间安排选项部分的时间安排中,点击在设置的时间开始 (Start at a set time)。

      • 重复频率部分,从以下选项中选择转移作业的运行频率。

        • 每日一次(默认值)
        • 每周一次
        • 每月一次
        • 自定义
        • 按需
      • 开始日期和运行时间部分,输入开始转移作业的日期和时间。此值应该与当前世界协调时间 (UTC) 相差至少 90 分钟。如果选择立即开始,则此选项处于停用状态。

        转移作业时间安排

        如果将“时间安排选项”设置为立即开始,则第一次转移作业将立即开始运行,它将失败,并显示以下错误消息:No data to transfer found for the Merchant account. If you have just created this transfer, you may need to wait for up to 90 minutes before the data of your Merchant account are prepared and available for the transfer.如果发生这种情况,请等待 90 分钟,然后为今天设置回填或等到明天进行安排的下一次运行。

    • 目标设置部分的目标数据集中,选择您创建用来存储数据的数据集。

      转移作业数据集

    • 数据源详细信息部分的商家 ID 中,输入您的商家 ID 或 MCA ID。

      选择您要转移的报告。如需了解详情,请参阅支持的报告

      Google Merchant Center 转移作业数据。

    • (可选)在通知选项部分,执行以下操作:

      • 点击切换开关以启用电子邮件通知。启用此选项后,转移作业管理员会在转移作业运行失败时收到电子邮件通知。
      • 选择 Pub/Sub 主题部分,选择您的主题名称,或点击创建主题。此选项用于为您的转移作业配置 Pub/Sub 运行通知
  5. 点击保存

经典版界面

  1. 转到经典版 BigQuery 网页界面。

    转到经典版 BigQuery 网页界面

  2. 点击 Transfers

  3. 点击 Add Transfer

  4. New Transfer 页面上,执行以下操作:

    • Source 部分,选择 Google Merchant Center
    • Display name 部分,输入转移作业的名称,例如 My Transfer。转移作业名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
    • Schedule 部分,点击 Edit,并将 Starting (UTC) 更改为比当前时间至少晚 90 分钟。

      转移作业时间安排

      如果保留默认的时间安排设置,则第一次转移作业将立即开始运行,它将失败,并显示以下错误消息:No data to transfer found for the Merchant account. If you have just created this transfer, you may need to wait for up to 90 minutes before the data of your Merchant account are prepared and available for the transfer.如果发生这种情况,请等待 90 分钟,然后为今天设置回填或等到明天进行安排的下一次运行。

    • Destination dataset 部分,选择您创建用来存储 Google Merchant Center 数据的数据集。

    • Merchant ID 部分,输入您的商家 ID 或 MCA 帐号 ID。

      Google Merchant Center 转移作业

    • 选择您要转移的报告。如需了解详情,请参阅支持的报告

      Google Merchant Center 转移作业数据。

    • (可选)展开 Advanced 部分,并为转移作业配置运行通知

      • Pub/Sub topic 部分,输入您的主题名称,例如 projects/myproject/topics/mytopic
      • 勾选 Send email notifications,让系统在转移作业运行失败时发送电子邮件通知。
      • 设置转移作业时请勿勾选 Disabled。如需停用现有转移作业,请参阅处理转移作业

        Pub/Sub 主题

  5. 点击 Add

  6. 出现提示时,点击 Allow 以向 BigQuery Data Transfer Service 授予相应权限,允许其管理 Google 购物中的产品详情和商家帐号并访问和管理 BigQuery 中的数据。您必须允许显示来自 bigquery.cloud.google.com 的弹出式窗口,才能看到权限窗口。

    Merchant Center 的转移作业权限对话框

bq

输入 bq mk 命令并提供转移作业创建标志 --transfer_config。此外,还必须提供以下标志:

  • --data_source
  • --target_dataset
  • --display_name
  • --params

您还可以提供 --project_id 标志以指定具体项目。如果未指定 --project_id,系统会使用默认项目。

bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source

其中:

  • project_id 是项目 ID。
  • dataset 是转移作业配置的目标数据集。
  • name 是转移作业配置的显示名。转移作业名称可以是任何容易辨识的值,方便您以后在需要修改该作业时能轻松识别。
  • parameters 包含所创建转移作业配置的参数(采用 JSON 格式),例如 --params='{"param":"param_value"}'
    • 对于 Google Merchant Center 转移作业,您必须提供 merchant_id 参数。
    • export_products 参数用于指定是否转移产品和产品问题数据。即使您未指定 export_products 参数,系统也会默认包含此参数。Google 建议您明确添加此参数,并将其设置为“true”。
    • export_price_benchmarks 参数用于指定是否转移价格基准化分析数据。
    • export_best_sellers 参数指定是否转移畅销商品数据。
  • data_source 是数据源,即 merchant_center

例如,以下命令使用商家 ID 1234 和目标数据集 mydataset 创建名为 My Transfer 的 Google Merchant Center 转移作业。该转移作业将在默认项目中创建。

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"merchant_id":"1234","export_products":"true","export_price_benchmarks":"true","export_best_sellers":"true"}' \
--data_source=merchant_center

首次运行此命令时,您会收到如下消息:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

请按照该消息中的说明操作,并将身份验证代码粘贴到命令行中。

如果您刚刚创建了此转移作业,则最长可能需要等待 90 分钟,您的商家帐号的数据才能准备就绪,可进行转移。如果发生这种情况,请等待 90 分钟,然后为今天设置回填或等到明天进行安排的下一次运行。

API

使用 projects.locations.transferConfigs.create 方法并提供一个 TransferConfig 资源实例。

排查 Google Merchant Center 转移作业设置问题

如果您在设置转移作业时遇到问题,请参阅排查 BigQuery Data Transfer Service 转移作业设置问题中的 Google Merchant Center 转移作业问题

查询数据

当数据传输到 BigQuery 时,会被写入提取时间分区表。如需了解详情,请参阅分区表简介

查询 Google Merchant Center 表时,必须在查询中使用 _PARTITIONTIME_PARTITIONDATE 伪列。 如需了解详情,请参阅查询分区表

Products_ 表包含嵌套和重复的字段。如需了解如何处理嵌套和重复的数据,请参阅标准 SQL 文档中的重复字段处理的差异

Google Merchant Center 示例查询

您可以使用以下 Google Merchant Center 示例查询来分析转移的数据。您还可以在 Google Data Studio 等可视化工具中使用查询。

在以下每个查询中,将 dataset 替换为您的数据集名称。将 merchant_id 替换为您的商家 ID。如果您使用的是 MCA,请将 merchant_id 替换为您的 MCA ID。

产品和产品问题示例查询

产品和产品问题统计信息

以下示例查询按天提供产品数量、问题产品和问题。

控制台

SELECT
  _PARTITIONDATE AS date,
  COUNT(*) AS num_products,
  COUNTIF(ARRAY_LENGTH(issues) > 0) AS num_products_with_issues,
  SUM(ARRAY_LENGTH(issues)) AS num_issues
FROM
  dataset.Products_merchant_id
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD'
GROUP BY
  date
ORDER BY
  date DESC

bq

bq query --use_legacy_sql=false '
SELECT
  _PARTITIONDATE AS date,
  COUNT(*) AS num_products,
  COUNTIF(ARRAY_LENGTH(issues) > 0) AS num_products_with_issues,
  SUM(ARRAY_LENGTH(issues)) AS num_issues
FROM
  dataset.Products_merchant_id
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD'
GROUP BY
  date
ORDER BY
  date DESC'

未获批准在购物广告中展示的产品

以下示例查询提供了未获批准在购物广告中展示的产品的数量。未获批准的原因可能是产品被排除在外或产品存在问题。

控制台

SELECT
  _PARTITIONDATE AS date,
  COUNT(*) AS num_products
FROM
  dataset.Products_merchant_id,
  UNNEST(destinations) AS destination
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD' AND
  destination.status = 'disapproved'
GROUP BY
  date
ORDER BY
  date DESC

bq

bq query --use_legacy_sql=false '
SELECT
  _PARTITIONDATE AS date,
  COUNT(*) AS num_products
FROM
  dataset.Products_merchant_id,
  UNNEST(destinations) AS destination
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD' AND
  destination.status = 'disapproved'
GROUP BY
  date
ORDER BY
  date DESC'

存在未获批准问题的产品

以下示例查询会检索存在未获批准问题的产品数量。

控制台

SELECT
  _PARTITIONDATE AS date,
  COUNT(DISTINCT CONCAT(CAST(merchant_id AS STRING), ':', product_id))
      AS num_distinct_products
FROM
  dataset.Products_merchant_id,
  UNNEST(issues) AS issue
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD' AND
  issue.servability = 'disapproved'
GROUP BY
  date
ORDER BY
  date DESC

bq

bq query --use_legacy_sql=false '
SELECT
  _PARTITIONDATE AS date,
  COUNT(DISTINCT CONCAT(CAST(merchant_id AS STRING), ':', product_id))
      AS num_distinct_products
FROM
  dataset.Products_merchant_id,
  UNNEST(issues) AS issue
WHERE
  _PARTITIONDATE >= 'YYYY-MM-DD' AND
  issue.servability = 'disapproved'
GROUP BY
  date
ORDER BY
  date DESC'

价格基准示例查询

将产品价格与基准进行对比

以下查询会联接 ProductsPrice Benchmarks 数据以返回产品列表和关联的基准:

控制台

WITH products AS
(
  SELECT
    _PARTITIONDATE AS date,
    *
  FROM
    dataset.Products_merchant_id
  WHERE
   _PARTITIONDATE >= 'YYYY-MM-DD'
),
benchmarks AS
(
  SELECT
    _PARTITIONDATE AS date,
    *
  FROM
    dataset.Products_PriceBenchmarks_merchant_id
  WHERE
    _PARTITIONDATE >= 'YYYY-MM-DD'
)
SELECT
  products.date,
  products.product_id,
  products.merchant_id,
  products.aggregator_id,
  products.price,
  products.sale_price,
  benchmarks.price_benchmark_value,
  benchmarks.price_benchmark_currency,
  benchmarks.country_of_sale
FROM
  products
INNER JOIN
  benchmarks
ON products.product_id = benchmarks.product_id AND
   products.merchant_id = benchmarks.merchant_id AND
   products.date = benchmarks.date

bq

bq query --use_legacy_sql=false '
WITH products AS
(
  SELECT
    _PARTITIONDATE AS date,
    *
  FROM
    `dataset.Products_merchant_id`
  WHERE
   _PARTITIONDATE >= 'YYYY-MM-DD'
),
benchmarks AS
(
  SELECT
    _PARTITIONDATE AS date,
    *
  FROM
    `dataset.Products_PriceBenchmarks_merchant_id`
  WHERE
   _PARTITIONDATE >= 'YYYY-MM-DD'
)
SELECT
  products.date,
  products.product_id,
  products.merchant_id,
  products.aggregator_id,
  products.price,
  products.sale_price,
  benchmarks.price_benchmark_value,
  benchmarks.price_benchmark_currency,
  benchmarks.country_of_sale
FROM
  products
INNER JOIN
  benchmarks
ON products.product_id = benchmarks.product_id AND
   products.merchant_id = benchmarks.merchant_id AND
   products.date = benchmarks.date'

畅销商品示例查询

给定类别和国家/地区的热门商品

以下查询返回美国智能手机类别的热门商品。

控制台

SELECT
  rank,
  previous_rank,
  (SELECT name FROM top_products.product_title WHERE locale = 'en-US') AS product_title,
  brand,
  price_range
FROM
  dataset.BestSellers_TopProducts_merchant_id AS top_products
WHERE
  _PARTITIONDATE = 'YYYY-MM-DD' AND
  ranking_category = 267 /*Smartphones*/ AND
  ranking_country = 'US'
ORDER BY
  rank

bq

bq query --use_legacy_sql=false '
SELECT
  rank,
  previous_rank,
  (SELECT name FROM top_products.product_title WHERE locale = 'en-US') AS product_title,
  brand,
  price_range
FROM
  dataset.BestSellers_TopProducts_merchant_id AS top_products
WHERE
  _PARTITIONDATE = 'YYYY-MM-DD' AND
  ranking_category = 267 /*Smartphones*/ AND
  ranking_country = 'US'
ORDER BY
  rank'

您的商品目录中的热门商品

以下查询会联接 BestSellers_TopProducts_Inventory_BestSellers_TopProducts_ 数据以返回您的目录中目前拥有的热门商品列表。

控制台

WITH latest_top_products AS
(
  SELECT
    *
  FROM
    dataset.BestSellers_TopProducts_merchant_id
  WHERE
    _PARTITIONDATE = 'YYYY-MM-DD'
),
latest_top_products_inventory AS
(
  SELECT
    *
  FROM
    dataset.BestSellers_TopProducts_Inventory_merchant_id
  WHERE
    _PARTITIONDATE = 'YYYY-MM-DD'
)
SELECT
  top_products.rank,
  inventory.product_id,
  (SELECT ANY_VALUE(name) FROM top_products.product_title) AS product_title,
  top_products.brand,
  top_products.gtins
FROM
  latest_top_products AS top_products
INNER JOIN
  latest_top_products_inventory AS inventory
USING (rank_id)

bq

bq query --use_legacy_sql=false '
WITH latest_top_products AS
(
  SELECT
    *
  FROM
    dataset.BestSellers_TopProducts_merchant_id
  WHERE
    _PARTITIONDATE = 'YYYY-MM-DD'
),
latest_top_products_inventory AS
(
  SELECT
    *
  FROM
    dataset.BestSellers_TopProducts_Inventory_merchant_id
  WHERE
    _PARTITIONDATE = 'YYYY-MM-DD'
)
SELECT
  top_products.rank,
  inventory.product_id,
  (SELECT ANY_VALUE(name) FROM top_products.product_title) AS product_title,
  top_products.brand,
  top_products.gtins
FROM
  latest_top_products AS top_products
INNER JOIN
  latest_top_products_inventory AS inventory
USING (rank_id)'

给定类别和国家/地区的热门品牌

以下查询返回美国智能手机类别的热门品牌。

控制台

SELECT
  rank,
  previous_rank,
  brand
FROM
  dataset.BestSellers_TopBrands_merchant_id
WHERE
  _PARTITIONDATE = 'YYYY-MM-DD' AND
  ranking_category = 267 /*Smartphones*/ AND
  ranking_country = 'US'
ORDER BY
  rank

bq

  bq query --use_legacy_sql=false '
    SELECT
      rank,
      previous_rank,
      brand
    FROM
      dataset.BestSellers_TopBrands_merchant_id
    WHERE
      _PARTITIONDATE = 'YYYY-MM-DD' AND
      ranking_category = 267 /*Smartphones*/ AND
      ranking_country = 'US'
    ORDER BY
      rank'

商品目录中热门品牌的商品

以下查询会返回商品目录中来自按类别和国家/地区列出的热门品牌的商品列表。

控制台

  WITH latest_top_brands AS
  (
    SELECT
      *
    FROM
      dataset.BestSellers_TopBrands_merchant_id
    WHERE
      _PARTITIONDATE = 'YYYY-MM-DD'
  ),
  latest_products AS
  (
    SELECT
      product.*,
      product_category_id
    FROM
      dataset.Products_merchant_id AS product,
      UNNEST(product.google_product_category_ids) AS product_category_id
    WHERE
      _PARTITIONDATE = 'YYYY-MM-DD'
  )
  SELECT
    top_brands.brand,
    (SELECT name FROM top_brands.ranking_category_path
    WHERE locale = 'en-US') AS ranking_category,
    top_brands.ranking_country,
    top_brands.rank,
    products.product_id,
    products.title
  FROM
    latest_top_brands AS top_brands
  INNER JOIN
    latest_products AS products
  ON top_brands.google_brand_id = products.google_brand_id AND
     top_brands.ranking_category = product_category_id AND
     top_brands.ranking_country = products.target_country

CLI

bq query --use_legacy_sql=false '
    WITH latest_top_brands AS
  (
    SELECT
      *
    FROM
      dataset.BestSellers_TopBrands_merchant_id
    WHERE
      _PARTITIONDATE = 'YYYY-MM-DD'
  ),
  latest_products AS
  (
    SELECT
      product.*,
      product_category_id
    FROM
      dataset.Products_merchant_id AS product,
      UNNEST(product.google_product_category_ids) AS product_category_id
    WHERE
      _PARTITIONDATE = 'YYYY-MM-DD'
  )
  SELECT
    top_brands.brand,
    (SELECT name FROM top_brands.ranking_category_path
    WHERE locale = 'en-US') AS ranking_category,
    top_brands.ranking_country,
    top_brands.rank,
    products.product_id,
    products.title
  FROM
    latest_top_brands AS top_brands
  INNER JOIN
    latest_products AS products
  ON top_brands.google_brand_id = products.google_brand_id AND
     top_brands.ranking_category = product_category_id AND
     top_brands.ranking_country = products.target_country'