在 Firebase (BigQuery) 中的一个/多个事件中获取多个参数的唯一计数

Posted

技术标签:

【中文标题】在 Firebase (BigQuery) 中的一个/多个事件中获取多个参数的唯一计数【英文标题】:Getting unique counts of multiple parameters in one / multiple events in Firebase (BigQuery) 【发布时间】:2017-10-22 18:25:11 【问题描述】:

我们最近在我们的一款游戏中实施了 Firebase,并在同一游戏中配置了多个自定义事件和每个事件的参数。事件的结构与 Firebase BigQuery DB (Link) 中定义/共享的结构相同

目前,我正在使用以下查询来取出数据:

  SELECT
  user_dim.app_info.app_instance_id AS id,
  (
  SELECT
    param.value.int_value
  FROM
    UNNEST(event_dim.params) AS param
  WHERE
    param.key = 'x') AS x,
  (
  SELECT
    param.value.int_value
  FROM
    UNNEST(event_dim.params) AS param
  WHERE
    param.key = 'y') AS y,
  (
  SELECT
    param.value.string_value
  FROM
    UNNEST(event_dim.params) AS param
  WHERE
    param.key = 'z') AS z
FROM
  `firebase_dataset`
CROSS JOIN
  UNNEST(event_dim) AS event_dim
WHERE
  event_dim.name = 'event_name';

这给出了所述事件中参数的所有数据的列表。例如,

id   x   y      z
1   100 1000    abc
1   200 1500    def
1   300 2000    ghi
1   400 2500    klm
2   100 1000    abc
2   200 1500    def
3   100 1000    abc
4   100 1000    abc
4   200 1500    def
4   300 2000    ghi

然后,我们取出 CSV,然后分别取出 x、y 和 z 的计数或出现 x、y 或 z 的“id”的唯一计数。

例如,

X   Count of id
100     4
200     3
300     2
400     1

我知道可以直接通过查询获取唯一计数/超出计数值,但我无法弄清楚 bigquery 中的多个参数如何使用。

我假设更好的查询将有助于减少运行时间,但不会像数据集那样改变被查询的数据以获得最终结果不会有太大变化。

对于如何直接在 BigQuery 上生成结果的任何帮助,我们将不胜感激。

谢谢!

问候, 光辉

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT 
  param.key key,
  IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
  COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt 
FROM `firebase_dataset`, 
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'event_name';
GROUP BY key, value
HAVING key IN ('x', 'y', 'z')   

您可以使用您在问题中引用的公共数据集测试/使用它,如下所示

#standardSQL
SELECT 
  param.key key,
  IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value) value,
  COUNT(IFNULL(CAST(param.value.int_value AS STRING), param.value.string_value)) cnt 
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`, 
UNNEST(event_dim) AS event_dim, UNNEST(event_dim.params) AS param
WHERE event_dim.name = 'select_content' 
GROUP BY key, value
HAVING key IN ('content_type', 'item_id', 'firebase_event_origin')

【讨论】:

嗨,米哈伊尔,感谢您的回复。我还不能正确地尝试这个。我在我们自己的数据集上尝试过一次,但无法获得所需的结果。明天我将尝试几次迭代,并更新您提供的解决方案。再次感谢您。 嗨,米哈伊尔,感谢您的回复。我尝试了查询并且它有效。但是,我可能想尝试几种不同的迭代。我稍后会发布一个不同的问题。已将您的答案选为这种情况下的最佳答案。 已投票。但是由于我目前的声誉很低,因此不会公开显示。 :) (长时间观看者第一次发帖问题:)) 我明白了。没问题。继续发帖:o) 嗨,米哈伊尔,您能帮忙回答以下问题吗?这是一个类似的问题,但是它也涉及参数而不是事件名称。 ***.com/q/48544392/3898958

以上是关于在 Firebase (BigQuery) 中的一个/多个事件中获取多个参数的唯一计数的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Firebase中的MAU?我需要BigQuery吗?

无法为 Firebase 中的 bigquery 链接启用谷歌分析

Firebase Analytics BigQuery 中的归因

如何计算 Firebase 中的 MAU?我需要 BigQuery 吗?

Firebase BigQuery 导出架构大小差异

从firebase传输后bigquery表中的数据是不是被覆盖?