BigQuery SQL: невозможно запросить перекрестный продукт повторяющихся полей /

Моя цель состоит в том, чтобы отфильтровать от всех посетителей, только проанализировать клиентов (которые находятся в customDimension.index =2 а затем дополнительно фильтровать только определенные типы просмотров страниц для клиентов.

SELECT customDimensions.value AS CustomerID,
SUM(totals.pageviews) as page_views,
SUM(CASE WHEN hits.type = 'PAGE' AND hits.contentGroup.contentGroup2 = 'important' THEN 1 ELSE 0 END) AS important_pageviews
FROM `xxxxxxxx.ga_sessions_20180415`
WHERE customDimensions.index = 2
GROUP BY CustomerID 

Я получаю сообщение об ошибке (с использованием StandardSQL):

Error: Cannot access field index on a value with type
ARRAY<STRUCT<index INT64, value STRING>> at [5:24]

Для устаревшего SQL:

Ошибка: не удается запросить перекрестный продукт повторяющихся полей customDimensions.index и hit.contentGroup.contentGroup2.

Редактировать:

SELECT cd.value AS CustomerID,
SUM(totals.pageviews) as page_views,
SUM(CASE WHEN hits.type = 'PAGE' AND hits.contentGroup.contentGroup2 = 'important' THEN 1 ELSE 0 END) AS important_pageviews
FROM `xxxxxxxx.ga_sessions_20180415`,
UNNEST(customDimensions) AS cd
WHERE cd.index = 2
GROUP BY CustomerID 

возвращает:

Error: Cannot access field type on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [3:20]

Я попытался исправить строку 3:20, используя UNNEST(hits.type) = 'PAGE' AND UNNEST(hitscontentGroup.contentGroup2) = 'important' который дает Error: Syntax error: Unexpected keyword UNNEST at [3:15]

1 ответ

Решение

Так как customDimensions - это массив, который вам понадобится unnest это для того, чтобы обратиться к его содержанию, см. пример StandardSQL ниже, где я удаляю UserID из данных Google Analytics в BigQuery:

SELECT customDimension.value AS UserID
FROM `my.project.data` AS t
  CROSS JOIN UNNEST(t.customdimensions) AS customDimension
  WHERE customDimension.index = 2
Другие вопросы по тегам