hive使用遇到的问题

1、HQL子查询别名问题

     HQL的书写,select * from (select * from table) ;

     执行此HQL,应该会报错:ql.Driver (SessionState.java:printError(960)) - FAILED: ParseException line 48:52 cannot recognize input near '' '' '' in subquery source

     此时,修改HQL为select * from (select * from table) a,执行成功。


2、HQL时间

     由于oracle通过sqldr导出txt文件,通过hadoop fs -put命令导入hdfs时,hive表的DATE类型和oracle的DATE类型不能匹配,因而我们的hive表时间字段的类型都设置成了

string型,时间计算时,可通过unix_timestamp(trade_time) - unix_timestamp(pre_trade_time)来计算时间差。


3、Hive分区表增加字段问题

      hive创建了partition表,并添加了部分分区,此时,我希望修改表结构, alter table add columns,虽然一切顺利,desc table时也看到了表结构得到了更新,但我们load 

data进此表时(或者insert 操作),表中新增加的两个字段一直是NULL。但是在hdfs上该分区目录下面的数据文件中确实已经有这些字段的值了,只是查询不出来。原因是修

改表结构以后,元数据库中的SDS中该表对应的CD_ID会改变,但是该表分区下面对应的CD_ID还是原来表的CD_ID。

      比如我这边测试表叫:test1,分区字段叫dt,查看表的CD_ID:select CD_ID from SDS where LOCATION='hdfs://dtbigdata1:9000/user/hive/warehouse/test1' ,(假设我

们这里查出来表的新的CD_ID值为231)

      查看表的所有分区的CD_ID:SELECT * FROM SDS WHERE LOCATION LIKE 'hdfs://dtbigdata1:9000/user/hive/warehouse/test1/dt=%'

      我们需要手工更新一下现有分区的CD_ID的值为表CD_ID的值:

      UPDATE SDS SET CD_ID=231 WHERE LOCATION LIKE 'hdfs://dtbigdata1:9000/user/hive/warehouse/test1/dt=%'

      然后我们再去查询一下表test1,新增字段的值可以正常的显示出来了。

      我的hive版本为1.2.1,应该是hive本身的bug(当然,还有另一种解决办法,就是drop掉,重新建表喽)。


4、Hadoop节点不被Yarn利用

      从浏览器中(http://dtbigdata1:8088/cluster/nodes)可以看到,有部分节点状态为Unhealthy,health-report:1/1 local-dirs are bad: /bigdata/clohadoop/tmp/nm-local-dir;

      出现这种信息很可能是因为这几个节点的磁盘空间不足,两种方式处理:

     (1)清理节点的磁盘空间,让已占用的空间比例调到yarn设置的比例(默认90%)之下;

     (2)调高yarn的设置:调整文件:yarn-site.xml,修改属性:

       
        yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage
        98.5


5、hive显示建表脚本中文乱码

hive> show create table loc_city;
OK
CREATE TABLE `loc_city`(
  `city_id` string COMMENT '0�', 
  `city_name` string COMMENT '0 
�', 
  `prov_id` string COMMENT '�', 
  `city_account` string COMMENT '0�i�', 
  `city_acc_advance` string COMMENT '0�i�6�', 
  `city_acc_prepaid` string COMMENT '0�i���', 
  `start_date` string COMMENT 'H�', 
  `end_date` string COMMENT '1H�')
COMMENT '0,��T_Areah
                      ����}���
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ',' 
  LINES TERMINATED BY '\n' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://dtbigdata1:9000/user/hive/warehouse/loc_city'
TBLPROPERTIES (
  'transient_lastDdlTime'='1457607092')
Time taken: 0.955 seconds, Fetched: 22 row(s)

     我的hive版本为1.2.1,查询得知为hive自身的bug:https://issues.apache.org/jira/browse/HIVE-11837

    需要修改源代码,ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java解决

你可能感兴趣的:(hive)