我可以将 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_versiondisplay_name。我也尝试在查询中使用它们,但无济于事。

使用上面的示例数据,任何人都可以提出一种查询此信息的简单方法吗?

【问题讨论】:

您能澄清一下您在使用自定义函数时遇到的错误吗?您能详细说明build_versiondisplay_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, STRING。支持的签名:JSON_EXTRACT_ARRAY(STRING, [STRING]) ``` 当然。那么它对你有用吗? 还没有。我更新了我的评论。 当 Crashlytics 数据显示在 BigQuery 中时,发生了一些奇怪的事情。数组中的值被映射到“build_version”和“display_version”,尽管我不知道该映射在 BigQuery 中的存储位置。让我再玩一会儿你的例子,看看我能不能让它工作。 嗯,转储数据模型显示'应用程序:STRUCT',所以我可能没有处理该列的数组,尽管它看起来像从数据.

以上是关于我可以将 Crashlytics 中的 JSON 字段作为 BigQuery 中的“where”指令进行查询吗?的主要内容,如果未能解决你的问题,请参考以下文章

将 LogCat 日志添加到 Firebase Crashlytics

将 Firebase Crashlytics 与 Prometheus 集成

如何在 Swift 中使用 Crashlytics 登录?

没有 google-services.json 和 google play 服务的 Firebase crashlytics

crashlytics 中的两个应用

将Crashlytics集成到库项目中