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;
不定期更新中。。。。。