我可以从 Crashlytics 查询 JSON 字段作为 BigQuery 中的 "where" 指令吗?

Can I query a JSON field from Crashlytics as a "where" directive in BigQuery?

我为此搜索了 SO 并发现了许多类似的问题,但我不太清楚如何将它们应用到我的场景中。

我们有 Google Crashlytics 链接到 BigQuery。

给定以下 table 数据(为清楚起见删除了许多列):

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 table 中 is_fatal 等于 true 的所有记录,以及应用程序版本([=15 的第二个数组元素=]) 高于 1.0.0。或者,我可以使用内部版本号,因为它是版本所特有的。

所以我的问题是:

是否可以通过 SQL 查询来完成此操作,而不必按照 中的建议编写自定义函数,这对我不起作用。

有趣的是,我看到的错误表明 application 数组的两个元素被识别为 build_versiondisplay_name。我也尝试在查询中使用它们,但无济于事。

使用上述示例数据,任何人都可以建议一种查询此信息的直接方法吗?

Using the above sample data, can anyone suggest a straightforward way of querying this info?

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"}]}}' 
)

输出为

Hmm, dumping the data model shows 'application: STRUCT<build_version STRING, display_version STRING>'

看起来你的 table 模式实际上就像下面的示例

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
    

有输出