三、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;
    
目录
相关文章
|
2天前
|
数据采集 人工智能 安全
|
12天前
|
云安全 监控 安全
|
4天前
|
自然语言处理 API
万相 Wan2.6 全新升级发布!人人都能当导演的时代来了
通义万相2.6全新升级,支持文生图、图生视频、文生视频,打造电影级创作体验。智能分镜、角色扮演、音画同步,让创意一键成片,大众也能轻松制作高质量短视频。
1034 151
|
3天前
|
编解码 人工智能 机器人
通义万相2.6,模型使用指南
智能分镜 | 多镜头叙事 | 支持15秒视频生成 | 高品质声音生成 | 多人稳定对话
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1727 9
|
9天前
|
人工智能 自然语言处理 API
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸
一句话生成拓扑图!next-ai-draw-io 结合 AI 与 Draw.io,通过自然语言秒出架构图,支持私有部署、免费大模型接口,彻底解放生产力,绘图效率直接爆炸。
678 152
|
11天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
638 13
|
5天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
398 4