Google Merchant Center 転送

BigQuery Data Transfer Service for Google Merchant Center を使用すると、Google Merchant Center レポートデータを定期的に読み込むジョブのスケジュールと管理を自動化できます。

サポートされるレポート

BigQuery Data Transfer Service for Google Merchant Center では現在、次のデータがサポートされています。

商品と商品の問題

  • これには、フィードまたは Content API for Shopping によって Merchant Center に提供された商品データが含まれます。Google が商品に関して検出したアイテムレベルの問題も含まれます。このデータは Google Merchant Center で確認できます。Content API for Shopping に対するクエリを実行して確認することもできます。

  • このデータの BigQuery への読み込み方法については、Google Merchant Center の商品テーブル スキーマをご覧ください。

価格ベンチマーク

ベストセラー

  • これは、ショッピング広告で最も人気のある商品と、その商品アイテムが在庫にあるかどうかに関するデータを含みます。

  • これは、Google Merchant Center から入手できるベストセラー レポートに基づいています。

  • ベストセラー レポートは、次のテーブルで構成されています。

    1. BestSellers_TopProducts_ は、国と Google 商品カテゴリごとの上位の商品のランキングのリストです。この表は、ショッピング広告にわたるすべての販売者からのデータを表しています。
    2. BestSellers_ProductInventory_ は、ショッピング広告の上位の商品と在庫のマッピング テーブルです。
  • ベストセラー データの BigQuery への読み込み方法については、Google Merchant Center の上位の商品商品在庫のテーブル スキーマをご覧ください。

BigQuery Data Transfer Service for Google Merchant Center では現在、次のレポート オプションがサポートされています。

レポート オプション サポート
スケジュール

毎日、転送が最初に作成される時刻(デフォルト)。

時刻を設定できます。

制限事項

すべての Merchant Center 転送には、次の制限があります。

  • 販売者 ID を対象に転送を作成した後、販売アカウント データが準備されて転送に使用できるようになるまでに最大で 90 分かかる場合があります。
  • 最大バックフィル期間を構成することはできません。現在のところ、過去のバックフィルはサポート対象外です。当日のバックフィルのみ設定できます。

商品と商品問題

  • BigQuery 内の商品と商品の問題に関するデータは、販売アカウントのリアルタイムのデータではありません。データはバッチモードで転送されるため、最大 15 時間の遅れが生じることがあります。BigQuery 内のデータの鮮度を確認するには、[Products] テーブルの [Details] タブで [Data freshness] のタイムスタンプを確認します。データの鮮度を示す、[Products] テーブルのタイムスタンプ

価格ベンチマーク

  • 価格ベンチマーク データは、価格ベンチマークのリアルタイム ビューではありません。 更新日時を確認するには、価格ベンチマーク スキーマの price_benchmark_timestamp フィールドを参照してください。
  • すべての商品に価格ベンチマークがあるわけではありません。

ベストセラー

  • すべての国がランキング データに含まれるわけではありません。レポートに含まれる国: US、DE、FR、UK、NL、JP、AU、CA、SE、IT、ES、CH、DK、CZ、BE、RU。
  • ショッピング広告で最も人気のある商品アイテムのみが BestSellers_TopProducts_ テーブルに含まれます。

マルチクライアント アカウント(MCA)のサポート

複数の販売者 ID を持つ既存のお客様は、親マルチクライアント アカウント(MCA)を構成することをおすすめします。MCA を構成すると、すべての販売者 ID に対して 1 つの転送を作成できます。

個々の販売者 ID を使用する場合と比べ、Google Merchant Center の MCA を使用すると次のメリットがあります。

  • 複数の販売者 ID のレポートデータを転送する際に、複数の転送を管理する必要がなくなります。
  • すべての販売者 ID データが同じテーブルに保管されるため、複数の販売者 ID を使用したクエリを作成する作業が大幅に簡素化されます。
  • MCA を使用すると、すべての販売者 ID データが同じジョブで読み込まれるため、BigQuery 読み込みジョブの割り当ての問題が発生する可能性が減ります。

MCA を使用する場合に考えられる 1 つのデメリットとして、以降のクエリ費用が高くなる可能性があります。すべてのデータが同じテーブル内に保管されるため、クエリで個々の販売者 ID のデータを取得する場合でも、テーブル全体をスキャンしなければならないためです。

MCA を使用している場合、MCA ID は aggregator_id の一覧に表示され、個々のサブアカウントは merchant_id の一覧に表示されます。MCA を使用しないアカウントでは、aggregator_idnull に設定されます。

始める前に

Google Merchant Center の転送を作成する前に、次の作業を行ってください。

  • BigQuery Data Transfer Service を有効にするために必要なすべての操作が完了していることを確認します。
  • Google Merchant Center のデータを保存する BigQuery データセットを作成します。
  • 従来の BigQuery ウェブ UI を使用して転送を作成する場合は、権限ウィンドウが表示されるように、bigquery.cloud.google.com からのポップアップを許可します。BigQuery Data Transfer Service for Google Merchant Center 権限で Google Shopping 内の商品リスティングとアカウントを管理できるようにする必要があります。
  • Pub/Sub の転送実行通知を設定する場合は、pubsub.topics.setIamPolicy 権限が必要です。メール通知を設定するだけの場合、Pub/Sub の権限は必要ありません。詳細については、BigQuery Data Transfer Service の実行通知をご覧ください。

必要な権限

転送を作成するユーザーに、次の必要な権限が付与されていることを確認します。

  • BigQuery:

    • bigquery.transfers.update(転送を作成する権限)
    • bigquery.datasets.update(抽出先データセットに対する権限)

    bigquery.transfers.update 権限と bigquery.datasets.update 権限は、事前定義された Cloud IAM の役割 bigquery.admin に含まれています。BigQuery Data Transfer Service での Cloud IAM の役割について詳しくは、アクセス制御のリファレンスをご覧ください。

  • Google Merchant Center

    • 転送構成で使用されている Google Merchant Center アカウントへのアクセス。Google Merchant Center UI の [Users] セクションをクリックすると、アクセス権を確認できます。

    • 価格競争力とベストセラーのデータにアクセスするには、まずマーケット インサイト プログラムを有効にする必要があります。

Google Merchant Center の転送を設定する

Google Merchant Center レポートのデータ転送を設定するには、以下が必要です。

  • 販売者 ID またはマルチクライアント アカウント ID: これは、Google Merchant Center UI の左上のセクションに表示されている販売者 ID です。

Google Merchant Center レポートのデータ転送を作成するには:

Console

  1. Cloud Console の BigQuery ウェブ UI に移動します。

    Cloud Console に移動

  2. [転送] をクリックします。

  3. [転送を作成] をクリックします。

  4. [転送の作成] ページで、次の操作を行います。

    • [ソースタイプ] セクションの [ソース] で、[Google Merchant Center] を選択します。

    • [転送構成名] セクションの [表示名] に、転送名(例: My Transfer)を入力します。転送名には、後で修正が必要になった場合に簡単に識別できる任意の名前を使用できます。

      転送名

    • [スケジュール オプション] セクションの [スケジュール] で、[設定した時間に開始] をクリックします。

      • [繰り返しの頻度] で、転送を実行する頻度のオプションを選択します。

        • 毎日(デフォルト)
        • 毎週
        • 毎月
        • カスタム
        • オンデマンド
      • [開始日と実行時間] に、転送を開始する日付と時刻を入力します。現在の 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. [保存] をクリックします。

従来の UI

  1. 従来の BigQuery ウェブ UI に移動します。

    従来の BigQuery ウェブ UI に移動

  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] をクリックし、Google Shopping の商品リスティングと販売アカウントを管理する権限と、BigQuery でデータのアクセスと管理を行う権限を BigQuery Data Transfer Service に付与します。権限ウィンドウが表示されるように、bigquery.cloud.google.com からのポップアップを許可する必要があります。

    Merchant Center の転送権限を付与するダイアログ

CLI

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 パラメータを指定しなくても、このパラメータはデフォルトで含まれています。このパラメータを明示的に含めて「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 データポータルなどの可視化ツールでも使用できます。

次の各クエリで、dataset は実際のデータセット名で置き換えます。merchant_id は、販売者 ID で置き換えます。MCA を使用している場合は、merchant_id を実際の MCA ID で置き換えます。

商品と商品問題のサンプルクエリ

商品と商品に関する統計情報

次のサンプルクエリでは、商品の数、問題のある商品の数、日付ごとの問題の数を取得します。

Console

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

CLI

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'

ショッピング広告で承認されなかった商品

次のサンプルクエリでは、ショッピング広告での掲載が承認されなかった商品の数を取得します。商品が承認されなかった原因として、除外対象であったか、商品に問題があることが考えられます。

Console

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

CLI

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'

問題が承認されなかった商品

次のサンプルクエリでは、問題が承認されなかった商品の数を取得します。

Console

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

CLI

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 データを結合し、商品と関連のベンチマークのリストを返します。

Console

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

CLI

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'

ベストセラーのサンプルクエリ

特定のカテゴリと国の上位の商品

次のクエリは、米国のスマートフォン カテゴリの上位の商品を返します。

Console

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

CLI

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_ProductInventory_ データと BestSellers_TopProducts_ データを結合して、現在在庫にある上位の商品のリストを返します。

Console

WITH latest_top_products AS
(
  SELECT
    *
  FROM
    dataset.BestSellers_TopProducts_merchant_id
  WHERE
    _PARTITIONDATE = 'YYYY-MM-DD'
),
latest_top_products_inventory AS
(
  SELECT
    *
  FROM
    data_best_sellers.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
ON top_products.rank_id = inventory.rank_id

CLI

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
    data_best_sellers.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
ON top_products.rank_id = inventory.rank_id'