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; 结果为4select 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;??
?
不定期更新中。。。。。
?
?