首页 > 代码库 > Hive限制
Hive限制
1.更新,事务,索引,不支持,是全表扫描
2.创建表的字段类型和java类型是对应的。不支持日期类型,提供转换为字符串类型的函数。
3.查询语句中,不支持having,可写嵌套的select来解决;group by后只能是表的定义列名,不能像mysql那样可以为查询语句为逻辑处理结果声明的别名,但可为逻辑处理过程语句
4.内置函数查看命令(show functions;desc function 函数名)
5.hive中分托管表和外部表,不同的主要是在drop时,托管表,从hive中删除元数据和表数据;外部表,只能删除元数据;
6.hive中加载表数据时,不审查加载的数据是否符合表的声明模式,只在查询的时候,用返回null来标识是否符合表的声明模式
7.hive中通过对表进行分区(包含分桶)来提搞对某个特定日期或者某些日期段的数据查询性能。表分区实际为表目录下的目录文件。插入时需指定表分区(静态分区或者动态分区都可以),因为插入仅仅只是数据文件的移动,不会做特殊处理。
8.hive中插入不支持 insert into 表名 values的形式存在.可以 load data local input ‘本地文件路径‘ into table 表名 [partition(分区字段)]或者 insert [overwrite] table 表名 [partition(分区字段)] select ...from 表名
9.hive中不支持truncate table 表名的形式存在(也包括 delete from 表名),可通过 hive>dfs -rmr /user/hive/warehouse/表名来清空该表下的数据,以便保持表元数据信息不丢失;或者通过create table 表名 like 表名,也可以。
10.hive中join关联查询,只能通过from 表1 join 表2 on (等值的关联条件) ,不支持像mysql或者oracle中,可以from 表1,表2 where 表1.列 = 表2.列的形式
11.hive中不支持 in (子查询语句),比如: in (select id from 表名) .可以通过内连接或者 半连接 from 表1 left semi join 表2 on (表1.列名 = 表2.列名),表2只能在on中出现,不能在select中引用
12.可以通过explain查看hive sql执行计划及解分成后的mapreduce作业数等信息
13.hive中子查询语句只能出现在from子句中,其他地方目前不允许
14.hive中在不需要全局排序的情况下,写排序语句时,最好用distribute by 表名.字段名 sort by 表名.字段名 asc | desc 的形式,尽量不用order by形式(只通过一个reduce来完成所有的排序结果)
转载自:http://blog.csdn.net/xiaolang85/article/details/7860011