BigQuery - 根据另一个事件参数选择事件参数值

Posted

技术标签:

【中文标题】BigQuery - 根据另一个事件参数选择事件参数值【英文标题】:BigQuery - Select event param value based on another event param 【发布时间】:2019-01-24 00:02:16 【问题描述】:

在我的应用程序中,每当用户打开某个视图时,我都会向 Firebase 分析发送一个事件“content_view”。此事件有两个与之关联的事件参数:content_type 和 title。 content_type 始终是“音频”、“故事”、“视频”或“图像”,然后标题是不言自明的。

然后该数据进入 Big Query。

在 Big Query 中,我想按标题和事件数列出观看次数最多的 5 个视频。我可以按标题获得前 5 个事件,但我不知道如何仅对 content_type = 'video' 的事件执行此操作。

有没有办法构建一个返回类似内容的查询?

+---------+-------------+--------------+
|  Title  | Total Views | Content Type |
+---------+-------------+--------------+
| Video 1 |        1000 | video        |
| Video 2 |         900 | video        |
| Video 3 |         800 | video        |
| Video 4 |         700 | video        |
| Video 5 |         600 | video        |
+---------+-------------+--------------+

【问题讨论】:

提示:WHERE content_type = 'video' ??? 你能提供你的表的架构吗? 我添加了架构。问题是 firebase 在 event_params 字段中发送所有这些事件参数。所以 content_type 和 title 都是 event_params 中的键。我很确定我需要做某种类型的 UNNEST。然后我就迷路了。 【参考方案1】:

以下适用于 BigQuery 标准 SQL,基于您提供的(并经过测试)架构

#standardSQL
SELECT 
  (
    SELECT MAX(IF(key = 'title', value.string_value, NULL)) title
    FROM UNNEST(event_params) param 
    WHERE (key = 'content_type' AND value.string_value = 'video')
    OR key = 'title'
    HAVING COUNT(1) = 2
  ) Title,
  COUNT(1) TotalViews
FROM `project.dataset.table`
GROUP BY Title
HAVING NOT title IS NULL
ORDER BY TotalViews DESC
LIMIT 5

【讨论】:

非常感谢。这正是我一直在寻找的。如果可能的话,你能解释一下“HAVING COUNT(1) = 2”在做什么吗? 当然,很快就会回来并添加一些解释:o) @user3321348 - 抱歉,这个行动项目丢失了,现在才想起我欠你一些解释 - 明天结束前会努力做到 - 今天太忙了 HAVING COUNT(1) = 2 确保只选择那些同时具有 (2) 条件 `contenttype=video 并且有 key=type 条目的行。您可以删除此子句并查看结果将如何更改 :o)【参考方案2】:

修改以适合您的列名和项目/数据集/表名称的名称:

SELECT title, total_views, content_type
FROM `myproject.mydataset.mytable`
WHERE content_type = 'video'

【讨论】:

我用架构编辑了问题。 Firebase 正在发送这些事件,而 content_type 和 title 是 event_param 字段的一部分,我猜这是某种类型的数组。

以上是关于BigQuery - 根据另一个事件参数选择事件参数值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL Bigquery 中的另一个事件之前计算特定事件的数量?

BigQuery UDF 在另一个表中查找最大值

在 Firebase (BigQuery) 中的一个/多个事件中获取多个参数的唯一计数

在 BigQuery 中选择具有不同 2 列的最新事件

BigQuery 结果为 iOS 设备的事件的参数值显示“null”,但在 DebugView 中填充

BigQuery 中的事件表是不是根据 event_timestamp 或服务器日志时间填充?