sql - 根据 event.key 统计 BigQuery event.params
问题描述
我正在尝试计算根据其参数过滤的事件。
例如,假设我有以下内容。对于那些好奇的人来说,这是真正的。 https://i.imgur.com/rPwmR9i.png
event_date | event_timestamp | event_name | event_params.key | event_params.value.string_value
-----------------------------------------------------------------------------------------------
some_date | some_timestamp | some_name | some_key_1 | some_string_1
| some_key_2 | some_string_2
| some_key_3 | some_string_3
| some_key_4 | some_string_4
event_params.key 和 event_params.value 是一个值数组。我需要过滤掉该数组中与我的密钥不匹配的任何内容。此外,我需要计算特定字符串值的每次出现。我试图做类似以下的事情:
SELECT DISTINCT event_name,
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'relationship_lenght') AS Length,
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'relationship_location') AS Location,
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'relationship_gender') AS Gender
FROM `stormbreaker-studios.analytics_243434300.events_20200902`
WHERE
event_name = 'relationship_created_gender' OR
event_name = 'relationship_created_location' OR
event_name = 'relationship_created_interests'
LIMIT 10
它返回null
所有列。我期望得到的是沿着这条线的东西,水平或垂直,没有区别。
预期产出
Male | Female | Trans | Non-Binary | New York | San Antonio | 1-5mo | 5-10mo |
------------------------------------------------------------------------------
10 | 11 | 1 | 3 | 3 | 17 | 1 | 61 |
每列的每一Count
列都派生自上例中关联的值some_key
。该值是静态的,来自已知的列表。例如, 的值relationship_gender
可能是Male
,Female
等。我会比较以匹配它。
解决方案
我通常会像这样构造您的查询:
with temp as (
select * from `project.dataset.table`
left join unnest(event_params) ep
where event_name in('relationship_created_gender',
'relationship_created_location',
'relationship_created_interests')
),
logic as(
select
case when key = 'relationship_gender' and value.string_value = 'Male' then 1 else 0 end as gender_male,
case when key = 'relationship_gender' and value.string_value = 'Female' then 1 else 0 end as gender_female,
... etc
case when key = 'relationship_location' and value._value = 'New York' then 1 else 0 end as location_ny,
... etc
from temp
)
select
sum(gender_male) as Male,
sum(gender_female) as Female,
...etc
from logic
您可能需要根据您要计算的内容是否为string_value
orint_value
格式进行一些调整。如果你有一个 unique event_id
,我会count distinct
这样而不是 summing 1
s。
推荐阅读
- jquery - Not able to click/select element using JQuery in Laravel Dusk
- javascript - Is there a way to run a line of code after a marquee has finished scrolling once?
- highcharts - Combined Chart Highcharts Pie plus Bar grouppadding and pointapadding issue
- javascript - 为什么函数返回未定义?
- java - 无法在 CentOS 7 上执行 java 程序
- python - 在 Python 中更改颜色映射上的数字大小
- docker - Docker cli:带有引用参数的 docker run 命令
- spring-boot - 我们可以更改 Azure 广告中的 Redirect_uri
- postgresql - 将 100 万个随机数据插入 PostgreSQL
- google-drive-api - Google Drive list API - 空列表