使用 TABLE_DATE_RANGE 为 Firebase Analytics 查询多个表中的多个参数
Posted
技术标签:
【中文标题】使用 TABLE_DATE_RANGE 为 Firebase Analytics 查询多个表中的多个参数【英文标题】:Query multiple params in multiple tables with TABLE_DATE_RANGE for Firebase Analytics 【发布时间】:2017-01-24 10:23:15 【问题描述】:我打算从应用程序中的事件中获取文章中播放次数最多的音频的统计信息。如果我发送 articleId 和已播放的 audioID。
我想获得这样的结果行,按出现次数排序:
| ID of the article | ID of the audio | number of occurrences
由于 firebase 分析以日记形式导出到 bigquery,并且我希望每月获得这些事件,因此我创建了一个查询,该查询从多个表中获取值,并将其与我在 this 线程中找到的信息混合在一起。
结果查询是:
SELECT
(SELECT params.value.int_value FROM x.params
WHERE params.key = 'Article_ID') AS Article_ID,
(SELECT params.value.int_value FROM x.params
WHERE params.key = 'Audio_ID') AS Audio_ID,
COUNT(event_dim.name) as Number_Of_Plays
FROM
TABLE_DATE_RANGE([project-id:my_app_id.app_events_], DATE_ADD(CURRENT_TIMESTAMP(), -30, 'DAY'), CURRENT_TIMESTAMP()), UNNEST(event_dim) AS x
WHERE event_dim.name = 'Audio_Play'
GROUP BY Audio_ID, Article_ID
ORDER BY Number_Of_Plays desc
不幸的是,这个查询没有被正确解析,给我一个错误:
Error: Table name cannot be resolved: dataset name is missing.
RUN QUERY
我很确定这个问题与查询一个范围内的多个表有关,但不知道如何解决它。谢谢。
【问题讨论】:
【参考方案1】:您引用的另一个答案是使用 StandardSQL,而您正在尝试使用仅在 LegacySQL 中可用的 TABLE_DATE_RANGE。
这是标准 SQL 中的查询,允许您使用多个表
#standardSql
SELECT
(SELECT params.value.int_value FROM x.params
WHERE params.key = 'Article_ID') AS Article_ID,
(SELECT params.value.int_value FROM x.params
WHERE params.key = 'Audio_ID') AS Audio_ID,
COUNT(event_dim.name) as Number_Of_Plays
FROM
`project-id:my_app_id.app_events_*`, UNNEST(event_dim) AS x
WHERE _TABLE_SUFFIX BETWEEN cast(DATE_ADD(current_date(), INTERVAL -30 DAY) as string) AND cast(current_date() as string)
AND event_dim.name = 'Audio_Play'
GROUP BY Audio_ID, Article_ID
ORDER BY Number_Of_Plays desc
查看这个 From 子句:project-id:my_app_id.app_events_*
和 WHERE _TABLE_SUFFIX BETWEEN
语法行。
【讨论】:
哦,谢谢,我会在几个小时内对其进行测试,并接受它是否正常工作!也感谢有关标准 SQL 的提示。遗憾的是,错误并没有针对语法说明这样的内容。以上是关于使用 TABLE_DATE_RANGE 为 Firebase Analytics 查询多个表中的多个参数的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery 中的动态 TABLE_DATE_RANGE
bigquery 数据集名称以数字和 TABLE_DATE_RANGE 开头
在 BigQuery 中使用 TABLE_DATE_RANGE 函数
格式化 TABLE_DATE_RANGE() BigQuery 的时间戳输出