我们使用 firebase 分析和 bigQuery 对收集的数据运行 sql 查询。这变得很复杂,因为诸如 event_params 之类的某些字段是重复记录。我想将这些重复字段中的每一个映射到单独的列。
我想在上面的数据集中编写查询,比如找到 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/