Я пытаюсь использовать 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





Cannot access field productQuantity on a value with type ARRAY>
Вы должны использовать подход ниже
#standardSQL
SELECT
date,
hits.transaction.transactionId,
prod.productQuantity
FROM `XXX`,
UNNEST(hits) AS hits,
UNNEST(hits.product) AS prod
Итак, как вы можете видеть, доступ к productQuantity осуществляется с помощью невложенного 'prod'
ПРИМЕЧАНИЕ: когда вы используете GROUP BY, вам нужно использовать функции агрегации для тех полей в вашем операторе select, которые не являются частью GROUP BY. В вашем примере есть два поля ниже, которые необходимо применить с любой агрегацией, которую вы ищете в случае, если вам все еще нужна GROUP BY
hits.transaction.transactionId,
prod.productQuantity
Is there a way that I can query from a specific time frame without repeating the code?
Да, для этого можно использовать _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'
Большое спасибо! Но файл, который я экспортировал, содержит гораздо больше столбцов, которые я выбрал (используя тот же код, что и вы предложили). Там в основном есть все о продуктах. Это потому, что я использую UNNEST? Если мне просто нужны дата, идентификатор транзакции и количество продуктов, что мне делать?