Ошибка идентификации шаблона с предложением о соответствии вертикали - PullRequest
0 голосов
/ 28 февраля 2019

Мне трудно понять, как использовать условие соответствия Vertica для определения сессий, в которых пользователь что-то искал на нашем сайте (event_category = 'Search'), а затем увидел элемент карусели продукта (product_list = 'banner' ANDevent_action = 'impression').

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

Пример необработанных данных

| hit_number | product_list         | Event_Category | Event_Action | Event_Label   |
|------------|----------------------|----------------|--------------|---------------|
| 105        | (null)               | Search         | Submit       | chocolate     |
| 106        | (null)               | eec            | impression   | search-result |
| 107        | search-result        | eec            | impression   | sendData      |
| 107        | search-result        | eec            | impression   | sendData      |
| 107        | search-result        | eec            | impression   | sendData      |
| 107        | search-result        | eec            | impression   | sendData      |
| 108        | (null)               | (null)         | (null)       | (null)        |
| 109        | (null)               | eec            | impression   | banner        |
| 110        | banner-105-chocolate | eec            | impression   | sendData      |
| 110        | banner-105-chocolate | eec            | impression   | sendData      |
| 110        | banner-105-chocolate | eec            | impression   | sendData      |

Чтобы шаблон был действительным, должно быть хотя бы 1 событие поиска и 1 показ баннера. Я установил шаблон на (Поиск +Баннер +), чтобы отразить это, но я не возвращаю никаких результатов, когда я запускаю выполнение SQL-запроса, показанного ниже.

SELECT
page_title
,event_label
,event_name()
,match_id()
,pattern_id()

FROM 
        (SELECT
                unique_visit_id
                ,hit_number
                ,event_category
                ,event_label
                ,event_action
                ,product_list

        FROM 
                atomic.ga_sessions_hits_product_expanded
        WHERE
                1=1
                AND ga_sessions_date >= CURRENT_DATE -3
                AND unique_visit_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        ORDER BY 
                hit_number ASC) base

Match
    (Partition by unique_visit_id Order by hit_number
     Define
            Search as event_category ='Search' and event_action = 'Submit',
            Banner as product_list ilike 'banner-%' and event_action ='impression'
     Pattern
            P as (Search+ BannerImpression+)
    ROWS MATCH FIRST EVENT)

Пожалуйста, дайте мне знать, если есть что-то, что я должен уточнить, любые идеи или помощь будутс благодарностью!

1 Ответ

0 голосов
/ 01 марта 2019

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

Ваша проблема в том, что в этом фрагменте данных нет шаблонов, где событие, которое вы назвали banner, следует сразу же за событием.что вы назвали search

Я добавил еще одно событие в предложение DEFINE, в конце.Если два других значения не равны true, будет выбрано последнее, которое просто определено как other AS true (таково поведение ROWS MATCH FIRST EVENT).

И тогда шаблон становится (search+ other* banner+) и тот найден.

Смотрите здесь:

WITH
ga_sessions_hits_product_expanded(
   unique_visit_id,hit_number,product_list,Event_Category,Event_Action,Event_Label
) AS (
          SELECT 42,105,NULL,'Search','Submit','chocolate'
UNION ALL SELECT 42,106,NULL,'eec','impression','search-result'
UNION ALL SELECT 42,107,'search-result','eec','impression','sendData'
UNION ALL SELECT 42,107,'search-result','eec','impression','sendData'
UNION ALL SELECT 42,107,'search-result','eec','impression','sendData'
UNION ALL SELECT 42,107,'search-result','eec','impression','sendData'
UNION ALL SELECT 42,108,NULL,NULL,NULL,NULL
UNION ALL SELECT 42,109,NULL,'eec','impression','banner'
UNION ALL SELECT 42,110,'banner-105-chocolate','eec','impression','sendData'
UNION ALL SELECT 42,110,'banner-105-chocolate','eec','impression','sendData'
UNION ALL SELECT 42,110,'banner-105-chocolate','eec','impression','sendData'
)
SELECT
  *
, event_name()
, pattern_id()
, match_id()
FROM ga_sessions_hits_product_expanded
MATCH(
  PARTITION BY unique_visit_id ORDER BY hit_number
  DEFINE
    search AS event_category='Search' AND event_action='Submit'
  , banner AS product_list ILIKE 'banner-%' AND event_action='impression'
  , other AS true
  PATTERN p AS (search+ other* banner+)
  ROWS MATCH FIRST EVENT
);
-- out Null display is "NULL".
-- out  unique_visit_id | hit_number |     product_list     | Event_Category | Event_Action |  Event_Label  | event_name | pattern_id | match_id 
-- out -----------------+------------+----------------------+----------------+--------------+---------------+------------+------------+----------
-- out               42 |        105 | NULL                 | Search         | Submit       | chocolate     | search     |          1 |        1
-- out               42 |        106 | NULL                 | eec            | impression   | search-result | other      |          1 |        2
-- out               42 |        107 | search-result        | eec            | impression   | sendData      | other      |          1 |        3
-- out               42 |        107 | search-result        | eec            | impression   | sendData      | other      |          1 |        4
-- out               42 |        107 | search-result        | eec            | impression   | sendData      | other      |          1 |        5
-- out               42 |        107 | search-result        | eec            | impression   | sendData      | other      |          1 |        6
-- out               42 |        108 | NULL                 | NULL           | NULL         | NULL          | other      |          1 |        7
-- out               42 |        109 | NULL                 | eec            | impression   | banner        | other      |          1 |        8
-- out               42 |        110 | banner-105-chocolate | eec            | impression   | sendData      | banner     |          1 |        9
-- out               42 |        110 | banner-105-chocolate | eec            | impression   | sendData      | banner     |          1 |       10
-- out               42 |        110 | banner-105-chocolate | eec            | impression   | sendData      | banner     |          1 |       11
-- out (11 rows)
-- out 
-- out Time: First fetch (11 rows): 50.632 ms. All rows formatted: 50.721 ms
...