hive sql查询总结

hive最快的执行就是不走MapReduce。简单的select的是最快的,嵌套啥的都比较忙。与关系型数据库不同。

 

在做之前要将所写的查询语句进行格式化输入,然后再运行。

在写sql语句的时候,要注意一下几点: 

1尽量尽早地过滤数据,减少每个阶段的数据量,对于分区表要加分区,同时只选择需要使用到的字段

先把所要的条数选出来,然后再在所选出来的数据上进行操作。

要做表连接的时候先将每个表所要的东西选出来,然后再做表连接。

2、对历史库的计算经验  (这项是说根据不同的使用目的优化使用方法)

   历史库计算和使用,分区

3尽量原子化操作,尽量避免一个SQL包含复杂逻辑

可以使用中间表来完成复杂的逻辑   

4 join操作  小表要注意放在join的左边(目前TCL里面很多都小表放在join的右边)。

否则会引起磁盘和内存的大量消耗

如果union all的部分个数大于2,或者每个union部分数据量大,应该拆成多个insert into 语句,实际测试过程中,执行时间能提升50%

5SQL要先了解数据本身的特点,如果有join ,group操作的话,要注意是否会有数据倾斜数据倾斜无非就是大量的相同keypartition分配到一个分区里

分区这个概念在之前的sql语句中并没有使用到,所以这里着重讲解一下sql

分区:

1.分区是以字段的形式在表结构中存在,通过describe table命令可以查看到字段存在,但是该字段不存放实际的数据内容,仅仅是分区的表示。

2.分区建表分为2种,一种是单分区,也就是说在表文件夹目录下只有一级文件夹目录。另外一种是多分区,表文件夹下出现多文件夹嵌套模式。

a、单分区建表语句:create table day_table (id int, content string) partitioned by (dt string);单分区表,按天分区,在表结构中存在idcontentdt三列。

b、双分区建表语句:create table day_hour_table (id int, content string) partitioned by (dt string, hour string);双分区表,按天和小时分区,在表结构中新增加了dthour两列。

3.查看分区语句:

hive> show partitions day_hour_table;

4. Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在最字集的目录中。

5.总的说来partition就是辅助查询,缩小查询范围,加快数据的检索速度和对数据按照一定的规格和条件进行管理。




猜你喜欢

转载自blog.csdn.net/weixin_38987362/article/details/80618368