hive中注意事项

hive中不能直接访问非group by 的字段

注意: 如果出现 Expression not in GROUP BY key 可以使用 collect_set()返回array数组**。

任何时候,考虑是不是要用distinct

注意 : 在检索数据时,尤其是在JOIN,count(*)时,要多考虑要不要去重,有时如果忽略掉distinct会造成引发大量MR。

hive中NULL 和 “”

以前一个案例,引发的思考
表结构:
  a      int
  b      string
  c      int
  d      string
数据:
  \N,\N
  \N,
  ,\N
  ,,
  ,,,

执行select返回结果

a(int)b(string)c(int)d(string)
NULLNULLNULLNULL
NULLNULLNULL
NULLNULLNULLNULL
NULLNULLNULL
NULLNULL

总结 : int 类型,只要不能成功转换,必然返回NULL;string类型,如果指定为NULL或者没有预值位置(数据前三行d字段),均为NULL,否则”“

原因: hive是java编写的,int类型底层可能是Integer,所以不存在为NULL,转换失败为NULL,而string为了区分是否提供过值(预留空位),有三种状态:NULL,”“,value。具体需要意会下,不易表述。

载入数据时,最大限度确保数据格式的正确性

经验来自 :分析汽车销售

分析汽车销售时,源数据为xls,在转换csv时,直接将数据拿去用了 但是,在深度分析数据时,发现在转换过程中,有数据有偏差,原本以行的数据,在分割完成后,出现两行数据。

这里写图片描述
一行数据,但是数据中间出现^M导致变成两行数据。
进一步察看,发现是在转换数据的时候出现问题:

源数据:

转换后数据:

hive中查询数据行数:

总结 数据每一轮转换时,尽量要验证数据正确性,尽最大降低误差率。好别扭,应该是转码过程共,汉字组成^M了。

内置函数regexp_extract(STRING subject,STRING regex_pattern,STRING index)

此方法和java 中的正则匹配类似,分析一个java代码.

        Pattern p = Pattern.compile("([a-zA-Z]*)@([a-zA-Z]*.[a-zA-Z]*)");
        Matcher m = p.matcher("yourname@gmail.com");
        if (m.matches()) {
         email = m.group(0);
         user = m.group(1);
         hostname = m.group(2);
        }

很清楚了,后面的index为第几个子表达式
注:正则中  (pattern) 是匹配 pattern 并捕获该匹配的子表达式

UDF注意问题

add jar 时,将jar包加载到当前terminal会话内存中,当退出后,从内存销毁;

create temporary function 也是存在当前会话内存中,会随会话销毁.

create function 是将结构村到mysql中

调试 UDF时,最好先退出当前会话再进入;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值