目录
一:Hive SQL与SQL的区别
1)用法上的区别:
- HQL不支持行级别的增删改,所有数据加载的时候就已经确定,不可更改。
- 不支持事务
- 支持分区存储
2)hive的SQL特点:
- HIve更适合于分析复杂的数据集。SQL更适合于快速分析不太复杂的数据集
- hive执行时间长
- 不支持不等值连接(放在下面展开讲,官网表示,hive2.2版本之后支持不等值关联语句)
一般使用left join , right join , inner join替代
- 不能职能识别concat(‘;’, key)因为;被当做SQL结束符号。
- HIVE SQL 中String类型的字段若是空字符串,即长度为0,那么对它进行is null的判断,
其结果是false,我们可以使用left join进行筛选。
- HIve中不支持‘ < dt < ’这种格式的范围查找,可以使用dt in (",")或者between替代
二:Hive表关联条件不支持不等值连接
(官网表示,hive2.2版本之后支持不等值关联语句)
关联时ON里面的条件如果含有不等值,那么在hive中不能直接使用,如果将不等式放在where条件中,
会出问题,直接将不等值放在where条件中会过滤掉主表的部分数据。
解决方案:先通过inner join加上非等值条件,再left join.
错误示例:
select t.id , t.date , t1.date
from t
left join t1
on t1.id = t.id
and t.date > t1.date
正确写法: 不等值的连接我们先用inner join, 然后等值的我们使用left join即可。
select t.id, t.date, t2.date
from t
left join
(select t.id,t1.date
from t
inner join t1 on t1.id &