Hive数组过滤可通过两种方式:一是使用LATERALVIEW配合explode展开数组后过滤,再通过ARRAY_AGG聚合,此方法兼容旧版本;二是直接使用ARRAY_FILTER函数(Hive2.0+),代码更简洁高效。两种方法各有优劣,建议根据实际版本选择合适方法。
Hive 中的数组过滤有多种实现方式。许多初学者通常会想到使用 LATERAL VIEW 结合 WHERE 进行过滤,这是基础思路;但如果 Hive 版本支持 ARRAY_FILTER 函数,代码可以更加简洁。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
例如,有一张 my_table 表,其中包含一个数组列 my_array,需要过滤掉所有小于 10 的元素。最直接的方法是使用 LATERAL VIEW 将数组展开,再按条件过滤:
SELECTmy_arrayFROMmy_tableLATERAL VIEWexplode(my_array) exploded_array AS elementWHEREelement >= 10;
这段逻辑清晰:先通过 explode 将数组展开为多行(每个元素单独一行),再用 WHERE 筛选出 >=10 的行。结果返回的是多行数据,而非数组本身。
如果需要结果仍为数组(即过滤后的元素重新组合),可以配合 ARRAY_AGG 进行聚合:
SELECTARRAY_AGG(element) AS filtered_arrayFROMmy_tableLATERAL VIEWexplode(my_array) exploded_array AS elementWHEREelement >= 10;
这样返回的是一个完整的新数组,仅包含满足条件的元素。如果 Hive 版本支持 ARRAY_FILTER(自 Hive 2.0 引入),一行即可完成:SELECT ARRAY_FILTER(my_array, x -> x >= 10) FROM my_table,更加优雅。而上述展开-聚合的写法在旧版本中同样适用,是一种通用方案。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述