我在使用collect\u list的outer query中有一个配置单元查询。内部查询我有一个180万条记录的有序列表。当我每次运行查询时,有500-600条记录给出错误的结果,并且丢失了模式中的顺序。我也用砖瓦罐和收集自定义项。这也给出了相同的结果,500-600条记录不同。我不知道怎么调试。
select concat_ws('','',collect_list(host)),
concat_ws('','',collect_list(cast(total_data_volume_host as string))),
concat_ws('','',collect_list(cast(event_duration_host as string))),
concat_ws('','',collect_list(application_name)),
concat_ws('','',collect_list(cast(total_data_volume_app as string))),
concat_ws('','',collect_list(cast(event_duration_app as string))),
1条答案
按热度按时间lh80um4z1#
使用orderby是子查询并不能保证数组是有序的。
我们将使用排序数组。
concat\u ws只适用于字符串数组,因此在使用collect\u list之前要将值强制转换为字符串。
现在的问题是元素的自然顺序被改变了-
100>20,但“20”>“100”(字母顺序)。
解决方法是使用空格lpad值、sort、concat,然后删除空格。
3,20,100