如何将firebase analytics sql中的每个参数映射到单独的列?

Mit*_*dal 5 sql firebase google-bigquery firebase-analytics

我们使用firebase analytics和bigQuery对收集的数据运行sql查询.事实证明这很复杂,因为像event_params这样的一些字段是重复的记录.我想将这些重复的每个字段映射到单独的列.

重复记录示例

我想在上面的数据集中编写查询,比如找到minIso和maxIso之间的差异.如何定义UDF或可以返回列模式中的表的视图?

Mik*_*ant 6

我想将这些重复的每个字段映射到单独的列.

将旋转参数的方向转化为概念上可行的列但是(在我看来)在大多数实际情况中是"死胡同"
这里有很多帖子,显示如何将行转移/转置到列,模式是1)你只是硬编码你的查询中的所有可能的键),显然没有人喜欢这个)或2)你创建实用程序查询,为你提取所有密钥和合同所需的查询,然后你需要执行 - 所以要么你手动执行两个步骤或您使用您选择的客户端编写脚本以自动化方式运行的步骤
正如我所提到的 - 这里有很多这样的例子

我想在上面的数据集中编写查询,比如找到minIso和maxIso之间的差异

如果您只需要在记录中使用少量参数进行数学计算 - 请参见下面的示例

虚拟示例:对于每个app_instance_idtween查找coins_awarded和之间的差异xp_awarded

#standardSQL
SELECT user_dim.app_info.app_instance_id,  ARRAY(
  SELECT AS STRUCT name,
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'coins_awarded') -
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'xp_awarded') diff_awarded
  FROM UNNEST(event_dim) dim
  WHERE dim.name = 'round_completed'  
  ) AS event_dim
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`
WHERE 'round_completed' IN (SELECT name FROM UNNEST(event_dim))  
Run Code Online (Sandbox Code Playgroud)

结果为

Row     app_instance_id                     event_dim.name      event_dim.diff_awarded   
1       02B6879DF2639C9E2244AD0783924CFC    round_completed     226  
2       02B6879DF2639C9E2244AD0783924CFC    round_completed     171  
3       0DE9DCDF2C407377AE3E779FB05864E7    round_completed     25   
...
Run Code Online (Sandbox Code Playgroud)

虚拟示例:保持整个user_dim不变,但将event_dim替换为仅计算的值

#standardSQL
SELECT * REPLACE(ARRAY(
  SELECT AS STRUCT name,
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'coins_awarded') -
    (SELECT value.int_value FROM UNNEST(dim.params) param WHERE key = 'xp_awarded') diff_awarded
  FROM UNNEST(event_dim) dim
  WHERE dim.name = 'round_completed'  
  ) AS event_dim)
FROM `firebase-analytics-sample-data.ios_dataset.app_events_20160607`
WHERE 'round_completed' IN (SELECT name FROM UNNEST(event_dim)) 
Run Code Online (Sandbox Code Playgroud)

事实证明这很复杂,因为像event_params这样的一些字段是重复的记录.我想将这些重复的每个字段映射到单独的列.

希望,从上面的例子中,你可以看到处理重复字段是多么简单.我确实建议你学习/练习使用数组来获得长期的好处,而不是寻找[错误]看起来像快捷方式的东西