配置单元中集合中元素的平均计数?

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


我有两列id和segment。段是逗号分隔的字符串集。我需要找到所有表中的平均段数。一种方法是使用两个单独的查询-

A - select count(*) from table_name;
B - select count(*) from table_name LATERAL VIEW explode(split(segment, ',') lTable AS singleSegment where segment != ""
avg = B/A

在上述情况下,答案是8/4=2。
有没有更好的方法来实现这一点?

cqoc49vn

cqoc49vn1#

尝试:

select sum(CASE segment 
           WHEN '' THEN 0 
           ELSE  size(split(segment,','))
           END
           )*1.0/count(*) from table_name;

如果您的id字段是唯一的,并且您希望向段部分添加一个筛选器,或者防止其他格式错误的 segment 价值观 a,b, 以及 a,,b ,您可以:

SELECT SUM(seg_size)*1.0/count(*) FROM (
    SELECT count(*) as seg_size from table_name
    LATERAL VIEW explode(split(segment, ',')) lTable AS singleSegment
    WHERE trim(singleSegment) != ""
    GROUP BY id
) sizes

然后可以在where子句中添加其他内容。
但是这个查询需要运行两个配置单元作业,而简单的查询需要一个作业,并且需要id字段是唯一的。

相关问题