三、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.pswp.cn/web/80557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80557.shtml
英文地址,請注明出處:http://en.pswp.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)技術的飛速發展,越來越多的設備被連接到互聯網,從智能家居設備到工業控制系統,物聯網正在深刻改變我們的生活和生產方式。然而,物聯網的安全問題也日益凸顯,成為制約其發展的關鍵…