我可以从 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_version
和 display_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
有输出
我为此搜索了 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_version
和 display_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
有输出