首页 文章

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

提问于
浏览
1

我们最近在其中一个游戏中实施了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上获得结果的帮助都将受到高度赞赏 .

谢谢!

此致,Tejas

1 回答

  • 1

    以下是BigQuery Standard 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')
    

相关问题