hive学习分区&&函数

hive分区

在hdfs上创建文件夹

为什么分区

复制代码
	1、提高查询效率,分区不用全表扫描;常见用天区分

语法

复制代码
partitioned by

效率很慢

复制代码
切换引擎,spark

语法

string数据,需要添加单''

sql 复制代码
#加载数据到hdfs
load data local  inpath  '/home/hivedata/user11.txt' into table  part1 partition (dt='2026-03-19')


load data local  inpath  '/home/hivedata/user11.txt' into table  part1 partition (year='2026',month='12',day='31')
sql 复制代码
#创建分区表
create table part1(
    id int,
    name string,
    gae int
)
partitioned by (dt string)

row format delimited
fields terminated by ',';


create table part3(
    id int,
    name string,
    gae int
)
partitioned by (year string,month string,day string)

row format delimited
fields terminated by ',';

字段名称是否区分大小写

不区分

分区的增删改查

sql 复制代码
select * from part1 where dt='' union select * from part1 where dt = '20260824'   #会转化成mapreduce

select * from part1 where dt = '20260823' or dt = '20260824'

select * from part1 where dt in ( '20260823'  '20260824')

show partitions  part1;


alter table  part1 add partition (dt = '20260423')


#查看表的设计
desc part1;
desc formatted part1;

分区关联数据的三种方式

sql 复制代码
#上传数据后修复
create table part5(
    id int,
    name string,
    gae int
)
partitioned by (year string,month string,day string)

row format delimited
fields terminated by ',';

dfs -put /home/hivedata/user1.txt /user/hive/warehouse/yhdb.db/part5/year=2023/month=08/day=26


load data local inpath '/home/hivedata/user.txt' into table
part5 partition(year='2026',month='03',day='21')

分区的种类

静态分区:先创建,再加载数据

动态分区:直接加载数据,根据数据动态创建分区

混合分区:有静态,还有动态,某个字段指定;

sql 复制代码
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;

hive函数

sql 复制代码
show function;
show function abs
sql 复制代码
# abs 绝对值
select abs(-7);

#日期函数
#current_data()、current_timestamp()、unix_timestamp();


#lower()
#upper()
#length()
#concat() 拼接
#concat_ws() 过滤-
#substr(),3  截取
#replace("123124","2",",")1,31,4

#split("","")切割

#size()数组

#round()取整数

#case  when

#get_json_object()
#parse_url()
#if(1=1,1,2)
#pmod(3,2) = 1

窗口函数

sql 复制代码
select *,count(1) over() '订单量  ' from t_order;
#over是窗口,不加条件,默认所有数据统计;可以加条件限制

select *,count(1) over() '订单量' from t_order where substr(orderdata,1,7) = '2018-01'

#分组distribute by name,substr(orderdate,1,7)
select *,sum(cost) over(distribute by name,substr(orderdate,1,7)) from t_order

#每个顾客的明细,
select *, sum(cost) over (distribute by name,substr(orderdate,1,7) sort by orderdate desc) from t_order
select*,sum(cost),over(partition by name,month(orderdate) order by orderdate desc)from t_order
#
相关推荐
我命由我1234540 分钟前
6-3.Python 异常处理 - 异常处理进阶(else 块与 finally 块、异常传递、自定义异常)
开发语言·前端·数据库·后端·python·学习·java-ee
外收内放1 小时前
FastAPI猜字谜实战(8):收官
开发语言·python·学习·fastapi
David猪大卫1 小时前
【C++修炼】STL容器—stack与queue
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
fengci.2 小时前
CTF2刷题记录(困难部分)
android·开发语言·前端·学习·php
qeen872 小时前
【Linux】磁盘读写文件原理及文件系统基本概念介绍
linux·运维·服务器·笔记·学习
无心水2 小时前
6、软件工程 核心考点与学习笔记
笔记·学习·软件工程·软考高级·架构师·软考·软考系统架构设计师
ue星空2 小时前
学完老师的课程我能不能自己也开课?
学习
Rabitebla2 小时前
【Linux 底层原理】工具篇 (三):gcc/g++ 编译工具、动静态库与编译原理
linux·运维·服务器·笔记·学习
程序猿乐锅2 小时前
Streamlit 实现 AI 聊天 Agent:角色提示词、流式输出与会话管理
开发语言·前端·笔记·后端·python·学习
程序猿乐锅3 小时前
面向对象练习:图书借阅系统里的封装、抽象类与多态
开发语言·前端·数据库·后端·python·学习·1024程序员节