1、HQL子查询别名问题
HQL的书写,select * from (select * from table) ;
执行此HQL,应该会报错:ql.Driver (SessionState.java:printError(960)) - FAILED: ParseException line 48:52 cannot recognize input near '
此时,修改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,修改属性:
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解决