hive中一些实用的小技巧

1. 忽略错误,继续执行下面的语句,特别是在使用hive -f "xxx.sql"时候比较实用:

    hive --hiveconf hive.cli.errors.ignore=true -f "xxx.sql"

2. 虚拟列:

    INPUT__FILE__NAME(输入文件的路径)

    BLOCK__OFFSET__INSIDE__FILE(记录在文件中的偏移量)

    select id,INPUT__FILE__NAME,BLOCK__OFFSET__INSIDE__FILE from lxw_test3 limit 10;

3. select结果中显示列名:

    set hive.cli.print.header=true;

    注意在hive0.7中这个参数有bug,在设置为true之后使用use来切换database,就会触发这个bug

Exception in thread "main" java.lang.NullPointerException
        at org.apache.hadoop.hive.cli.NewCliDriver.processCmd(NewCliDriver.java:178)
        at org.apache.hadoop.hive.cli.NewCliDriver.processLine(NewCliDriver.java:243)
        at org.apache.hadoop.hive.cli.NewCliDriver.main(NewCliDriver.java:469)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:186)

4. 判断一个字段是否全数字:

select mobile from woa_login_log_his where pt = '2012-01-10' and mobile rlike '^\\d+$' limit 50;
 

5. hive中最高精度的数据类型是double,只精确到小数点后16位,在做除法运算的时候要特别注意:

select ceil(28.0/6.999999999999999999999) from t_lxw_test1 limit 1;    结果为4
select ceil(28.0/6.99999999999999) from t_lxw_test1 limit 1;           结果为5
 

6. 查看N天前的日期:

select from_unixtime(unix_timestamp('20111102','yyyyMMdd') - N*86400,'yyyyMMdd') from t_lxw_test1 limit 1;
 

7. 获取两个日期之间的天数/秒数/分钟数等等:

select ( unix_timestamp('2011-11-02','yyyy-MM-dd')-unix_timestamp('2011-11-01','yyyy-MM-dd') ) / 86400  from t_lxw_test limit 1;
 

不定期更新中。。。。。

猜你喜欢

转载自superlxw1234.iteye.com/blog/1565774