使用TABLE_DATE_RANGE为Firebase Analytics查询多个表中的多个参数

时间:2017-01-24 10:23:15

标签: sql firebase google-bigquery firebase-analytics

我打算从应用程序中的事件中获取文章中大多数播放音频的统计信息。如果我发送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 个答案:

答案 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语法行。