如何在 Google BigQuery 中使用 UNNEST 函数获取 COUNT?

Posted

技术标签:

【中文标题】如何在 Google BigQuery 中使用 UNNEST 函数获取 COUNT?【英文标题】:How to get COUNT with UNNEST function in Google BigQuery? 【发布时间】:2018-08-02 07:51:02 【问题描述】:

我需要获取其中具有特定参数的事件的计数。假设,我有参数 event_notification_received 和参数(类型、标题、code_id)。在参数 code_id - 我有唯一的广告名称。我需要计算使用此类参数接收到多少事件。我正在使用 UNNEST 函数来访问事件的参数。但它在执行后给出了太多的结果,我认为这是因为 UNNEST 函数。如何正确计算事件?谢谢。

这是我的标准 SQL 查询:

#standardSQL
SELECT event_date, event_timestamp, event_name, user_id, app_info.version, 
geo.country, geo.region, geo.city,  
my_event_params, 
user_prop,
platform
FROM 
`myProject.analytics_199660162.events_201807*`,
UNNEST(event_params) as my_event_params,
UNNEST(user_properties) as user_prop

WHERE
_TABLE_SUFFIX BETWEEN '24' AND '30' AND
event_name = "event_notification_received"

AND
my_event_params.value.string_value = "my_adverticement_name"

AND
platform = "android"

ORDER BY event_timestamp DESC

【问题讨论】:

目前还不清楚输出中究竟期望什么而不是计数!是单数吗? 【参考方案1】:

这是你想要的吗?

SELECT . . .,
       (SELECT COUNT(*)
        FROM UNNEST(event_params) as my_event_params
        WHERE my_event_params.value.string_value = 'my_adverticement_name'
       ) as event_count
FROM `myProject.analytics_199660162.events_201807*`,
      UNNEST(user_properties) as user_prop
WHERE _TABLE_SUFFIX BETWEEN '24' AND '30' AND
      event_name = 'event_notification_received' AND
      platform = 'ANDROID'
ORDER BY event_timestamp DESC;

【讨论】:

【参考方案2】:

如果您 UNNEST()CROSS JOINFROM 级别超过两列,您将获得重复的行 - 是的。

取而代之的是UNNEST() SELECT 级别,只是为了提取和COUNT 您正在寻找的值:

SELECT COUNT(DISTINCT (
    SELECT value.string_value FROM UNNEST(user_properties) WHERE key='powers')
  ) AS distinct_powers
FROM `firebase-sample-for-bigquery.analytics_bingo_sample.events_20160607` 

【讨论】:

如果你在公共数据集上做一个例子,我也可以测试它。

以上是关于如何在 Google BigQuery 中使用 UNNEST 函数获取 COUNT?的主要内容,如果未能解决你的问题,请参考以下文章

在 google bigquery 中,如何使用 google python 客户端使用 javascript UDF

如何使用 Bigquery 在 Google Bigquery 中进行身份验证,而无需使用服务帐户进行用户输入

处理 bigquery 中的坏行

如何在 Google 的 Bigquery 中获取最频繁的值

如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?

使用 Google Datalab,如何在 Google BigQuery 中使用 UDF 从复杂查询创建表?