Сложная агрегация строк в BigQuery - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь завершить путь пользователя в BigQuery, но борюсь с некоторыми сложностями в проблеме.

Исходные данные выглядят так для одного пользователя:

enter image description here

Каждая сглаженная кавычка представляет отдельную конверсию (кавычка = конверсия), поэтому мне нужно 3 отдельных путешествия пользователя.

Путешествие 1: «Платный поиск - чистый бренд> Платный поиск - бренд Hyrbid> Конверсия»

Путешествие 2: «Платный поиск - Чистый бренд> Платный поиск - Бренд Hyrbid> Конверсия» ( пользователь получает 2 цитаты за один сеанс, поэтому путешествие 1 и путешествие 2 представляют 2 отдельных конверсии с одинаковым путем )

Путешествие 3: «Платный поиск - Pure Brand> Платный поиск - Brand Hyrbid» > Organi c Search> Conversion "

Было бы также хорошо, если бы путешествие 3 выглядело так:

Journey 3:" Платный поиск - Pure Brand> Платный поиск - Brand Hyrbid> Конверсия> Орган c Поиск> Конверсия "

На данный момент самое близкое, что у меня есть:

enter image description here

Проблема здесь, что хотя 2 обращения происходят во время посещения № 2, они перечислены здесь последовательно. Это означает, что когда вы разделяете каждое преобразование, я получаю:

enter image description here

Четвертая строка не так важна, как могла бы быть упал, но мне нужны строки 2 и 3 для включения предыдущих посещений.

Вот код, с которым я работаю:

with table_a as (SELECT date, fullVisitorId, visitnumber, visitid, clientId, istruedirect, number_of_pages_in_session, flattened_quote, CASE WHEN flattened_quote IS NOT NULL THEN REPLACE(channel, channel, CONCAT(channel, " > Conversion abcdef10")) ELSE channel END as channel
FROM `source_table`
ORDER BY fullVisitorId, date, visitnumber),

table_b as (SELECT 
  fullVisitorId, 
  #flattened_quote,
  STRING_AGG(channel, ' > ') AS channelgrouping_path,
  ARRAY_AGG (
    STRUCT(flattened_quote)
  ) AS Values
FROM table_a
GROUP BY fullVisitorId)

select SPLIT(channelgrouping_path, "abcdef10") as split_into_each_journey
from table_b
where fullvisitorid = "1004040222968994500" # this is just using one visitor ID for validation, will be removed

Если у кого-нибудь есть какие-либо советы о том, как GROUP BY по-другому или что-то, чтобы достичь этого, я был бы очень признателен.

...