大数据开发必备技能_第三阶段07_Hive表管理与分区技术文档

目录

  1. 摘要描述

  2. Hive表管理

    • 2.1 表的基本操作

    • 2.2 内部表 vs 外部表

    • 2.3 创建与加载外部表

  3. Hive分区

    • 3.1 静态分区

    • 3.2 动态分区

  4. 总结

  5. 实战练习

  6. 常见面试题

  7. 附录:Hive配置参数


1. 摘要描述

本文详细讲解Hive中表管理分区的核心操作,包括内部表与外部表的区别、静态分区与动态分区的实现方法。通过实战练习和面试题,帮助读者快速掌握Hive数据存储与优化的关键技能。


2. Hive表管理

2.1 表的基本操作
  • 查看建表语句

    sql

    SHOW CREATE TABLE emp;  
     
  • 描述表结构

    sql

    DESC emp;  
    DESC FORMATTED emp;  -- 查看详细信息(包括存储路径、表类型等)  
     
2.2 内部表 vs 外部表
特性内部表(Managed Table)外部表(External Table)
创建方式默认创建需添加EXTERNAL关键字
数据管理数据由Hive管理数据由HDFS管理
删除表的影响删除元数据和HDFS数据仅删除元数据,HDFS数据保留
TRUNCATE支持支持不支持

示例:创建外部表并加载数据

sql

-- 创建外部表  
CREATE EXTERNAL TABLE emp_ext (  
  empno INT, ename STRING, job STRING,  
  mgr INT, hiredate STRING, sal INT, comm INT, deptno INT  
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';  

-- 加载数据  
LOAD DATA LOCAL INPATH '/home/emp' INTO TABLE emp_ext;  
 
2.3 内部表与外部表的实战练习
  1. 创建外部表dept_ext

    sql

    CREATE EXTERNAL TABLE dept_ext (deptno INT, dname STRING, loc STRING);  
     
  2. 加载数据

    sql

    INSERT OVERWRITE TABLE dept_ext SELECT * FROM dept; 
     
  3. 删除表观察HDFS变化

    • 删除内部表:HDFS数据一并删除。

    • 删除外部表:仅元数据删除,HDFS数据保留。


3. Hive分区

3.1 静态分区
  • 定义:手动指定分区值加载数据。

  • 操作步骤

    1. 创建分区表

      sql

      CREATE TABLE t_sales (  
        brand STRING, price INT, quantity INT  
      ) PARTITIONED BY (month INT)  
      ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';  
       
    2. 加载数据到指定分区

      sql

      LOAD DATA LOCAL INPATH '/home/202001' INTO TABLE t_sales PARTITION (month=202001);  
       
    3. 查询分区数据

      sql

      SELECT * FROM t_sales WHERE month = 202001;  
       
    4. 管理分区

      sql

      -- 添加分区  
      ALTER TABLE t_sales ADD PARTITION (month=202003);  
      -- 删除分区  
      ALTER TABLE t_sales DROP PARTITION (month=202001);  
       
3.2 动态分区
  • 定义:根据数据自动创建分区。

  • 关键配置

    sql

    SET hive.exec.dynamic.partition.mode = nonstrict;  -- 启用非严格模式  
     
  • 示例:将emp表数据按deptno动态分区

    sql

    -- 创建分区表  
    CREATE TABLE emp_par (  
      empno INT, ename STRING, job STRING, mgr INT,  
      hiredate STRING, sal INT, comm INT  
    ) PARTITIONED BY (deptno INT);  
    
    -- 插入数据(确保SELECT最后字段是分区字段)  
    INSERT OVERWRITE TABLE emp_par  
    SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno FROM emp; 
     

4. 总结

  • 表管理:外部表适合共享数据,内部表适合临时数据。

  • 静态分区:适用于明确分区值的场景。

  • 动态分区:适用于分区字段值多样且需要自动分配的场景。


5. 实战练习

  1. 创建分区表t_score

    sql

    CREATE TABLE t_score (  
      sno INT, class STRING, score INT  
    ) PARTITIONED BY (grade INT);  
     
  2. 加载数据到分区

    sql

    LOAD DATA LOCAL INPATH '/home/1' INTO TABLE t_score PARTITION (grade=1);  
    LOAD DATA LOCAL INPATH '/home/2' INTO TABLE t_score PARTITION (grade=2);  
     

6. 常见面试题

  1. 问题:Hive内部表与外部表的区别?
    :外部表数据由HDFS管理,删除表仅删除元数据;内部表数据由Hive管理,删除表会同时删除元数据和HDFS数据。

  2. 问题:动态分区为何需要设置nonstrict模式?
    :严格模式下要求至少一个静态分区,非严格模式允许所有分区动态生成。

  3. 问题:分区字段是否存在于数据文件中?
    :分区字段是“伪列”,数据文件中不存储,仅通过目录结构体现。


7. 附录:Hive配置参数

sql

-- 动态分区配置  
SET hive.exec.dynamic.partition = true;  
SET hive.exec.dynamic.partition.mode = nonstrict;  

-- 其他优化参数  
SET hive.optimize.sort.dynamic.partition = true;  

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据小塔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值