Firebase 如何在联接结构中使用UNNEST?

Firebase 如何在联接结构中使用UNNEST?,firebase,google-bigquery,bigquery-standard-sql,Firebase,Google Bigquery,Bigquery Standard Sql,在Google BigQuery中使用UNNEST函数处理连接结构中的数组时,我遇到了一些问题 根据谷歌BigQuery中的Firebase数据,我可以查询我的移动应用程序的每月活跃用户数(MAU)。而且效果很好 然后,我尝试统计完成特定事件的用户数,这也起到了作用 然而,当我试图通过它的参数(保存在数组中)过滤事件时,我遇到了在连接结构中使用UNNEST函数的问题 参数: event_params.key = 'isCommented' 及 如果没有UNNEST函数,我遇到以下错误: Ca

在Google BigQuery中使用UNNEST函数处理连接结构中的数组时,我遇到了一些问题

根据谷歌BigQuery中的Firebase数据,我可以查询我的移动应用程序的每月活跃用户数(MAU)。而且效果很好

然后,我尝试统计完成特定事件的用户数,这也起到了作用

然而,当我试图通过它的参数(保存在数组中)过滤事件时,我遇到了在连接结构中使用UNNEST函数的问题

参数:

event_params.key = 'isCommented' 

如果没有UNNEST函数,我遇到以下错误:

Cannot access field key on a value with type 
ARRAY<STRUCT<key STRING, value STRUCT<string_value STRING, int_value INT64, float_value FLOAT64, ...>>> at [32:20]
在联接结构中使用UNNEST时,如何使用UNNEST


非常感谢

执行数组筛选的更好方法不是使用
unest
。请同时使用
存在
不存在

比如说

WHERE
  EXISTS(SELECT 1 FROM UNNEST(event_params) WHERE key = 'isCommented' AND value.string_value = 'true')
进行数组子查询过滤的优点是它不会破坏粒度,从而使查询更具可读性

WITH
  calendar AS (
  SELECT
    day
  FROM
    UNNEST(GENERATE_DATE_ARRAY( (
        SELECT
          MIN(PARSE_DATE('%Y%m%d',
              event_date))
        FROM
          `***`.`***`.`***`), (
        SELECT
          MAX(PARSE_DATE('%Y%m%d',
              event_date))
        FROM
          `***`.`***`.`***`), INTERVAL 1 DAY) ) AS day )
SELECT
  c.day AS date,
  COUNT(DISTINCT m.user_pseudo_id ) AS MAU
  --  UNNEST(event_params) AS event_params1
FROM
  calendar AS c
JOIN
  `***`.`***`.`***` AS m
ON
  parse_DATE('%Y%m%d',
    m.event_date) BETWEEN DATE_SUB(c.day, INTERVAL 30 DAY)
  AND c.day
WHERE
  event_name = 'eventCreation'
  AND event_params.key = 'isCommented'
  AND event_params.value.string_value = 'true'
GROUP BY
  date
ORDER BY
  date
WHERE
  EXISTS(SELECT 1 FROM UNNEST(event_params) WHERE key = 'isCommented' AND value.string_value = 'true')