Hive使用心得和常见问题

1、hive属于java体系,数据编码是unicode,所以从生产库抽过来的GB18030极其子编码集的数据,load到hive是可能出现乱码的。幸好有mapreduce的存在,我们可以写一个数据清洗程序,不仅可以完成转码功能,还可以格式化为hive可用的数据,比如行分隔符,列分隔符的替换,记录字段个数的检查等。

文件小的话也可以使用命令:iconv -f GBK -t UTF8 cui.dat > cui2.dat_utf8

2、hive表的分割符只支持一个字符,默认是\001,即asc码的第一个字符。

3、hive语法类似mysql,但没有查看创建表语句功能,可以通过元数据表之间的关联来拼接一个建表语句,做成以脚本命令运行的方式。

4、hive ql 中不存在写法为 exist not ,而非关系型库的not exist。

5、hive中的函数均为java实现的方法,扩展此功能需要写一个UDF的子类,覆盖evaluate方法,重新编译hive即可。

6、hive中使用多个union all时最外面还要包一层select,否则会报错。

7、hive以hdfs文件的方式存在,不支持追加的功能,但可以通过建表时指定多个分区变通实现追加功能。

8、hive中alter开头的命令格式为:use database;alter 语句 。而不能写成这样:alter table  database.tablename...

9、hive 两个表join操作,on 后面只能有 “=” 关系,不能有大于,小于,like等其他的,可以用子查询变通。

10、hive 中,对于select count(distinct   c1)  ......group by  c1 语句,会导致执行的错误,在这里写count(distinct   c1) 实际上等于1

相关推荐