Bigquery SQL - лучше отменить вкладку в SELECT или JOIN?
У меня есть набор данных, где представления вложены в сессии, и я хочу, чтобы количество просмотров для каждой сессии. Каков более эффективный / правильный способ структурировать такой запрос?
Есть ли документация, в которой говорится о предпочтительном способе написания запросов в BigQuery SQL?
SELECT session_key, ( SELECT COUNT( view_id ) FROM UNNEST( views ) views ) AS view_count
FROM sessions
WHERE _PARTITIONTIME >= TIMESTAMP( '2016-04-01' ) ;
SELECT session_key, COUNT( view_id ) AS view_count
FROM sessions
LEFT JOIN UNNEST( views ) views
WHERE _PARTITIONTIME >= TIMESTAMP( '2016-04-01' )
GROUP BY session_key;
Спасибо
2 ответа
Рабочие запросы:
а)
SELECT visitId, ( SELECT COUNT( hitNumber ) FROM UNNEST( hits ) ) AS view_count
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
б)
SELECT visitId, COUNT( hitNumber ) AS view_count
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
LEFT JOIN UNNEST( hits )
GROUP BY visitId
Первый запрос выглядит короче и более кратким, но давайте также посмотрим на вкладку объяснения:
Это также выглядит лучше во время выполнения! Вероятно, потому что второй запрос имеет GROUP BY visitId
, что заставляет BigQuery посмотреть, есть ли другие сессии с таким же идентификатором.
Но если вы ищете еще более краткий вариант:
SELECT visitId, ARRAY_LENGTH(hits) AS view_count
FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
Это не только о which way better?
- это также о which way reflects your goal?
потому что результаты те разные! И вы можете видеть это в ответе Фелипе - первый запрос возвращает 63 строки, а второй запрос возвращает 62 строки
Итак, первый запрос просто возвращает столько строк, сколько sessions
Таблица содержит вместе с количеством записей в массиве.
Принимая во внимание, что второй запрос, в дополнение к вышеупомянутому, группирует все строки и объединяет соответствующие числа
Конечно, если ваша таблица имеет все посещения уникальные - это дает тот же результат
Но поскольку эта дополнительная группировка - я бы ожидал, что второй запрос будет дороже