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

标签 sql firebase google-bigquery firebase-analytics

我们使用 firebase 分析和 bigQuery 对收集的数据运行 sql 查询。这变得很复杂,因为诸如 event_params 之类的某些字段是重复记录。我想将这些重复字段中的每一个映射到单独的列。

Repeated Record example

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

最佳答案

I want to map each of these repeated fields to separate column.



将参数转入列的方向在概念上是可行的,但(在我看来)在大多数实际情况下是“死胡同”
这里有很多关于 SO 的帖子展示了如何将行转置/转置为列,模式是 1)您只是对查询中的所有可能的键进行硬编码),显然没有人喜欢这个)或 2)您创建了提取所有内容的实用程序查询您的 key 和契约(Contract)需要为您查询,然后您需要执行 - 因此您可以分两步手动完成,或者使用您选择的客户端将这些脚本编写为以自动方式运行的步骤
正如我所提到的 - 在 SO 上有很多这样的例子

I want to write queries in the above dataset like finding the difference between minIso and 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))  

结果为
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   
...

虚拟示例 : 保持整个 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)) 

This is turning out to be complex as some fields like event_params are repeated records. I want to map each of these repeated fields to separate column.



希望,从上面的例子中,你可以看到处理重复字段是多么简单。我真的建议你学习/练习 work with arrays获得长期利益,而不是寻找 [错误地] 看起来像的捷径

关于sql - 如何将 firebase 分析 sql 中的每个参数映射到单独的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52481014/

相关文章:

sql - SQL Server T-SQL 中的整数最大值常量?

firebase - Flutter + Firebase Cloud Functions - 如何从 HttpsCallableResult 获取数据

python - BigQuery : "unexpected LIMIT clause at:" error when using list query job

ios - Firebase + Swift 在 TableView 中删除行

md5 - 是否可以在BigQuery中使用MD5进行哈希处理?

csv - Bigquery 日期时间格式 csv 到 bigquery YYYY-MM-DD HH :MM[:SS[. SSSSSS]]

sql - 您可以在 select 命令中创建一个 case 语句来评估两个不同的表字段吗?

sql - 为什么用 "extra"列进行数据透视不合并结果

c# - 当我循环读取数据库中的行时,如何更新它们?

javascript - 为老用户更新 firebase service-workers