Не удается получить доступ к полю productQuantity для значения с типом ARRAY <STRUCT <productSKU STRING, v2ProductName STRING, v2ProductCategory STRING, ... >> - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь использовать BigQuery для запроса данных из Google Analytics. Это дает мне эту ошибку, прежде чем я могу запустить его:

Cannot access field productQuantity on a value with type ARRAY<STRUCT<productSKU STRING, v2ProductName STRING, v2ProductCategory STRING, ...>>

Я его погуглил и уже использую функцию UNNEST, как предлагалось в некоторых других ответах. Я не уверен, что не так.

Также я запрашиваю из разных таблиц в Google Analytics, и данные хранятся по дате. Есть ли способ, которым я могу запросить данные за определенный период времени, не повторяя код?

Пожалуйста, смотрите мой код ниже:

#standardSQL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX1`,
  UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date
UNION ALL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX2` UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date
UNION ALL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX3` UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date
UNION ALL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX4` UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date
UNION ALL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX5` UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date
UNION ALL
SELECT
  date,
  hits.transaction.transactionId,
  hits.product.productQuantity
FROM
  `XXX6` UNNEST(hits) AS hits,
  UNNEST(hits.product.productQuantity) AS prod
GROUP BY
  date

1 Ответ

1 голос
/ 09 мая 2019

Невозможно получить доступ к полю productQuantity для значения с типом ARRAY>

Вы должны использовать следующий подход

#standardSQL
SELECT
  date,
  hits.transaction.transactionId, 
  prod.productQuantity
FROM `XXX`,
UNNEST(hits) AS hits,
UNNEST(hits.product) AS prod

Итак, как вы можете видеть productQuantity isдоступ осуществляется с помощью необъявленного «prod»

ПРИМЕЧАНИЕ: при использовании GROUP BY вам необходимо использовать функции агрегирования для тех полей в вашем операторе select, которые не являются частью GROUP BY - в вашем примере под двумя поляминеобходимо применять с любым агрегатом, который вы ищете, на случай, если вам все еще понадобится GROUP BY

hits.transaction.transactionId, 
prod.productQuantity   

Есть ли способ, с помощью которого я могу запрашивать данные за определенный период времени, не повторяя код?

Да, вы можете использовать _TABLE_SUFFIX для этого

, как в примере ниже

#standardSQL
SELECT
  date,
  hits.transaction.transactionId, 
  prod.productQuantity
FROM `project.dataset.XXX*`,
UNNEST(hits) AS hits,
UNNEST(hits.product) AS prod   
WHERE _TABLE_SUFFIX BETWEEN '1' AND '6'
...