hive2、分桶、视图、高级查询

本文详细介绍了Hive中的分桶概念及其优势,包括如何创建和使用分桶以提高查询效率和进行随机抽样。此外,还讨论了Hive视图的创建、操作以及视图在数据隐私和复杂查询简化中的应用。最后,文章深入探讨了Hive的高级查询特性,如CTE、JOIN、集合操作和聚合函数等,并提供了实例展示。
摘要由CSDN通过智能技术生成

show databases ;
describe formatted student2;--查看表的类型
desc database kb23hivedb;
show create database kb23hivedb;
show create table student2;

--分桶(Bucket)***********************************************************************

1分桶对应于HDFS中的文件

        更高的查询处理效率

        使抽样(sampling)更高效

        一般根据”桶列“的哈希函数将数据进行分桶

(2)分桶只有动态分桶

        set hive.enforce.bucketing=true;

(3)定义分桶(分桶的列是表中已有的列,分桶数最好是2的N次方)

        clustered by (emplyee_id) into 2 BUCKETS

(4)必须使用insert方式加载数据
(5)行分桶,将一个文件分成两个文件,并且一个文件夹是奇数数据,一个文件是偶数数据

--------------------------------------------------建表--------------------------------------------------

create table emplyee_id_buckets(
    name string,
    emplyee_id int,
    work_place array<string>,
    gender_age struct<gender:string,age:int>,
    skills_score map<string,int>,
    depart_title map<string,array<string>>
)
clustered by (emplyee_id) into 2 BUCKETS  --分为2个cluster,分桶为2的n次方/倍数
row format delimited fields terminated by '|'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n';

----------------------------------------------------------------------------------------------------------
select * from emplyee_id_buckets;           --选择分桶所有数据
set map.reduce.tasks=2;                     --分桶2
set hive.enforce.bucketing=true;             --分桶只有动态分桶
insert overwrite table emplyee_id_buckets select * from emplyee_id;  --分桶加载数据
----------------------------------------------------------------------------------------------------------

6分桶随机抽样
1查看一兆的数据
select * from emplyee_id_buckets tablesample ( 1M )s;  
2)查看十行的数据
select * from emplyee_id_buckets tablesample ( 10 rows )s;  
3)查看10%数据
select * from emplyee_id_buckets tablesample ( 10 percent )s;
4)查看30%数据
select * from emplyee_id_buckets tablesample ( 30 percent )s;
5)抽取随机数据随机抽样:将2个cluster分进16个桶,2/16=八分之一,每个桶有八分之一cluster组成,抽取第3个桶中的数据即八分之三cluster数据
select * from emplyee_id_buckets tablesample ( bucket 3 out of 16 on rand())s;
6)抽取随机数据指定emplyee_id抽样:将2个cluster分进

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值