三、Hive DDL数据库操作

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

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

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

  • 1. 基本创建语法
    • 语法:
CREATE DATABASE [IF NOT EXISTS] database_name;
  • 或使用 SCHEMA 关键字 (等效):
CREATE SCHEMA [IF NOT EXISTS] database_name;
  • 说明:
    • IF NOT EXISTS:如果尝试创建一个已存在的数据库,加上此子句可以避免抛出错误,命令会静默地不执行任何操作。若不加且数据库已存在,则会报错
    • database_name: 你为数据库设定的唯一名称。命名规则通常遵循字母、数字和下划线的组合,不建议使用特殊字符或 Hive 关键字
  • 示例:
-- 创建一个名为 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)
    为数据库添加注释是一个良好实践,有助于理解数据库的用途
    • 语法:
CREATE DATABASE [IF NOT EXISTS] database_name
COMMENT '这是一个描述性的注释';
  • 示例:
CREATE DATABASE IF NOT EXISTS finance_department
COMMENT '存储所有财务相关数据的数据库';
  • 3. 创建数据库并指定存储位置 (LOCATION)
    默认情况下,Hive 会在配置文件 (hive-site.xml 中的 hive.metastore.warehouse.dir 指定的数据仓库根目录) 下为每个数据库创建一个同名子目录 (通常是 database_name.db) 来存放该数据库下所有表的数据。你可以通过 LOCATION 子句覆盖这个默认行为,将数据库的数据文件存储在 HDFS 的特定路径下。
    • 语法:
CREATE DATABASE [IF NOT EXISTS] database_name
LOCATION 'hdfs_absolute_path';
  • 说明:
    • hdfs_absolute_path: 必须是 HDFS 上的一个绝对路径。Hive 不会自动创建这个路径,你需要确保该路径已存在或者 Hive 用户有权限在该父目录下创建子目录
  • 示例:
-- 确保 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 中,可以用于记录一些额外的信息

    • 语法:
CREATE DATABASE [IF NOT EXISTS] database_name
WITH DBPROPERTIES ('property_name1' = 'property_value1','property_name2' = 'property_value2',...
);
  • 示例:
CREATE DATABASE IF NOT EXISTS gaming_stats
WITH DBPROPERTIES ('owner' = 'GameDevTeam','created_date' = '2023-10-28','data_sensitivity' = 'medium'
);
  • 5. 组合使用所有子句
    当然,你可以组合使用以上各种可选子句
    • 示例:
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)
    • 语法:
SHOW DATABASES;
  • 或使用 SCHEMAS (等效):
SHOW SCHEMAS;
  • 作用: 显示当前 Hive Metastore存在所有数据库列表
  • 示例:
SHOW DATABASES;
-- 可能的输出:
-- default
-- finance_department
-- hr_system
-- marketing_campaigns
-- my_project_db
-- project_alpha_db
-- retail_analytics
-- sales_data
-- gaming_stats
  • 2. 过滤数据库列表 (LIKE)
    你可以使用 LIKE 子句通配符 (* 匹配任意字符序列,| 用于分隔多个模式) 来过滤显示的数据库名称
    • 语法:
SHOW DATABASES LIKE 'pattern_with_wildcards';
  • 示例:
-- 显示所有以 "sales" 开头的数据库
SHOW DATABASES LIKE 'sales*';-- 显示名为 "hr_system" 或 "finance_department" 的数据库
SHOW DATABASES LIKE 'hr_system|finance_department';
  • 3. 查看数据库详细信息 (DESCRIBE DATABASE / SCHEMA)
    获取某个特定数据库详细描述
    • 基本语法:
DESCRIBE DATABASE database_name;
  • 或使用 SCHEMA (等效):
DESCRIBE SCHEMA database_name;
  • 显示更详细信息 (EXTENDED): 使用 EXTENDED 关键字可以查看数据库的所有属性 (DBPROPERTIES)。
DESCRIBE DATABASE EXTENDED database_name;
  • 示例:
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)
    • 语法:
USE database_name;
  • 作用: 将当前 Hive 会话默认数据库设置为 database_name。之后所有不显式指定数据库的表操作 (如 CREATE TABLE my_table ...) 都会在该数据库执行
  • 示例:
USE retail_analytics;
-- 后续的 SHOW TABLES; CREATE TABLE some_table ...; 等命令都将在 retail_analytics 数据库上下文中执行
  • 2. 查看当前数据库 (CURRENT_DATABASE())
    如果你不确定当前工作在哪个数据库下,可以使用这个内置函数
    • 语法:
SELECT current_database();
  • 示例:
SELECT current_database();
-- 输出可能为: retail_analytics (如果之前执行了 USE retail_analytics;)

四、修改数据库属性 (ALTER DATABASE / SCHEMA) ✏️

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

  • 1. 修改数据库属性 (SET DBPROPERTIES)
    • 语法:
ALTER DATABASE database_name SET DBPROPERTIES ('property_name1' = 'new_value1','property_name2' = 'new_value2',...
);
  • 或使用 SCHEMA (等效):
ALTER SCHEMA database_name SET DBPROPERTIES (...);
  • 作用: 添加新的数据库属性,或者更新已有属性的
  • 示例:
-- 为 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. 基本删除语法
    • 语法:
DROP DATABASE [IF EXISTS] database_name;
  • 或使用 SCHEMA (等效):
DROP SCHEMA [IF EXISTS] database_name;
  • 默认行为 (RESTRICT): 如果不加任何额外选项,DROP DATABASE 默认采用 RESTRICT 行为。这意味着如果数据库中包含任何表,删除操作会失败并报错,以防止意外删除有内容的数据库。
  • 示例 (尝试删除一个可能非空的数据库):
-- 假设 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 选项。
    • 语法:
DROP DATABASE [IF EXISTS] database_name CASCADE;
  • ⚠️ 警告:这是一个非常危险的操作! 一旦执行,数据库及其所有内容 (包括内部表的HDFS数据) 都将被永久删除且通常无法恢复请务必三思而后行,并确认真的要这样做。
  • 示例:
-- 强制删除名为 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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/80557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis(2):Redis + Lua为什么可以实现原子性

Redis 作为一款高性能的键值对存储数据库,与 Lua 脚本相结合,为实现原子性操作提供了强大的解决方案,本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前,我们需要明确原子性的概念…

科普:极简的AI乱战江湖

本文无图。 大模型 ‌2022年2月,‌文生图应用的鼻祖Midjourney上线。 ‌2022年8月,‌开源版的Midjourney,也就是Stable Diffusion上线。 2022年11月30日‌,OpenAI正式发布ChatGPT-3.5。 此后,不断有【大模型】面世&…

CSS- 4.5 css + div 布局 简易网易云音乐 官网布置实例

本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…

【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ

最大连续1的个数 Ⅲ 一、题目链接二、题目三、题目解析四、算法原理解法一:暴力枚举 zero计数器解法二:滑动窗口 五、编写代码六、时空复杂度 一、题目链接 最大连续1的个数 Ⅲ 二、题目 三、题目解析 注意题目中说的是最多k次,在一个数组…

PyTorch音频处理技术及应用研究:从特征提取到相似度分析

文章目录 音频处理技术及应用音频处理技术音视频摘要技术音频识别及应用 梅尔频率倒谱系数音频特征尔频率倒谱系数简介及参数提取过程音频处理快速傅里叶变换(FFT)能量谱处理离散余弦转换 练习案例:音频建模加载音频数据源波形变换的类型绘制波形频谱图波形Mu-Law 编…

鸿蒙OSUniApp 实现的语音输入与语音识别功能#三方框架 #Uniapp

UniApp 实现的语音输入与语音识别功能 最近在开发跨平台应用时,客户要求添加语音输入功能以提升用户体验。经过一番调研和实践,我成功在UniApp项目中实现了语音输入与识别功能,现将过程和方法分享出来,希望对有类似需求的开发者有…

2025年卫星遥感行业最新发展趋势深度分析

一、国内发展趋势:政策引领与技术突破双轮驱动 (一)政策体系持续完善,顶层设计深化行业发展 国家级战略与标准体系构建 中国政府将卫星遥感产业纳入“十四五”规划核心战略,明确构建“通导遥”一体化空间基础设施。20…

SIP协议栈--osip源码梳理

文章目录 osiposip主体结构体code main函数 状态机转化结构体code状态转换 sip事务结构体code osip_dialog结构体code 创建并发送200 OK响应 osip_message结构体code osip_eventcode 打印接收到的SIP消息 osip OSIP(Open Source Implementation of SIP)…

Linux之Yum源与Nginx服务篇

1.Yum源知识理论总结概括 Yum源概述 Yum 源 即软件仓库的标识,里面承载着软件包集合 Yum源组成 包含模块 【OS】、【everything】、【EPOL】、【debuginfo】、【source】、【update-source】 【os】:简称operator system 它内部包含操作系统的核心组件&#x…

从单体架构到微服务:架构演进之路

引言:当“大货车”遇上“集装箱运输” 在软件开发领域,单体架构曾像一辆载满货物的大货车,将所有功能打包在一个应用中。但随着业务复杂度飙升,这辆“大货车”逐渐陷入泥潭:启动慢如蜗牛、故障波及全局、升级如履薄冰……

AM32电调学习解读九:ESC上电启动关闭全流程波形分析

这是第九篇,前面的文章把各个模块的实现都介绍了一轮,本章是从运行的角度结合波形图,把整个流程走一遍。 先看下一运行的配置,我把一些配置关闭了,这样跑起来会好分析一些,不同配置跑起来效果会有差异。使用…

全球宠物经济新周期下的亚马逊跨境采购策略革新——宠物用品赛道成本优化三维路径

在全球"孤独经济"与"银发经济"双轮驱动下,宠物用品市场正经历结构性增长。Euromonitor数据显示,2023年全球市场规模突破1520亿美元,其中中国供应链贡献度达38%,跨境电商出口增速连续三年超25%。在亚马逊流量红…

reshape/view/permute的原理

在pytorch中,Tensor的存储是行主序的,也就是意味着最后一个维度的元素的存储时连续的,reshape和view并不改变元素存储的内存,仅仅改变访问的间隔,下面举例说明; 比如一个23的Tensor在内存中的存储是连续的&…

upload-labs靶场通关详解:第11关

一、分析源代码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {$deny_ext array("php","php5","php4","php3","php2","html","htm","phtml"…

L1-7 最短字母串【保姆级详细讲解】

请你设计一个程序,该程序接受起始字母和目标字母作为输入,通过在字母表中向前或向后移动来计算两个给定字母之间的最短路径。然后,程序会沿着最短路径打印出从起始字母到目标字母的所有字母。例如,如果输入“c”和“k”作为起始字…

项目QT+ffmpeg+rtsp(三)——延迟巨低的项目+双屏显示

文章目录 前言双屏显示widget.cppwidget.h前言 对于复现情况,分为两种情况 第一种,对于我而言,是直接解压后,就能直接运行了 第二种,对于师兄而言,需要你构建debug后,会产生这个文件夹,执行的时候,地址应该在这,我猜的,这里面没有dll,exe程序就找不到dll这些库,你…

ansible进阶06

复杂的循环结构 循环基础 [studentworktest myansible]$ cat users.yml --- - name: create usershosts: serveratasks:- name: create some usersuser:name: "{{item}}"password: "{{123456|password_hash(sha512)}}"state: presentloop:- zhangsan- li…

Go 模块版本管理

Go 模块版本管理指南 1、创建带注释的 Git 标签 基本命令 # 创建带注释的标签 git tag -a v1.0.0 -m "Release version 1.0.0 - initial stable release" -a:创建带注释的标签 -m:添加标签注释信息 # 推送标签到远程仓库 git push origin v…

Java—— IO流 第一期

什么是IO流 存储和读取数据的解决方案 I:input O:output 流:像水流一样传输数据 IO流的作用 用于读写数据(本地文件,网络) IO流的分类 按照流向分类 输出流:程序 --> 文件 输入流:文件 --> 程序 按照…

物联网安全技术的最新进展与挑战

随着物联网(IoT)技术的飞速发展,越来越多的设备被连接到互联网,从智能家居设备到工业控制系统,物联网正在深刻改变我们的生活和生产方式。然而,物联网的安全问题也日益凸显,成为制约其发展的关键…