Использование standard SQL (снимите флажок «Использовать прежние SQL» в поле «Show Options»), вы должны быть в состоянии построить такой запрос:
SELECT
(SELECT MAX(IF(index=1, value, NULL))
FROM UNNEST(customDimensions)) AS CustomerID,
date as date,
SUM(totals.visits) AS Visits,
COUNT(DISTINCT fullvisitorid) AS Users
FROM `xxxxxxx.ga_sessions_xxxxx`
GROUP BY CustomerID, date;
Ниже приведен пример запроса чтобы проиллюстрировать подход:
WITH SampleTable AS (
SELECT ARRAY<STRUCT<index INT64, value STRING>>
[(5, "foo"), (1, "bar"), (1, "baz")] AS customDimensions,
"20160518" AS date,
STRUCT(10 AS visits) AS totals,
"visitorid" AS fullvisitorid
UNION ALL SELECT ARRAY<STRUCT<index INT64, value STRING>>
[(0, "foo"), (4, "bar"), (2, "baz")] AS customDimensions,
"20160519" AS date,
STRUCT(20 AS visits) AS totals,
"visitorid" AS fullvisitorid)
SELECT
(SELECT MAX(IF(index=1, value, NULL))
FROM UNNEST(customDimensions)) AS CustomerID,
date as date,
SUM(totals.visits) AS Visits,
COUNT(DISTINCT fullvisitorid) AS Users
FROM SampleTable
GROUP BY CustomerID, date;
+------------+----------+--------+-------+
| CustomerID | date | Visits | Users |
+------------+----------+--------+-------+
| baz | 20160518 | 10 | 1 |
| NULL | 20160519 | 20 | 1 |
+------------+----------+--------+-------+
Кроме того, я думаю, что вам нужен подзапрос, чтобы вычислить максимальный над customDimensions
повтореном поля с использованием л egacy SQL:
SELECT
CustomerID,
date as date,
SUM(totals.visits) Visits,
EXACT_COUNT_DISTINCT(fullvisitorid) AS Users
FROM (
SELECT
*,
MAX(IF(customDimensions.index=1, customDimensions.value, NULL))
WITHIN customDimensions AS CustomerID
FROM [xxxxxxx.ga_sessions_xxxxx])
GROUP BY CustomerID, date;
не может заставить это работать. – sam123
Можете ли вы объяснить, что пошло не так? Я должен был догадаться, что схема таблицы для запроса, который я предоставил, но я, возможно, сделал недопустимое предположение. –
Я получаю это - Ошибка: Синтаксическая ошибка: Неожиданное ключевое слово FROM в [7: 1] – sam123