如何用Spark SQL查询嵌套JSON列,筛选featureName为'a'且results非空的行?
Spark SQL 查询实现方案
方法1:展开数组返回明细行
如果需要将每个符合条件的tectonFeatures元素拆分为独立行,可使用explode函数:
SELECT * FROM your_table_name LATERAL VIEW EXPLODE(features.tectonFeatures) exploded_tf AS tf WHERE tf.featureName = 'a' AND tf.results IS NOT NULL AND SIZE(tf.results) > 0;
LATERAL VIEW EXPLODE用于展开嵌套数组,将数组内每个元素转为单独一行SIZE(tf.results) > 0确保results数组不为空(仅判断IS NOT NULL无法排除空数组情况)
方法2:保留原行结构筛选
如果需要保留原始行的完整结构,仅筛选出包含符合条件元素的行,可使用exists函数:
SELECT * FROM your_table_name WHERE EXISTS ( SELECT 1 FROM UNNEST(features.tectonFeatures) AS tf WHERE tf.featureName = 'a' AND tf.results IS NOT NULL AND SIZE(tf.results) > 0 );
UNNEST在子查询中展开数组,配合exists判断数组中是否存在满足条件的元素
注意事项
- 替换语句中的
your_table_name为实际数据表名称 - 若需确保
results数组内无null元素,可添加额外条件ALL(tf.results IS NOT NULL)
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

