大数据Hadoop学习六

博客一:Hive核心概念与数据定义(DDL)全方位解析

摘要: 本文是分布式SQL计算工具Hive入门的第一周学习总结,全面介绍了Hive的架构核心、数据库与表的创建、管理以及内部表与外部表的本质区别,帮助读者构建坚实的Hive知识基础。

一、Hive是什么?它与HDFS的关系

Apache Hive并非传统意义上的数据库,而是一个构建在Hadoop之上的数据仓库工具。它可以将结构化的数据文件映射为一张数据库表,并提供了一种名为HiveQL(简称HQL)的类SQL查询语言,将复杂的MapReduce任务转换为简单的SQL查询,极大地降低了大数据处理的门槛。

其核心在于:Hive本身不存储数据,它只是管理数据的元信息(Meta Data),如表名、列名、数据类型、数据所在位置等。真正的数据文件存储在HDFS上。因此,Hive中的数据库(Database) 在HDFS上就是一个以.db结尾的文件夹,默认存放在/user/hive/warehouse路径下。

二、数据库(Database)操作

数据库在Hive中主要用于管理一组表和数据的命名空间,实现逻辑上的隔离。

  1. 创建数据库

    -- 基本创建
    CREATE DATABASE myhive;
    USE myhive; -- 切换至该数据库
    
    -- 安全创建(如果不存在则创建)
    CREATE DATABASE IF NOT EXISTS myhive;
    
    -- 创建并指定其在HDFS上的存储路径
    CREATE DATABASE myhive2 LOCATION '/myhive2';
    
  2. 查看与删除数据库

    -- 查看数据库详细信息
    DESC DATABASE myhive;
    
    -- 删除一个空数据库
    DROP DATABASE myhive;
    
    -- 强制删除数据库,包括其下的所有表
    DROP DATABASE myhive2 CASCADE;
    

三、数据表(Table)操作

表是Hive中数据存储的核心单元,其定义包括列名、数据类型以及数据在HDFS上的存储格式和位置。

  1. 创建内部表(Managed Table)
    内部表是Hive默认创建的表类型,由Hive全权管理其数据和元数据。

    CREATE TABLE IF NOT EXISTS stu (
      id INT,
      name STRING
    );
    

    特点:删除内部表时,HDFS上的数据文件会连同元数据一起被删除。

  2. 指定字段分隔符
    Hive默认使用不可见的特殊字符^A\001)作为字段分隔符。我们可以在建表时自定义。

    CREATE TABLE stu2 (
      id INT,
      name STRING
    ) ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\t'; -- 使用制表符分隔
    
  3. 通过查询创建表(CTAS)

    -- 基于查询结果建表(会复制数据)
    CREATE TABLE stu3 AS SELECT * FROM stu2;
    
    -- 仅复制表结构,不复制数据
    CREATE TABLE stu4 LIKE stu2;
    

四、内部表 vs. 外部表(External Table)

这是Hive中一个至关重要的概念。

特性 内部表(Managed Table) 外部表(External Table)
关键字 CREATE TABLE ... CREATE EXTERNAL TABLE ...
数据管理 Hive 用户控制
存储位置 hive.metastore.warehouse.dir 指定 LOCATION 子句指定
删除行为 元数据和HDFS数据均被删除 仅删除元数据,HDFS数据保留
适用场景 中间表、临时结果 原始数据、需要多工具共享的数据

创建外部表并关联数据:

CREATE EXTERNAL TABLE test_ext1 (
  id INT,
  name STRING
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
LOCATION '/tmp/test_ext1'; -- 指向HDFS路径

-- 之后将数据文件上传至该LOCATION路径,表即可查询到数据
-- hadoop fs -put data.txt /tmp/test_ext1/

内外表转换:

-- 内部表转外部表
ALTER TABLE stu SET TBLPROPERTIES('EXTERNAL'='TRUE');
-- 外部表转内部表
ALTER TABLE stu SET TBLPROPERTIES('EXTERNAL'='FALSE');

五、总结与展望

第一周的学习我们掌握了Hive的根基:理解了其与HDFS的关系,学会了如何创建和管理数据库与表,并深入辨析了内部表和外部表的区别及其应用场景。这些是后续所有复杂操作的基础。

下一周,我们将深入探讨Hive的数据操作语言(DML),学习如何将数据加载到表中、如何使用复杂的Array、Map、Struct数据类型,以及分区表和分桶表这两个用于优化查询性能的强大工具。


posted @ 2025-08-30 18:51  haoyinuo  阅读(10)  评论(0)    收藏  举报