hive-分桶和常用查询函数
2026/6/20 16:05:10 网站建设 项目流程

分桶及抽样查询
分桶表数据存储
分桶抽样查询

其他常用查询函数
空字段赋值
CASE WHEN
行转列
列转行
窗口函数
Rank
---------------------------笔记-----------------------
分桶 :为了分散数据,需要指定按什么字段分,以及分几个桶

建表:
不能用load导入,因为不走MR程序
所以,采用insert方式加载数据,桶个数即为numsReducetask个数。

注:还需要设置一个属性,强制分桶,否则看不到文件被划分

抽样查询:(分区可以用来增加过滤条件,分桶也可以。因为分桶机制可以只查询特定文件,因此可用于抽样。)

格式:select * from 表名 tablesample (bucket X out of Y on id);

设总桶数为Z

y: 相隔几个桶再次抽取,z/y 表示一共抽取几桶,所以y必须是桶数z的因子或倍数

X:从第几桶开始抽 ,需满足1<= X<= Y;

例子: x = 1, z = 4 ,y =2
则抽取, z/y = 2桶,从第一桶是 1(开始), 第3桶。

空字段赋值
函数说明
NVL:给值为NULL的数据赋值,它的格式是NVL( string1, replace_with)。它的功能是如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值,如果两个参数都为NULL ,则返回NULL。

case when

基本语法:

案例:

行转列
一列多行,变成一列一行。
concat:

concat_ws(separator,str1,str2,…):第一个参数为分隔符,后面的可以为字符数组

collect_set(x):返回一个set集合,去重
collect_list(x),返回一个list集合,不去重。

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

窗口函数

  1. 相关函数说明
    OVER():指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变而变化
    CURRENT ROW:当前行
    n PRECEDING:往前n行数据
    n FOLLOWING:往后n行数据
    UNBOUNDED:起点,UNBOUNDED PRECEDING 表示从前面的起点, UNBOUNDED FOLLOWING表示到后面的终点
    LAG(col,n):往前第n行数据
    LEAD(col,n):往后第n行数据
    NTILE(n):把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,NTILE返回此行所属的组的编号。
    注意:n必须为int类型。
    补充:日期函数
    year(param):返回参数的年份
    month(param):返回参数的月份
    substring(str,pos[, len]):截取字符串

聚集函数默认工作范围式分组后的每个组内。
窗口函数 = 函数+ 窗口

函数:当前要调用的函数。一般是一个UDAF函数。 窗口:指当前函数的工作范围(计算的数据集的范围)

//over()中既不定义wind 子句也没有order by,窗口范围默认为整个数据集
//当指定order by但是没有显示定义winddow字句,哪么窗口默认为上无边界到当前行。
窗口函数操作的范围不会超过窗口的大小.

特殊情况: ①只有order by,没有窗口子句,默认窗口的大小是从上无边界到当前行! ②没有order by,没有窗口子句,默认窗口的大小是从上无边界到下无边界!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询