配置单元收集列表无法处理数百万条记录

ztigrdn8  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(434)

我在使用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))),
lh80um4z

lh80um4z1#

使用orderby是子查询并不能保证数组是有序的。
我们将使用排序数组。
concat\u ws只适用于字符串数组,因此在使用collect\u list之前要将值强制转换为字符串。
现在的问题是元素的自然顺序被改变了-
100>20,但“20”>“100”(字母顺序)。
解决方法是使用空格lpad值、sort、concat,然后删除空格。

with t as (select explode(array(100,20,3)) as i) 
select translate(concat_ws(',',sort_array(collect_list(lpad(cast(i as string),10,' ')))),' ','') 
from t;

3,20,100

相关问题