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 Таблица содержит вместе с количеством записей в массиве.
Принимая во внимание, что второй запрос, в дополнение к вышеупомянутому, группирует все строки и объединяет соответствующие числа

Конечно, если ваша таблица имеет все посещения уникальные - это дает тот же результат
Но поскольку эта дополнительная группировка - я бы ожидал, что второй запрос будет дороже

Другие вопросы по тегам