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

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加载数据,自动创建分区。

    六、分区类型对比

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

    相关文章:

  • “轩辕杯“云盾砺剑CTF挑战赛 Web wp
  • 大模型应用开发第一讲:AI Agent定义
  • Language Model
  • 小白场成长之路-计算机网络(三)
  • 课上实验111111
  • rocky linux-系统基本管理
  • Netty学习专栏(五):Netty高性能揭秘(Reactor模式与零拷贝的深度实践)
  • 高能效比服务器
  • 热门大型语言模型(LLM)应用开发框架
  • FFmpeg 4.3 H265 二十二.2,在网络环境RTSP中,断线下如何处理
  • Prompt Engineering 提示工程介绍与使用/调试技巧
  • 深度解析新能源汽车结构与工作原理
  • MySQL的日志和备份
  • 像造汽车一样造房子:装配式建筑4.0如何重塑未来人居
  • Three.js搭建小米SU7三维汽车实战(5)su7登场
  • 汽车零部件行业PLM案例:得瑞客汽车(Dereik) 部署国产PLM
  • 数字ic后端设计从入门到精通5(含fusion compiler, tcl教学)def详解
  • AI时代新词-生成对抗网络(GAN)
  • IBM DB2升级过程
  • 【springboot项目部署】打包部署
  • 网站做中文和英文切换/外贸网络推广怎么做
  • 西宁网站建设制作公司/考研最靠谱的培训机构
  • ps做网站学到什么程度/可口可乐软文营销案例
  • 云营销网站建设电话咨询/广东网络推广运营
  • 寮步镇仿做网站/十大新媒体平台有哪些
  • 网站建设费用计入固定资产/广告开户