如何 运行 可以整理 2 个事件之间唯一数据的 BigQuery 查询

How to run a BigQuery query that can collate unique data between 2 events

我正在尝试查询数据库以获取有关已完成 2 个操作的用户的数据。

例如:

event_1 = "clicked_on_feedback" : event_params.key = "rating"
event_2 = "burger_chosen"       : event_params.key = "burger_type"

现在我想看看给出负面反馈的用户他们选择订购什么类型的汉堡? 我如何为具有不同 param_keys 的不同事件执行此操作?

我能够获取给出负面评价的用户列表

SELECT user_id,event_name, param.value.string_value AS rating FROM `table.events_*`,
UNNEST(event_params) AS param
where event_name IN ("clicked_on_feedback")
AND event_timestamp >
      UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 10 DAY))
AND param.key = "rating"

结果

user_id  event_name          rating
abcxxx   clicked_on_feedback 1
abcdxx   clicked_on_feedback 2

我如何为这组用户获取他们在同一时间间隔内选择订购的汉堡类型?

预计:

user_id    event_name_1          rating   event_name_2       burger_type
abcxxx     clicked_on_feedback   1        burger_chosen      triple_decker
abcdxx     clicked_on_feedback   2        burger_chosen      cheesy_chicken

只需连接两个 SELECT 语句,您可以将其定义为两个 CTE:一个用于 rating,另一个用于 burger_chosen。下面是一个未经测试的 SQL 查询,需要对 table 和字段进行必要的调整。

WITH rate AS
 (SELECT user_id, event_name, param.value.string_value AS rating 
  FROM `table.events_*`, UNNEST(event_params) AS param
  WHERE event_name IN ("clicked_on_feedback")
    AND event_timestamp > UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 10 DAY))
    AND param.key = "rating"
 ), brgr AS 
 (SELECT user_id, event_name, param.value.string_value AS burger_type
  FROM `table.events_*`, UNNEST(event_params) AS param
  WHERE event_name IN ("burger_chosen")
    AND event_timestamp > UNIX_MICROS(TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 10 DAY))
    AND param.key = "burger_type")

SELECT rate.user_id, rate.event_name AS event_name_1, rate.rating,
       brgr.event_name AS event_name_2, brgr.burger_type
FROM rate  
INNER JOIN brgr ON rate.user_id = brgr.user_id