Hive中获取JSON数组长度及最新version值的方法求助
解决JSON数组长度获取与最新Version值提取问题
嘿,我完全懂你现在的烦恼——面对长度不确定的JSON数组,靠get_json_object()逐个索引处理实在太麻烦了。结合你给出的示例JSON,我来分享两个高效的解决方案:
获取JSON数组的长度
既然你在使用get_json_object(),推测你大概率是在Hive环境中处理数据。这种情况下,直接用size()函数配合get_json_object()就能轻松拿到数组长度,不管数组是3个元素还是50个都适用:
SELECT size(get_json_object(json_column, '$.data.info')) AS array_length FROM your_table;
针对你提供的示例JSON,这个语句会返回3,正好对应数组的实际长度。
获取最新的Version值(数组中最大的version)
要提取数组里最大的version值,我们可以先把所有version提取成数值数组,再用array_max()取最大值。这里需要用到transform()遍历数组元素来提取version:
SELECT array_max( transform( get_json_object(json_column, '$.data.info'), x -> cast(x.version as bigint) ) ) AS latest_version FROM your_table;
运行这个语句后,会从你的示例JSON中返回最大的version值1567954261。
低版本Hive兼容方案
如果你的Hive版本低于2.3(不支持transform()和array_max()),可以用LATERAL VIEW explode()把数组拆分成多行,再通过MAX()聚合取最大值:
SELECT MAX(cast(get_json_object(info_item, '$.version') as bigint)) AS latest_version FROM your_table LATERAL VIEW explode(get_json_object(json_column, '$.data.info')) exploded_table AS info_item;
这样不管数组长度多少,都能一键处理,再也不用手动写一堆索引啦!
内容的提问来源于stack exchange,提问作者Bhavana Addagulla
相关产品推荐
相关产品推荐

