Databricks中array_union函数是否会维持数组顺序?
Databricks中array_union函数是否会始终维持数组顺序?
场景说明
你使用的MERGE INTO代码如下:
MERGE INTO final_table a USING ( select student_id,array_agg(distinct subject) new_subject from changes_table b group by 1,2 ) b on a.student_id = b.student_id WHEN MATCHED THEN UPDATE SET a.subject = array_union(array(new_subject),array(subject)), WHEN NOT MATCHED THEN INSERT (student_id,subject) VALUES (b.student_id,new_subject)
已知changes_table的subject值为["sql","python"],final_table的subject值为["sql","scala"],执行后得到结果["sql", "python", "scala"]符合预期,但需要明确array_union的顺序特性。
核心解答
在Databricks的Spark SQL中,array_union函数不会始终维持数组的原始顺序。
array_union的核心功能是返回两个数组去重后的并集,它的底层逻辑是基于集合特性处理的,而非严格保留输入数组的顺序。你这次测试得到符合预期的顺序只是特定数据场景下的偶然结果,并非官方承诺的固定行为。
如果你的业务逻辑必须依赖数组元素的固定顺序,不要依赖array_union的输出顺序,建议在合并后用array_sort显式指定排序规则,或者自定义能保证顺序的数组合并逻辑。
内容的提问来源于stack exchange,提问作者harshil bhatt
相关产品推荐
相关产品推荐

