当前位置: 首页 > article >正文

Hive 分区详解:从基础概念到实战应用

一、为什么要分区?

1.将大规模数据按规则(如时间、地域)划分到不同目录,提升数据组织性。

2.通过分区过滤,减少扫描数据量,显著提升查询效率。

3.不同分区可对应不同业务线或权限,增强数据隔离性。

二、如何分区?

核心语法

CREATE TABLE table_name(col1 STRING,col2 INT
) 
PARTITIONED BY (partition_col STRING, ...) -- 分区字段定义
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

分区字段:独立于表结构的伪列,物理存储为 HDFS 目录,查询时可直接使用。

分级分区:支持多级分区(如PARTITIONED BY (year, month, day)),对应多级目录。

三、分区实战

1. 一级分区(单字段分区)

场景:按日期分区(如dt=20230825)。
步骤

  1. 建表
    CREATE TABLE user_log(uid STRING,action STRING
    ) 
    PARTITIONED BY (dt STRING);
    
  2. 加载数据
    LOAD DATA LOCAL INPATH '/data/user1.txt' INTO TABLE user_log PARTITION (dt='20230825');
    
  3. 查询
    SELECT * FROM user_log WHERE dt='20230825'; -- 直接使用分区字段过滤
    

2. 二级分区(双字段分区)

建表

CREATE TABLE order_data(order_id STRING,amount DOUBLE
) 
PARTITIONED BY (country STRING, date STRING);

加载数据

LOAD DATA INPATH '/data/order_us_202308.txt' INTO TABLE order_data 
PARTITION (country='us', date='20230801');

3. 分区字段大小写测试

字段名:不区分大小写(如PARTITIONED BY (Dt STRING)dt等价)。

字段值:区分大小写(如dt='20230825'Dt='20230825'视为不同分区)。

四、分区操作高级技巧

1. 动态分区(重点)

场景:根据数据内容自动创建分区(如按订单国家和日期动态分区)。
步骤

  1. 配置参数
    SET hive.exec.dynamic.partition=true; -- 开启动态分区(默认开启)
    SET hive.exec.dynamic.partition.mode=nonstrict; -- 非严格模式(允许全动态分区)
    SET hive.exec.max.dynamic.partitions.pernode=500; -- 单节点最大分区数
    
  2. 创建目标表
    CREATE TABLE order_dynamic(order_id STRING
    ) 
    PARTITIONED BY (country STRING, order_date STRING);
    
  3. 动态插入数据
    INSERT OVERWRITE TABLE order_dynamic PARTITION (country, order_date)
    SELECT order_id, country, order_date FROM raw_orders; -- 分区字段需为SELECT后两位
    

2. 混合分区(静态 + 动态)

场景:固定年份 + 动态月日分区。
示例

INSERT INTO dy_part2 PARTITION (year='2019', month, day) -- year为静态分区,month/day为动态
SELECT id, name, month, day FROM temp_part2;

3. 分区管理命令

添加分区

ALTER TABLE user_log ADD PARTITION (dt='20230826'); -- 空分区
ALTER TABLE user_log ADD PARTITION (dt='20230827') LOCATION '/hive/user_log/dt=20230827'; -- 指定路径
ALTER TABLE user_log DROP PARTITION (dt='20230825');
SHOW PARTITIONS user_log;

    五、分区数据关联的三种方式

    1. 方式一:上传数据后修复(适合非 Hive 创建的分区)
      MSCK REPAIR TABLE user_log; -- 自动扫描HDFS目录并关联元数据
      
    2. 方式二:手动添加分区
      使用ALTER TABLE ADD PARTITION命令,需指定分区路径。
    3. 方式三:LOAD 直接写入分区
      在建表后直接通过LOAD ... PARTITION加载数据,自动创建分区。

    六、分区类型对比

    类型特点适用场景
    静态分区分区字段值在插入时明确指定,需提前规划已知分区规则的历史数据
    动态分区分区字段值由数据动态生成,无需预先创建实时数据或未知分区场景
    混合分区部分静态 + 部分动态,平衡灵活性与可控性固定维度 + 变化维度组合
    http://www.lryc.cn/news/2391977.html

    相关文章:

  • Android studio进阶开发(六)--如何用真机通过okhttp连接服务器
  • 如何解决网站服务器的异常问题?
  • WeakAuras Lua Script [ICC BOSS 11 - Sindragosa]
  • 用户界面禁忌——基础原则
  • 电脑开机后出现bootmgr is conmpressed原因及解决方法
  • vite配置一个css插件
  • React+Taro 微信小程序做一个页面,背景图需贴手机屏幕最上边覆盖展示
  • Spring框架学习day4--Spring集成Mybatis(IOC)
  • 太阳系运行模拟程序-html动画
  • 【C++ Qt】容器类(GroupBox、TabWidget)内附思维导图 通俗易懂
  • SOC-ESP32S3部分:18-串口
  • CSS 样式表的四种应用方式及css注释的应用小结
  • 五、web安全--XSS漏洞(2)--XSS相关payload
  • AI架构师的新工具箱:ChatGPT、Copilot、AutoML、模型服务平台
  • 关于智能体接入后端,在Apifox能够传参数给智能体的测试
  • 有铜半孔工艺的制造难点与工艺优化
  • python分步合并处理excel数据
  • MC0309魔法项链
  • 为 Ubuntu 安装的软件创建桌面图标
  • uni-app 中开发问题汇总
  • https下git拉取gitlab仓库源码
  • 距离计算范围查找距离排序
  • PS linux 基础篇1-AXI_DMA
  • AI大模型学习三十、ubuntu安装comfyui,安装插件,修改返回405 bug,值得一看喔
  • 11高可用与容错
  • 百度之星2024 初赛第一场 补给
  • Collection集合遍历的三种方法
  • Taro on Harmony C-API 版本正式开源
  • 知识隔离的视觉-语言-动作模型:训练更快、运行更快、泛化更好
  • [ARM][架构] 02.AArch32 程序状态