我是 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
如有任何帮助,我们将不胜感激。预先感谢!
在尝试了诸如
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
;