hive中分桶、视图、侧视图的用法

1.分桶

首先明确一点:
分区对应的是文件夹
分桶对应的是文件
分桶对应于HDFS中的文件

  • 更高的查询处理效率
  • 使抽样(sampling)更高效
  • 根据“桶列”的哈希函数将数据进行分桶

1.创建一个分桶表,关键字是clustered

create table if not exists hr_bucket(
name string,
id int,
num string,
time2 string 
)
clustered by (id) into 8 buckets
row format delimited
fields terminated by '|';

2.输入打开分桶的命名,否则系统不会帮我们分桶

set hive.enforce.bucketing=true;

3.往分桶表插入数据

insert into table hr_bucket select * from employee_hr;

4.查看hdfs
显示分了8个文件,分桶规则是根据我们的clustered by (id) into 8 buckets这个指令,根据id是否为8的倍数,倍数+1,,,+7,分的8个文件

5.随机分桶抽样

select * from hr_bucket tablesample(bucket 2 out of 4 on id)s;

注:tablesample是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y)
y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取(64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。例如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。

2.视图

概述

  • 虚拟表,从真实表中选取数据
  • 只保存定义,不存储数据
  • 如果删除或更改基础表,则查询视图将失败
  • 视图是只读的,不能插入或装载数据
    1.创建视图
create view view_hr as 
select name,id from employee_hr where id>10;

2.查看建表语句来判断是否为视图

show create table view_hr;

3.删除视图

drop view view_hr

3.侧视图(lateral view)

常与表生成函数结合使用,将函数的输入和输出连接
1.创建侧视图

select name,wps,skills,score 
from cte_employee
lateral view explode(work_place)workplace as wps
lateral view explode(skill_score)sks as skills,score;

2.关键字是lateral view explode
对于OUTER关键字:即使output为空也会生成结果
即:

select name,wps,skills,score 
from cte_employee
lateral view outer explode(work_place)workplace as wps
lateral view outer explode(skill_score)sks as skills,score;

3.注意,侧视图一般为字段类型是array,map类型的才可以,其他类型用不了,并且跟视图是两个完全不同的概念,请勿混淆


版权声明:本文为weixin_49165958原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。