1.更新,事务,索引,不支持,是全表扫描,但它支持通过partition和bucket来进行快速查询

2.创建表的字段类型和java类型是对应的。区别在于它有tinyint代替char,只有0.10.0之后才支持日期类型,并新增了binary数据类型,提供转换为字符串类型的函数。

3.查询语句中,不支持having,可写嵌套的select来解决;group by后只能是表的定义列名,不能像mysql那样可以为查询语句为逻辑处理结果声明的别名,但可为逻辑处理过程语句

4.内置函数查看命令(show functions;desc function 函数名)

5.hive中分托管表和外部表,不同的主要是在drop时,托管表,从hive中删除元数据和表数据;外部表,只能删除元数据;

6.hive中加载表数据时,不审查加载的数据是否符合表的声明模式,只在查询的时候,用返回null来标识是否符合表的声明模式

  如果你想查询将这些数据查出来,可以使用 select * from tableName where colsName is 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 TABLENAME [partition(name=xxx)]的方式截断数据,但暂时还不支持delete from TABLENAME。用户也可以通过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来完成所有的排序结果)

 distribute by :用于控制在map端如何拆分数据给reduce端,hive 会根据distribute by 后面的列,根据reduce个数进行数据分发,默认采用hash算法。所以distribute by 一定要多分配reduce进行处理,否则无法看到distribute by的效果。