第二列:该指标下的所有地区名称,按照国标地域代码升序排序,按照";"进行分割,且该字段不为空时,末尾追加";"。 第三列:该指标下所有的年份,按字母顺序排序,按照";"进行分割,且该字段不为空时,末尾追加";"。 3、思路 处理年份很简单collect_set+sort_array就行了 处理地区,难在要按照地区代码的顺序将地区名称...
SELECTuser_id,concat_ws(',',collect_set(product_id))ASproduct_listFROMuser_purchaseGROUPBYuser_id; 1. 2. 3. 4. 5. 6. 7. 结果如下所示: 这样,我们就得到了按照顺序拼接的结果。 3. 完整代码示例 下面是完整的Hive代码示例: -- 创建用户购买记录表CREATETABLEuser_purchase(user_idINT,product_id...
selectname,regexp_replace(regexp_replace(concat_ws(',',sort_array(collect_set(concat(casewhenlength(rn)=1thenconcat('0',cast(rnasstring))elsecast(rnasstring)end,detail_address_name))),'^[0-9]*',''),',[0-9]*',',')asaddress_changefrom(selectname,detail_address_name,row_number()ov...
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生 Array 类型字段。 示例 1、数据准备 nameconstellationblood_type 2、需求:把星座和血型一样的人归类到一起。结果如下 射手座,A 大海|凤姐 白羊座,A 孙悟空|猪八戒白羊座,B 宋宋 3、实现 -- init table create table...
5. 在 Reduce 阶段的结束时,collect_set 函数会将合并去重后的结果作为 Reduce 阶段的输出。结果会按照键的顺序进行排序,并作为最终的查询结果返回给用户。 需要注意的是,由于 collect_set 是在 Reduce 阶段执行的,所以在大规模数据集上使用 collect_set 可能会导致性能问题。由于 Reduce 阶段需要合并和排序数据,而...
顺便看一下Hive源码中collect_list和collect_set函数对应的逻辑吧。 publicclassGenericUDAFMkCollectionEvaluatorextendsGenericUDAFEvaluatorimplementsSerializable{privatestaticfinallongserialVersionUID=1l;enumBufferType{SET,LIST}// For PARTIAL1 and COMPLETE: ObjectInspectors for original dataprivatetransientPrimitiveObjectI...
collect_set执行结果的顺序取决于记录被扫描的顺序,Spark SQL执行过程中是多个任务并发执行的,因此记录被读取的顺序是无法保证的. 2.1.2collect_list 假设数据表如下: 执行如下SQL: 执行结果: 差异说明: collect_list执行结果的顺序取决于记录被扫描的顺序,Spark SQL执行过程中是多个任务并发执行的,因此记录被读取的顺...
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。 数据准备: nameconstellationblood_type孙悟空白羊座A老王射手座A宋宋白羊座B猪八戒白羊座A凤姐射手座A 需求: 把星座和血型一样的人归类到一起。结果如下: ...
id,type,start_time,end_time,concat_ws(',',collect_set(text)over(partition by type order by start_time asc))astext_by_type from a order by start_time 4.按顺序合并结果 5.可以看到最后一条最长的才是我们需要的数据 代码语言:javascript ...
collect_set(): collect_set 常用于聚合后的字段处理 个人认为第二步可以省略,collect_set自带去重功能,有点多余了 WITHtmpAS(SELECTcustomer_key,cpzl_zw,row_number()over(PARTITIONBYcustomer_keyORDERBYcreate_dateASC)ASorder_num,lag(cpzl_zw,1,0)over(PARTITIONBYcustomer_keyORDERBYcreate_dateASC)AScpzl...