Hive函数总结

写在前面:

    自己用hive已经两个多月了,写hql来完成需求。下面是我的一些心得


Hive类型

    hive基本类型这里不介绍,很基本。除了基本类型还有array,map,struct类型其中在工作中array和map使用的还是比较多的。下面举例介绍和说明.。


Hive函数:

    在hive命令行中输入 show functions可以看到hive内置的所有函数,当然你也可以自定义函数这个在后面的文章里会讲到

当你觉得某些功能实现需要用到hive内置函数的时候,可以用show functions like '*array*'会发现出现了array()这个函数然后用desc function array可以查看arry()函数的具体用法

##下面结合工作中的例子来说明

#表一   表示手机号码字段和手机号码打的标志比如集团号,外卖号。一个手机号码可以对应多个标记值

create table tb1
(
phone string,
tag_value string
)
row format delimited fields terminated by '/t' 
stored as textfile

#数据如下

17743414322    aaa

17743414322    bbb

18843414322    aaa

18843414322    bbb

19943414322    aaa

#手机号码和标注的全量表

create table tb_all

(

phone stirng,

tag_value string

)

row format delimited fields terminated by '/t' 

stored as textfile

##数据如下

17743414322    aaa

17743414322    ccc

18843414322    aaa

18843414322    ccc


##要求,找出tb1中 在全量表中新增的记录和修改的记录(修改的记录为增加了手机号码标注)

eg:19943414322    aaa   是新增的记录

        

17743414322    aaa,bbb,ccc  表示修改的记录(以这种形式展现)新增和更新的记录都放到一张表中。


##step1找出新增的数据

select tb1.phone,tb1.tag_value
from 
tb1 left outer join tb_all
on tb1.phone = tb_all.phone
where tb_all.phone is null 

#效果如下所示

19943414322     aaa

# sql讲解,用到left outer join 可以用来筛选出两张表不同的记录和相同的记录,工作中用的很多


##step2找出更新的数据

#step2-1

select tb1.phone,concat_ws(',',split(tb1.tag_value,','),concat_ws(',',split(tb_all.tag_value,',')))
from tb1 inner join tb_all

on tb1.phone=tb_all.phone

#效果如下

17743414322     123,aaa
17743414322     123,ccc
17743414322     bbb,aaa
17743414322     bbb,ccc
18843414322     aaa,aaa
18843414322     aaa,ccc
18843414322     bbb,aaa
18843414322     bbb,ccc


#hql解释

1:concat_ws()函数用指定的连接符来连接给定的字符串或者集合

2:split() 函数用指定的正则表达式来切分字符串


#step2-2





猜你喜欢

转载自blog.csdn.net/never_compromise2580/article/details/80905808