hive使用中遇到的一些小问题及总结

博客都是用的多,登录的少了,端午放假闲来无事就登一登,顺便总结下自己在写hive sql时遇到的些小问题。

1,当你进行一个判断时,比如这样:
if(A in (20,21,22,30),‘YES’,‘NO’) AS A
先不管前后逻辑,这语句表面上看是不是没毛病,当然脑筋转的快或者基础不错的小伙子肯定想到我写在这儿就肯定是有个坑的呀,没错,我就在这儿翻了一次水。hive常用类型我们都知道为STRING,DECIMAL,BIGINT等等,在A字段为STRING类型时,这么匹配在hive中会进行转换,也就是结果能匹配上,但是会失真。
怎么个失真法呢,21和22能输出YES,20和30输出NO,具体原因你们去查吧,兴趣比结论重要,告诉你们了记忆会不够深刻。所以STRING要带有STRING的写法,引号’’。

2,GROUP BY的问题,这个我们都知道是用来进行过滤的,但是在应用的时候你有时候需要加上所有抽取的字段,有时候需要过滤部分字段。简单点的例子,我们需要求XX页面各个小时的登录总次数和登录总设备数,我们就需要这样:
SELECT 页面,小时,SUM(cnt) AS 登录次数,COUNT(1) AS 设备数 FROM
(
SELECT
页面,小时,user_id,count(1) AS cnt
FROM TABLE A WHERE 页面=‘XX’
GROUP BY
页面,小时,user_id
) t1
GROUP BY
页面,小时
;
这个是看了前辈的脚本,感觉思路很合适,写上。

3,有了再写吧

你可能感兴趣的:(笔记,hive,大数据)