Hive限制

来源:互联网 发布:c语言if else语句赋值 编辑:程序博客网 时间:2024/04/29 10:42
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来完成所有的排序结果)
0 0
原创粉丝点击