我正在使用Pivot函数查询BigQuery表,并注意到与原始表相比,Pivot结果中缺少一些行.汇总不同事件名称的事件计数是一个非常基本的查询.
透视查询如下所示:
SELECT *
FROM (SELECT *
FROM `my-project.my-dataset.my-table`
WHERE date = "2023-05-15")
PIVOT (SUM(eventcount) AS convs
FOR eventname IN ("page_view",
"select_item",
"view_item",
"Store_List_event"))
ORDER BY date,
useragebracket,
usergender
与简单的SELECT *
相比,Pivot查询一天中缺少一些行.我能够找到丢失的行,但没有一致的模式来解释为什么这些行没有正确显示,此外,一些列的值与其他行非常相似.
下面是一个Souretable示例:
date | eventname | useragebracket | usergender | eventcount | screenpageviews | sessions | totalusers |
---|---|---|---|---|---|---|---|
2023-05-15 | page_view | x-y | xyz | 1348 | 1348 | 194 | 175 |
2023-05-15 | view_item | x-y | xyz | 34 | 0 | 15 | 15 |
2023-05-15 | select_item | x-y | xyz | 38 | 0 | 15 | 15 |
2023-05-15 | Store_List_event | x-y | xyz | 47 | 0 | 15 | 15 |
该查询给出了以下结果:
date | useragebracket | usergender | screenpageviews | sessions | totalusers | convs_page_view | convs_select_item | convs_view_item | convs_Store_List_event |
---|---|---|---|---|---|---|---|---|---|
2023-05-15 | x-y | xyz | 1348 | 194 | 175 | 1348 | null | null | null |
2023-05-15 | x-y | xyz | 0 | 15 | 15 | null | 38 | 34 | 47 |
我的理解是,因为在周围的SELECT查询中没有group by
语句,所以每个单独的事件名的每一行都应该返回,并且始终只填充一个透视列.除了some个事件名称之外,这似乎是可行的,但这些事件名称每天都是不同的名称.唯一的相似之处似乎是这些行的会话/用户数.
根据这一 idea ,我预计会有以下输出:
date | useragebracket | usergender | screenpageviews | sessions | totalusers | convs_page_view | convs_select_item | convs_view_item | convs_Store_List_event |
---|---|---|---|---|---|---|---|---|---|
2023-05-15 | x-y | xyz | 1348 | 194 | 175 | 1348 | null | null | null |
2023-05-15 | x-y | xyz | 0 | 15 | 15 | null | 38 | null | null |
2023-05-15 | x-y | xyz | 0 | 15 | 15 | null | null | 34 | null |
2023-05-15 | x-y | xyz | 0 | 15 | 15 | null | null | null | 47 |
谁能解释一下这种行为,并告诉我如何避免这种行为?