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
博主写的例子通俗易懂。我直接