首页 > 解决方案 > BigQuery - 查找所有记录中存在的数据

问题描述

我已将 firebase 导入 BigQuery。

我想要做的是,找到总是执行某些事件的特定设备(firebase 交互记录)。这意味着,每当这些设备被记录在 firebase 中时,event_dim.name 将包含至少一个该事件类型的条目。

例如,考虑以下查询,其中包含来自 ( Link ) 的样本数据:

#standardSQL
SELECT 
  user_dim.app_info.app_instance_id,
  event_dim
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`

假设这有数据,如

+------------------+--------------------+
| app_instance_id  | event_dim.name     |
+------------------+--------------------+
| 1234             | os_update          |
|                  | initialized_rh_api |
+------------------+--------------------+
| 1234             | os_update          |
+------------------+--------------------+
| 5678             | os_update          |
|                  | initialized_rh_api |
+------------------+--------------------+
| 5678             | other_action       |
+------------------+--------------------+

我想进行查询以获取单个“app_instance_id”的列表,其中他们的 event_dim.name 包含“os_update”。根据此标准,对于上述项目,1234会匹配,但5678不会。

谢谢。可能真的很简单,但我找不到方法。我可以找到包含该条目的每条记录,但无法消除没有它的条目。

标签: sqlfirebasegoogle-bigquery

解决方案


我会使用聚合:

SELECT user_dim.app_info.app_instance_id    FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`
GROUP BY user_dim.app_info.app_instance_id
HAVING SUM(CASE WHEN event_dim.name NOT LIKE '%os_update%' THEN 1 ELSE 0 END) = 0;

HAVING子句计算不匹配的事件数。= 0说没有。


推荐阅读