大数据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中主要用于管理一组表和数据的命名空间,实现逻辑上的隔离。
-
创建数据库
-- 基本创建 CREATE DATABASE myhive; USE myhive; -- 切换至该数据库 -- 安全创建(如果不存在则创建) CREATE DATABASE IF NOT EXISTS myhive; -- 创建并指定其在HDFS上的存储路径 CREATE DATABASE myhive2 LOCATION '/myhive2'; -
查看与删除数据库
-- 查看数据库详细信息 DESC DATABASE myhive; -- 删除一个空数据库 DROP DATABASE myhive; -- 强制删除数据库,包括其下的所有表 DROP DATABASE myhive2 CASCADE;
三、数据表(Table)操作
表是Hive中数据存储的核心单元,其定义包括列名、数据类型以及数据在HDFS上的存储格式和位置。
-
创建内部表(Managed Table)
内部表是Hive默认创建的表类型,由Hive全权管理其数据和元数据。CREATE TABLE IF NOT EXISTS stu ( id INT, name STRING );特点:删除内部表时,HDFS上的数据文件会连同元数据一起被删除。
-
指定字段分隔符
Hive默认使用不可见的特殊字符^A(\001)作为字段分隔符。我们可以在建表时自定义。CREATE TABLE stu2 ( id INT, name STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'; -- 使用制表符分隔 -
通过查询创建表(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数据类型,以及分区表和分桶表这两个用于优化查询性能的强大工具。

浙公网安备 33010602011771号