分桶及分桶抽样查询

对着背影说爱祢 提交于 2019-12-19 06:41:46

1.先创建普通表
2.在创建分桶表
(1)create table 表名 (字段 类型,…) clustered by(根据分桶的字段) into 分桶数 buckets row format delimited fields terminated by ‘根据什么分割’;
create table stu_buck(id int, name string)
clustered by(id)
into 4 buckets
row format delimited fields terminated by ‘\t’;

3.设置属性
(1)set hive.enforce.bucketing=ture;//设置分桶开启
(2)set mapreduce.job.reduces=-1;

4.将数据从普通表导入到分桶表
(1)//导入数据的时候要执行mapreduce,才会分桶
insert into table 分桶表 select * from 普通表;

5.查询分桶数据
(1)select * from 分桶表tablesample(bucket 从哪个分桶开始抽取 out of 抽取的数据 on 分桶的字段);
hive (default)> select * from stu_buck tablesample(bucket 1 out of 4 on id);

(2)重点语法:TABLESAMPLE(BUCKET x OUT OF y)
(3)x表示从哪个bucket开始抽取,如果需要取多个分区,以后的分区号为当前分区号加上y。x的值必须小于等于y的值。

其他常用函数
1.nvl:给null的数据赋值
select nvl(含有null值的字段,所要附的值) from表;
select comm, nvl(comm,mgr) from emp;

2.Case when:条件判断
case 字段 when 数据then 返回的值 else 返回的另一个值 end
select
dept_id,
sum(case sex when ‘男’ then 1 else 0 end) male_count,
sum(case sex when ‘女’ then 1 else 0 end) female_count
from
emp_sex

3.行转列
CONCAT(string A/col, string B/col…):拼接字符串;
CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT(),根据分割符拼接字符串;
COLLECT_SET(col):去重字段并且合并为数组,产生array类型字段。

4.列转行
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

5.窗口函数
OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化。
CURRENT ROW:当前行
n PRECEDING:往前n行数据
n FOLLOWING:往后n行数据
UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点
LAG(col,n,default_val):往前第n行数据
LEAD(col,n, default_val):往后第n行数据
NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。注意:n必须为int类型。.

6.Rank
RANK() 排序相同时会重复,总数不会变
DENSE_RANK() 排序相同时会重复,总数会减少
ROW_NUMBER() 会根据顺序计算

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!