gaowenxingxing

hive笔记

动态分区和静态分区的区别

静态分区SP(static partition)
动态分区DP(dynamic partition)
静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。

配置环境

SET hive.exec.compress.intermediate = TRUE; --设置启用压缩
SET mapreduce.job.queuename=root.tdata.data-mining;--设置队列的优先级
SET hive.merge.mapredfiles = TRUE;--合并小文件
SET hive.map.aggr=TRUE; --提高聚合性能
SET hive.groupby.skewindata=TRUE;--有数据倾斜的时候进行负载均衡
SET hive.merge.size.per.task = 256000000; --合并后每个文件的大小
SET hive.merge.smallfiles.avgsize=64000000;   --当输出文件的平均大小小于64M时,启动一个独立的map-reduce任务进行文件merge
SET hive.warehouse.subdir.inherit.perms=FALSE; --hive权限问题
SET hive.exec.dynamic.partition=TRUE; --开启动态分区
SET hive.exec.dynamic.partition.mode=nonstrict; -- 可以执行动态和静态分区
SET hive.exec.max.dynamic.partitions.pernode=600000; --动态分区属性:每个mapper或reducer可以创建的最大动态分区个数
SET hive.exec.max.dynamic.partitions=6000000; --动态分区属性:一个动态分区创建语句可以创建的最大动态分区个数
SET hive.exec.max.created.files=6000000;--动态分区属性:全局可以创建的最大文件个数

insert overwrite

是删除原有数据然后在新增数据,如果有分区那么只会删除指定分区数据,其他分区数据不受影响。

join

hive中的几个join

inner join

内关联([inner] join):只返回关联上的结果,可以理解为取并集

举个栗子

这个例子参考:cnblogs

hive> select * from rdb_a;
OK
1       lucy
2       jack
3       tony
 
hive> select * from rdb_b;
OK
1       12
2       22
4       32

inner join 可以理解为两个集合取交集,不保留不其他项

select a.id,a.name,b.age from rdb_a a inner join rdb_b b on a.id=b.id;
 
Total MapReduce CPU Time Spent: 2 seconds 560 msec
OK
1       lucy    12
2       jack    22
Time taken: 47.419 seconds, Fetched: 2 row(s)

left [outer] join

左关联(left [outer] join):以左表为主,保留左边的表格都存在的,右表中没有的通通为null

select a.id,a.name,b.age from rdb_a a left join rdb_b b on a.id=b.id;
 
Total MapReduce CPU Time Spent: 1 seconds 240 msec
OK
1       lucy    12
2       jack    22
3       tony    NULL
Time taken: 33.42 seconds, Fetched: 3 row(s)

right [outer] join

右关联(right [outer] join):以右表为主,与左链接正相反,右表中没有字段,都补null

full [outer] join

全关联(full [outer] join):以两个表的记录为基准,返回两个表的记录去重之和,关联不上的字段为NULL。可以理解为去并集。

select a.id,a.name,b.age from rdb_a a full join rdb_b b on a.id=b.id;
 
Total MapReduce CPU Time Spent: 5 seconds 540 msec
OK
1       lucy    12
2       jack    22
3       tony    NULL
NULL    NULL    32
Time taken: 42.938 seconds, Fetched: 4 row(s)

还有笛卡尔积链接,剩余的操作请参考cnblogs

博主写的例子通俗易懂。我直接

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-01-29
  • 2022-12-23
  • 2021-09-24
  • 2021-06-17
猜你喜欢
  • 2021-05-19
相关资源
相似解决方案