Hive 使用printf函数打印collect_set数组中有限数量的元素
我只想打印患者编号集合中的前3名患者 A.我已使用收集集创建了患者列表Hive 使用printf函数打印collect_set数组中有限数量的元素,hive,printf,hiveql,Hive,Printf,Hiveql,我只想打印患者编号集合中的前3名患者 A.我已使用收集集创建了患者列表 collect_set(distinct patient_seq) AS patient_list 这将生成长度不同的4、5或6位数的患者编号数组 例如: ["16189","26599","406622","419117","5551"] ["223587","224663","232072","326504","433430","436673","54540","58188","74118"] B.然后我去掉逗号和引
collect_set(distinct patient_seq) AS patient_list
这将生成长度不同的4、5或6位数的患者编号数组
例如:
["16189","26599","406622","419117","5551"]
["223587","224663","232072","326504","433430","436673","54540","58188","74118"]
B.然后我去掉逗号和引号,用“*”分隔,以便在下一步中仅抓住前3名患者:
concat_ws('*', patient_list) AS pat_list
这将产生:
16189*26599*406622*419117*5551
223587*224663*232072*326504*433430*436673*54540*58188*74118
C.我尝试使用SUBSTRING_INDEX创建一个新的变量pat_list_short,该变量仅包含前3名患者,但该函数在hive 1.1.0中不受支持,直到1.3.0才受支持
substring_index(pat_list, '*', 3) AS pat_list_short
我还有别的选择吗
我想使用%s将pat_list_short输入到PRINTF中,以便只打印出前三个患者编号供审查团队使用。由于患者数量的长度不同,我不能将打印限制在某一长度
感谢使用您提供的数据
--------------
key | pat_id
--------------
1 16189
1 26599
1 406622
1 419117
1 5551
2 223587
2 224663
2 232072
2 326504
2 433430
2 436673
2 54540
2 58188
2 74118
可以使用此选项将数组截断为所需的长度。这里有关于如何构建和使用jar的说明
查询:
输出:
我必须承认,当查询返回结果并打印时,我对printf在这个问题中的作用有点不清楚。还需要注意的是,在A中的查询中,collect\u setdistinct是多余的,因为collect\u set的目的是收集不同的元素。感谢GoBrewers。之所以使用打印,是因为我们有一段文字,其中pat_list_short只是需要打印以供客户审查的许多数据点之一。我将尝试trunc_阵列。我昨天的工作是:选择业务、prov、CONCAT_WS',排序数组collect_SETpatient_seq作为patseq_列表,从SELECT DISTINCT Biz、prov、patient_seq、按业务划分的行数、按患者排序作为pat_seq从pat_表a中选择pat_seq_顺序
add jar /path/to/jar/brickhouse-0.7.1.jar;
create temporary function trunc_array as 'brickhouse.udf.collect.TruncateArrayUDF';
select key
, concat(' ', trunc_array(collect_set( pat_id ), 3)) pat_list_short
from db.tbl
group by key
----------------------
key | pat_list_short
----------------------
1 5551 26599 16189
2 232072 58188 223587