使用 Spark SQL 查询从 json 字符串中提取元素

问题描述 投票:0回答:1

我是 Spark sql 新手,正在尝试使用

get_json_object()
从 json 字符串中提取元素。

表格的名称是

abc

这是我的 json 字符串

dns_flip_details = "{'flipDetails': [{'ServiceFqdn': 'fqdn1' 'StartTime': 2024-09-09 11:55:11.546052+00:00, 'EndTime': 2024-09-10 11:55:11.546052+00:00}, {'ServiceFqdn': 'fqdn2','StartTime': 2024-09-11 11:55:11.546052+00:00, 'EndTime': 2024-09-12 11:55:11.546052+00:00}]}"

我想从中提取最后一个 EndTime 。

要提取第一个,以下查询有效:

select (get_json_object(dns_flip_details,"$.flipDetails[0].EndTime")) as 1st_end_date from abc

我尝试使用

array_size()
如下,但它似乎不起作用

select (get_json_object(dns_flip_details,"$.flipDetails[array_size($.flipDetails[*])-1].EndTime")) as last_end_date from abc

如有任何帮助,我们将不胜感激。预先感谢!

apache-spark-sql
1个回答
0
投票

在尝试了诸如

explode()
from_json()
array_size()
等多种事情之后,几乎放弃了

注:

虽然此方法尝试使用

get_json_object()
,但它涉及一些解决方法,因为
get_json_object()
本身不支持数组索引。要获得最后一个
EndTime
,请考虑使用
from_json()
或其他方法是否更直接。

这是代码:

create temporary view json_data as
(select get_json_object(dns_flip_details,"$.flipDetails") as flipDetails from abc);
cache table json_data;

select get_json_object(flipDetails, '$[' || (size(split(flipDetails, '},')) - 1) || '].EndTime') as LastEndTime from json_data
;

© www.soinside.com 2019 - 2024. All rights reserved.