hive 静态分区与动态分区(笔记)

目录

前言:

静态分区:

1.创建分区

2.删除分区

3.在分区中插入数据

4.查看分区表数据

[动态分区 :](#动态分区 :)

2.查看v表源数据

3.以emp_name为动态字段数据抽取到employee表

总结


前言:

Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多,从而可以更快地查询数据。

分区可以是静态分区和动态分区

静态分区:

静态分区:是在表创建之后创建好的,可以手动指定分区键的值(直接给值)。静态分区通常用于数据量较为固定的场景,分区信息不会经常变更。在创建表时,可以使用partitioned by语句指定分区键,示例如下:

sql 复制代码
CREATE TABLE employee (
  emp_id INT,
  emp_name STRING,
  emp_date STRING,
  emp_salary FLOAT
)
PARTITIONED BY (emp_dept STRING);

创建及插入数据:

1.创建分区

alter table employee add partition(emp_dept='20230920');

alter table employee add partition(emp_dept='20230910');

alter table employee add partition(emp_dept='20230912');

alter table employee add partition(emp_dept='20230917');

2.删除分区

alter table employee drop partition (emp_dept='20230910');

alter table employee drop partition (emp_dept='20230920');

alter table employee drop partition (emp_dept='20230914');

3.在分区中插入数据

从其他表中数据插入并定义区间

insert into gh_test.employee partition(emp_dept='20230914') select * from v where emp_date='2023-09-14'

4.查看分区表数据

select * from gh_test.employee where emp_dept='20230914'


动态分区 :

动态分区:

指的是分区的字段值是基于查询结果自动推断出来的(分区没有直接给值),使用Insert Select语句进行插入。

动态分区通常用于数据量较大、分区信息需要随着数据导入而变化的场景。在插入数据时,

首先开启动态分区:

sql 复制代码
# 表示开启动态分区
set hive.exec.dynamic.partition=true;

set hive.exec.dynamic.partition.mode=nostrict;

2.查看v表源数据

3.以emp_name为动态字段数据抽取到employee表

sql 复制代码
insert overwrite table gh_test.employee
partition (emp_dept)        //先声明不定义值
select v1.*,v1.emp_name from v as v1  //v1.emp_name 为分区值(可以理解为以这个emp_name字段进行了分区)

4.查看分区结果

sql 复制代码
show partition gh_test.employee

总结

静态分区和动态分区各有其优缺点,需要根据实际情况进行选择。静态分区可以提高查询效率,但需要手动维护分区信息;动态分区可以自动维护分区信息,但对于大量数据导入可能会比较慢。

相关推荐
安冬的码畜日常9 分钟前
【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)
笔记·vim·自学笔记·vim同步练习·vim缓冲区·vim buffer·vim缓冲区练习
一只码代码的章鱼18 分钟前
粒子群算法 笔记 数学建模
笔记·算法·数学建模·逻辑回归
圆圆滚滚小企鹅。24 分钟前
刷题笔记 贪心算法-1 贪心算法理论基础
笔记·算法·leetcode·贪心算法
杨过姑父40 分钟前
ES6 简单练习笔记--变量申明
前端·笔记·es6
l1x1n01 小时前
No.37 笔记 | Python面向对象编程学习笔记:探索代码世界的奇妙之旅
笔记·python·学习
路上阡陌1 小时前
Java学习笔记(二十四)
java·笔记·学习
MasterNeverDown2 小时前
WPF 使用iconfont
hadoop·ui·wpf
束照2 小时前
noteboolm 使用笔记
笔记·notebooklm
安冬的码畜日常2 小时前
【Vim Masterclass 笔记23】第十章:Vim 缓冲区与多窗口的用法概述 + S10L42:Vim 缓冲区的用法详解与多文件编辑
笔记·vim·buffer·vim缓冲区·vim buffer·vim多文件编辑·vim多文件
初九之潜龙勿用3 小时前
我的创作纪念日,纪念我的第512天
笔记