我打算从应用程序中的事件中获取文章中大多数播放音频的统计信息。如果我发送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
我很确定该问题与查询范围内的多个表有关,但不确定如何修复它。感谢。
答案 0 :(得分: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
语法行。