三、Hive DDL数据库操作

简介: Hive 中的数据库(Schema)是构建数据仓库的基础单位。这次我们来了解 Hive 中创建、查看、切换、修改与删除数据库的 DDL 操作语法与用法,涵盖 COMMENT、LOCATION、DBPROPERTIES 等常用参数,辅以丰富示例与练习,助你扎实掌握 Hive 数据库管理核心能力。

Apache Hive 中,数据库 (Database),有时也被称为模式 (Schema),是组织和管理 表及其他对象基本命名空间单元。熟练掌握数据库层面数据定义语言 (DDL) 操作,是构建清晰、有序的 Hive 数据仓库的第一步。本篇笔记将详细梳理 Hive 数据库的各种 DDL 语法及其应用实例

一、创建数据库 (CREATE DATABASE / SCHEMA)

创建数据库最基本的操作,它 为你的数据表提供了一个 逻辑容器

1. 基本创建语法 语法:
sql CREATE DATABASE [IF NOT EXISTS] database_name;
或使用 SCHEMA 关键字 (等效):
sql CREATE SCHEMA [IF NOT EXISTS] database_name;
说明:
IF NOT EXISTS:如果尝试创建一个已存在的数据库,加上此子句可以避免抛出错误,命令会静默地不执行任何操作。若不加且数据库已存在,则会报错 database_name: 你为数据库设定的 唯一名称。命名规则通常 遵循字母、数字和下划线的组合, 不建议使用 特殊字符或 Hive 关键字
示例:
sql -- 创建一个名为 hr_system 的数据库 CREATE DATABASE hr_system; -- 尝试创建一个名为 sales_data 的数据库,如果它不存在 CREATE DATABASE IF NOT EXISTS sales_data; -- 使用 SCHEMA 关键字创建 CREATE SCHEMA IF NOT EXISTS marketing_campaigns;
2. 创建数据库并添加注释 (COMMENT)
为数据库添加注释是一个 良好实践,有助于 理解数据库的 用途
语法:
sql CREATE DATABASE [IF NOT EXISTS] database_name COMMENT '这是一个描述性的注释';
示例:
sql CREATE DATABASE IF NOT EXISTS finance_department COMMENT '存储所有财务相关数据的数据库';

3. 创建数据库并指定存储位置 (LOCATION)
默认情况下,Hive 会在配置文件 (hive-site.xml 中的 hive.metastore.warehouse.dir 指定的数据仓库根目录) 下为每个数据库创建一个同名子目录 (通常是 database_name.db) 来存放该数据库下所有表的数据。你可以通过 LOCATION 子句覆盖这个默认行为,将数据库的数据文件存储在 HDFS 的特定路径下。
语法:
sql CREATE DATABASE [IF NOT EXISTS] database_name LOCATION 'hdfs_absolute_path';
说明: hdfs_absolute_path: 必须是 HDFS 上的 一个绝对路径。Hive 不会自动创建这个路径,你需要 确保该路径 已存在或者 Hive 用户有权限在该父目录下 创建子目录
示例:
sql -- 确保 HDFS 路径 /data/project_alpha/db_storage 存在或可被创建 CREATE DATABASE IF NOT EXISTS project_alpha_db LOCATION '/data/project_alpha/db_storage';
注意: 指定 LOCATION 后,该数据库下 新创建的表 (如果建表时 不指定表级别LOCATION) 的 数据默认存放在这个 数据库指定的路径下。

4. 创建数据库并设置属性 (WITH DBPROPERTIES)
你可以为数据库关联一些自定义键值对属性,这些属性存储在 Metastore 中,可以用于记录一些额外的信息
语法:
sql CREATE DATABASE [IF NOT EXISTS] database_name WITH DBPROPERTIES ( 'property_name1' = 'property_value1', 'property_name2' = 'property_value2', ... );
示例:
sql CREATE DATABASE IF NOT EXISTS gaming_stats WITH DBPROPERTIES ( 'owner' = 'GameDevTeam', 'created_date' = '2023-10-28', 'data_sensitivity' = 'medium' );
5. 组合使用所有子句
当然,你可以 组合使用以上 各种可选子句
示例:
sql CREATE DATABASE IF NOT EXISTS retail_analytics COMMENT '零售业务分析数据库' LOCATION '/dw/retail_data' WITH DBPROPERTIES ( 'data_source' = 'Multiple POS Systems', 'refresh_frequency' = 'daily' );

### *二、查看和描述数据库
创建完数据库后,我们需要 方法查看和了解它们的 信息

1. 列出所有数据库 (SHOW DATABASES / SCHEMAS) 语法:
sql SHOW DATABASES;
或使用 SCHEMAS (等效):
sql SHOW SCHEMAS;
作用: 显示当前 Hive Metastore存在所有数据库列表
示例:
sql SHOW DATABASES; -- 可能的输出: -- default -- finance_department -- hr_system -- marketing_campaigns -- my_project_db -- project_alpha_db -- retail_analytics -- sales_data -- gaming_stats
2. 过滤数据库列表 (LIKE)
你可以 使用 LIKE 子句通配符 ( * 匹配任意字符序列, | 用于分隔多个模式) 来 过滤显示的 数据库名称
语法:
sql SHOW DATABASES LIKE 'pattern_with_wildcards';
示例:
sql -- 显示所有以 "sales" 开头的数据库 SHOW DATABASES LIKE 'sales*'; -- 显示名为 "hr_system" 或 "finance_department" 的数据库 SHOW DATABASES LIKE 'hr_system|finance_department';

3. 查看数据库详细信息 (DESCRIBE DATABASE / SCHEMA)

获取某个特定数据库详细描述
基本语法:
sql DESCRIBE DATABASE database_name;
或使用 SCHEMA (等效):
sql DESCRIBE SCHEMA database_name;
显示更详细信息 (EXTENDED): 使用 EXTENDED 关键字可以 查看数据库的 所有属性 (DBPROPERTIES)。
sql DESCRIBE DATABASE EXTENDED database_name;
示例:
sql DESCRIBE DATABASE retail_analytics; -- 输出可能包含: -- retail_analytics hdfs://namenode_host/dw/retail_data hadoop_user USER 零售业务分析数据库 DESCRIBE DATABASE EXTENDED gaming_stats; -- 输出可能包含: -- gaming_stats hdfs://namenode_host/user/hive/warehouse/gaming_stats.db hive_user USER (owner=GameDevTeam, created_date=2023-10-28, data_sensitivity=medium)

*三、切换和使用数据库
在进行表操作之前,通常需要 先指定操作当前数据库

1. 切换当前数据库 (USE) 语法:
sql USE database_name;
作用: 将当前 Hive 会话默认数据库设置为 database_name。之后所有不显式指定数据库的表操作 (如 CREATE TABLE my_table ...) 都会在该数据库执行 示例:
sql USE retail_analytics; -- 后续的 SHOW TABLES; CREATE TABLE some_table ...; 等命令都将在 retail_analytics 数据库上下文中执行

2. 查看当前数据库 (CURRENT_DATABASE())
如果你不确定当前工作在哪个数据库下,可以使用这个内置函数
语法:
sql SELECT current_database();
示例:
sql SELECT current_database(); -- 输出可能为: retail_analytics (如果之前执行了 USE retail_analytics;)

*四、修改数据库属性 (ALTER DATABASE / SCHEMA)
一旦数据库创建完成,你 仍然可以修改它的 一些属性,最 常用的是 修改 DBPROPERTIES
注意直接修改数据库的 LOCATIONCOMMENT 通常 不被直接支持操作复杂/有风险,这些 属性一般在 创建时确定好

1. 修改数据库属性 (SET DBPROPERTIES) 语法:
sql ALTER DATABASE database_name SET DBPROPERTIES ( 'property_name1' = 'new_value1', 'property_name2' = 'new_value2', ... );
或使用 SCHEMA (等效):
sql ALTER SCHEMA database_name SET DBPROPERTIES (...);
作用: 添加新的数据库属性,或者 更新已有属性的
示例:
sql -- 为 gaming_stats 数据库更新 owner 并添加一个新属性 last_reviewed_by ALTER DATABASE gaming_stats SET DBPROPERTIES ( 'owner' = 'UpdatedGameTeamLead', 'last_reviewed_by' = 'DataQualityTeam' ); -- 查看修改后的属性 DESCRIBE DATABASE EXTENDED gaming_stats;

*五、删除数据库 (DROP DATABASE / SCHEMA)
删除数据库是一个 需要非常谨慎的操作,因为它 可能导致 大量数据和元数据丢失

1. 基本删除语法 语法:
sql DROP DATABASE [IF EXISTS] database_name;
或使用 SCHEMA (等效):
sql DROP SCHEMA [IF EXISTS] database_name;
默认行为 (RESTRICT): 如果 不加任何额外选项, DROP DATABASE 默认 采用 RESTRICT 行为。这意味着如果 数据库中包含任何表,删除操作会 失败并报错,以 防止意外删除有内容的数据库。
示例 (尝试删除一个可能非空的数据库):
sql -- 假设 temp_db 中有表,以下命令会失败 DROP DATABASE IF EXISTS temp_db; -- ERROR: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database temp_db is not empty. One or more tables exist.
2. 强制删除数据库及其内容 (CASCADE)
如果你确定删除数据库以及 其中包含所有表和数据 (对于内部表),可以使用 CASCADE 选项。
语法:
sql DROP DATABASE [IF EXISTS] database_name CASCADE;
警告:这是一个非常危险的操作! 一旦执行,数据库及其 所有内容 (包括内部表的HDFS数据) 都将 被永久删除且通常无法恢复请务必三思而后行,并 确认真的要这样做。
示例:
sql -- 强制删除名为 staging_area 的数据库及其下的所有表和数据 DROP DATABASE IF EXISTS staging_area CASCADE; -- 命令执行成功,staging_area 数据库及其内容消失

*六、练习
  1. 练习题 1: 创建一个名为 education_platform 的数据库,并为其添加注释 "用于存储在线教育平台的数据"。
  2. 练习题 2: 创建一个名为 temporary_storage 的数据库,并将其数据存储位置指定到 HDFS 路径 /tmp/hive_temp_db
  3. 练习题 3: 为 education_platform 数据库添加一个属性 contact_person,值为 edu_admin@example.com
  4. 练习题 4: 列出所有以 edu 开头的数据库。
  5. 练习题 5: 查看 temporary_storage 数据库的详细信息(包括属性,如果之前设置了的话)。
  6. 练习题 6: 切换当前会话到 education_platform 数据库。
  7. 练习题 7: 创建一个名为 archived_data 的数据库。稍后,尝试删除它(假设它是空的)。
  8. 练习题 8: 假设 temporary_storage 数据库中意外地创建了一些表(我们这里不实际创建表,只是假设情况),现在需要彻底删除 temporary_storage 数据库及其所有潜在内容。写出对应的命令。
七、答案
  • 答案 1:

    CREATE DATABASE education_platform
    COMMENT '用于存储在线教育平台的数据';
    
  • 答案 2:

    -- 假设HDFS路径 /tmp/hive_temp_db 已存在或Hive用户有权限创建
    CREATE DATABASE temporary_storage
    LOCATION '/tmp/hive_temp_db';
    
  • 答案 3:

    ALTER DATABASE education_platform SET DBPROPERTIES ('contact_person' = 'edu_admin@example.com');
    
  • 答案 4:

    SHOW DATABASES LIKE 'edu*';
    
  • 答案 5:

    DESCRIBE DATABASE EXTENDED temporary_storage;
    
  • 答案 6:

    USE education_platform;
    
  • 答案 7:

    CREATE DATABASE archived_data;
    -- 稍后删除 (假设为空)
    DROP DATABASE IF EXISTS archived_data;
    
  • 答案 8:

    -- 强制删除 temporary_storage 数据库及其所有内容
    DROP DATABASE IF EXISTS temporary_storage CASCADE;
    
目录
相关文章
|
3月前
|
SQL Java 关系型数据库
二、Hive安装部署详细过程
手把手教你完成 Hive 的安装、配置和可视化连接,适合初学者快速搭建自己的大数据分析平台。内容涵盖从环境准备、Metastore配置,到 DataGrip 连接的全流程,并附带实用的排错指南,助你轻松迈出 Hive 入门第一步。
857 14
|
3月前
|
SQL 存储 JSON
四、Hive DDL表定义、数据类型、SerDe 与分隔符核心
Hive 中的表是数据仓库的核心容器,定义了数据的结构和存储方式。本文系统讲解了 Hive 中创建表的语法与关键参数,包括字段类型、分隔符设置、SerDe 使用等内容,特别通过结构化与复杂数据类型(如 ARRAY、MAP、STRUCT)的案例讲解,让读者理解如何让 Hive 正确“读懂”你的数据。配合常见示例与练习题,帮你打好 Hive 表设计的基础,轻松驾驭文本、JSON 等多格式数据。数据如何入库、如何被解析,一文看懂!
190 12
|
3月前
|
SQL 存储 分布式计算
九、HQL DQL七大查询子句
Hive 查询写得清楚,数据分析就能更顺手。我们这次从入门角度出发,带你理清 Hive 中最常用的七个查询子句(FROM、WHERE、GROUP BY、HAVING、SELECT、ORDER BY、LIMIT),结合执行顺序梳理每一步的用法与注意事项。每个子句都有配套案例,还有实战练习题帮你快速上手。如果你刚开始学习 Hive 查询,或希望把基础打得更扎实,这篇内容值得收藏。
180 9
|
3月前
|
SQL HIVE
十一、Hive JOIN 连接查询
在 Hive 的世界里,JOIN 就像是数据间的红线,把原本分散在各自表里的信息串联起来。无论是内连接、外连接,还是 Hive 特有的左半连接,都各有“武功招式”,适用于不同场景。
237 12
|
3月前
|
机器学习/深度学习 人工智能 监控
别把模型当宠物养:从 CI/CD 到 MLOps 的工程化“成人礼”
别把模型当宠物养:从 CI/CD 到 MLOps 的工程化“成人礼”
392 163
|
3月前
|
SQL 存储 数据管理
七、深入 Hive DDL:管理表、分区与洞察元数据
在日常使用 Hive 的过程中,我们不仅要会建表,更要学会灵活地维护和管理已有的数据结构。从添加字段到修改分区,从查看元数据到删除表或清空数据,掌握这些 DDL 操作和常用的 SHOW 命令,就像掌握了一套管理数据仓库的“万能钥匙”。这次将带你一步步熟悉这些命令的用法和实际应用场景,配合清晰的语法示例与练习题,帮助你更轻松地驾驭 Hive 数据管理的日常工作。
373 6
|
3月前
|
SQL 存储 分布式计算
五、Hive表类型、分区及数据加载
在 Hive 中设计表,绝不仅是“建个结构那么简单”。选对内部表或外部表,决定了数据的归属和生命周期;设计合理的静态/动态分区策略,则直接关系到大数据场景下的查询效率和存储管理成本。本文深入讲解 Hive 表类型与分区机制,配合大量实战代码与练习题,带你从“写对语法”走向“设计合理”,让你的数仓查询快到飞起!
262 11
|
3月前
|
运维 监控 前端开发
基于AI大模型的故障诊断与根因分析落地实现
本项目基于Dify平台构建多智能体协作的AIOps故障诊断系统,融合指标、日志、链路等多源数据,通过ReAct模式实现自动化根因分析(RCA),结合MCP工具调用与分层工作流,在钉钉/企业微信中以交互式报告辅助运维,显著降低MTTD/MTTR。
3518 28
|
3月前
|
SQL 数据采集 存储
六、Hive 分桶
在 Hive 的世界里,除了常见的分区,分桶也是一项非常实用的数据优化方式。它能帮助我们将数据按某个字段均匀划分到多个“桶”中,不仅能提升大表连接的效率,还特别适合做数据抽样和精细管理。本文将带你一步步了解分桶表的创建方法、数据加载过程和常见应用场景,配有丰富示例和练习题,帮助你在实战中轻松掌握这项技能。
324 7