大数据

Impala skill

2018-05-29  本文已影响69人  东皇Amrzs

1. impala 使用concat_ws将多列合并为一列

首先查看一下表的信息

select uid, category, tags from dmr.edu_course_profile;
select 
uid,
trim(concat_ws(' ',isnull(c.category,''),isnull(c.tags,''))) as course_tags
from dmr.edu_course_profile c;

其中
trim( )函数是将合并后的course_tags字段两边的空格清除
concat_ws( )函数的第一个参数指定字段连接符,这里我使用的是空格,第二个参数是要合并的列名
isnull()函数的第一个参数是字段名,第二个参数是当字段为空时的替换字符,这里我设置的是空
效果如下图:

2. impala 使用group_concat将多行合并为一行

首先照旧来看下表的信息

select uid, group_concat(name,' ') as tags
from  c
group by uid

其中
group_concat( )第一个参数是要合并的字段名,第二个参数是指定行间的连接符

3. 使用 ROW_NUMBER() OVER来进行业务去重

去重原因:例如,业务方不知道之前已经添加过了该课程,然后再次添加,导致同一课程或者课组的信息被添加了多次
去重逻辑

SELECT *,
       ROW_NUMBER() OVER(PARTITION BY id ORDER BY id DESC)
FROM table_name
INSERT OVERWRITE TABLE test_table
SELECT * FROM(SELECT *,
                     ROW_NUMBER() OVER(PARTITION BY id1,id2 ORDER BY id1,id2 DESC) RN 
              FROM test_table)T 
WHERE T.RN = 1 AND id1 is not null and id2 is not null

或者使用 ROW_NUMBER() OVER来进行组间排序

照旧看下表信息:


SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

效果如下图:


上一篇 下一篇

猜你喜欢

热点阅读