我可以将 Crashlytics 中的 JSON 字段作为 BigQuery 中的“where”指令进行查询吗?
Posted
技术标签:
【中文标题】我可以将 Crashlytics 中的 JSON 字段作为 BigQuery 中的“where”指令进行查询吗?【英文标题】:Can I query a JSON field from Crashlytics as a "where" directive in BigQuery? 【发布时间】:2021-12-13 20:57:06 【问题描述】:我已经为此搜索过,发现了许多类似的问题,但我不太清楚如何将它们应用到我的场景中。
我们已将 Google Crashlytics 链接到 BigQuery。
鉴于下表数据(为清楚起见删除了许多列):
TABLE firebase_crashlytics.com_foo_ios
is_fatal | application
======================
true | "v":"f":["v":"53","v":"0.9.1"]
false | "v":"f":["v":"71","v":"1.0.0"]
true | "v":"f":["v":"72","v":"1.0.1"]
我已经尝试了很多建议,但似乎无法成功。
我想查询 com_foo_ios 表中所有is_fatal
等于true
且应用程序版本(application
的第二个数组元素)高于1.0.0
的记录。或者,我可以使用版本号,因为它是版本独有的。
所以我的问题是:
这可以通过 SQL 查询来完成,而不必像 Berlyant's reply here 中建议的那样编写自定义函数,这对我不起作用。
有趣的是,我看到的错误表明application
数组的两个元素被标识为build_version
和display_name
。我也尝试在查询中使用它们,但无济于事。
使用上面的示例数据,任何人都可以提出一种查询此信息的简单方法吗?
【问题讨论】:
您能澄清一下您在使用自定义函数时遇到的错误吗?您能详细说明build_version
和display_name
的来源吗?
【参考方案1】:
使用上面的示例数据,任何人都可以提出一种查询此信息的简单方法吗?
select t.*,
json_extract_scalar(_[offset(0)], '$.v') as col1,
json_extract_scalar(_[offset(1)], '$.v') as col2
from your_table t,
unnest([struct(json_extract_array(application, '$.v.f') as _)])
如果应用于您问题中的样本数据
with your_table as (
select true is_fatal, '"v":"f":["v":"53","v":"0.9.1"]' application union all
select false, '"v":"f":["v":"71","v":"1.0.0"]' union all
select true, '"v":"f":["v":"72","v":"1.0.1"]'
)
输出是
嗯,转储数据模型显示 'application: STRUCT
'
所以看起来您的表架构实际上就像下面的示例中一样
with your_table as (
select true is_fatal, struct('53' as buildversion, '0.9.1' as display_version) application union all
select false, struct('71' as buildversion, '1.0.0' as display_version) union all
select true, struct('72' as buildversion, '1.0.1' as display_version)
)
如果是这样 - 使用下面来获取特定字段
select is_fatal, application.*
from your_table t
有输出
【讨论】:
好的,我尝试了您的建议,但出现错误。我必须在最后一行的“应用程序”前面加上t.
,因为应用程序本身无法解析。当我运行查询(通过 DataGrip)时,我收到以下错误:``` 执行查询作业时出错。消息:对于参数类型的函数 JSON_EXTRACT_ARRAY 没有匹配的签名:STRUCT以上是关于我可以将 Crashlytics 中的 JSON 字段作为 BigQuery 中的“where”指令进行查询吗?的主要内容,如果未能解决你的问题,请参考以下文章
将 LogCat 日志添加到 Firebase Crashlytics
将 Firebase Crashlytics 与 Prometheus 集成
没有 google-services.json 和 google play 服务的 Firebase crashlytics