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

Query multiple params in multiple tables with TABLE_DATE_RANGE for Firebase Analytics

我打算从应用程序中的事件中获取文章中播放次数最多的音频的统计信息。如果我发送articleId和播放过的audioID。

我想获得这样按出现次数排序的结果行:

| ID of the article | ID of the audio | number of occurrences

由于 firebase 分析以日记形式导出到 bigquery,并且我希望每月发生这些事件,因此我创建了一个查询,该查询从多个表中获取值,并将其与我在 线程中找到的信息混合。

结果查询是:

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

我很确定这个问题与查询一个范围内的多个表有关,但不确定如何解决它。谢谢。

您引用的另一个答案是使用标准SQL,而您正在尝试使用仅在旧版SQL.

中可用的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 语法行。