Использование hit.hitNumber для получения попаданий после определенного попадания - PullRequest
0 голосов
/ 09 октября 2019

Я хочу вернуть все события добавления в корзину, которые произошли после того, как посетитель зашел на определенную страницу во время сеанса.

Использование google_analytics_sample из учетной записи демо-магазина в качестве ссылки и со следующим запросом

   SELECT
    hits.eCommerceAction.action_type,
    hits.hitNumber
    FROM
    `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` AS GA, UNNEST(GA.hits) AS hits
where 
hits.eCommerceAction.action_type = "2"

Какой запрос мне нужно написать, чтобы получить только сообщение Добавить в корзину, даже после определенногопросмотр страницы попал? Например, скажем REGEXP_CONTAINS(hits.page.pagePath, r'asearch').

По сути, мне нужно было бы сделать что-то вроде этого

where (hits.eCommerceAction.action_type = 2 and hits.hitNumber) > REGEXP_CONTAINS(hits.page.pagePath, r'asearch') and hits.hitNumber)

Но я не уверен, как мне сформулировать это с помощью моего запроса.

1 Ответ

1 голос
/ 12 октября 2019

Я думаю, что имеет смысл работать в подзапросе вместо перекрестного соединения с массивом хитов. Это экономит ресурсы и сохраняет естественные границы массива.

В приведенном здесь решении я запрашиваю некоторую информацию из искомых хитов и ограничиваю их вложенным подзапросом в том же массиве:

SELECT
  fullvisitorid, -- identify user
  visitstarttime, -- identify session per user
  -- feed output of subquery back into an array
  array(SELECT AS STRUCT
    hitNumber, page.pagePath, eventInfo.eventAction
  FROM GA.hits 
  WHERE
    -- add to cart
    eCommerceAction.action_type = "3"
    -- and its hitnumber must be over the min hitnumber of 'asearch'
    AND hitnumber > (SELECT MIN(hitnumber) FROM GA.hits WHERE REGEXP_CONTAINS(page.pagePath, r'asearch')) 
  ORDER BY hitnumber) AS myHits
FROM
  `bigquery-public-data.google_analytics_sample.ga_sessions_20170801` AS GA
WHERE (SELECT COUNT(1)>0 FROM GA.hits WHERE eCommerceAction.action_type = "3")
  AND (SELECT COUNT(1)>0 FROM GA.hits WHERE REGEXP_CONTAINS(page.pagePath, r'asearch') )
LIMIT 1000

Выходные данные состоят из 3 полей: fullvisitorid + visitstarttime для идентификации сеанса, а также массив, содержащий желаемые обращения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...