Hive之數據定義DDL

Hive之數據定義DDL


文章目錄

  • Hive之數據定義DDL
    • 寫在前面
    • 創建數據庫
    • 查詢數據庫
      • 顯示數據庫
      • 查看數據庫詳情
      • 切換當前數據庫
    • 修改數據庫
    • 刪除數據庫
    • 創建表
      • 管理表(內部表)
      • 外部表
      • 管理表與外部表的互相轉換
    • 修改表
      • 重命名表
      • 增加、修改和刪除表分區
      • 增加/修改/替換列信息
    • 刪除表


寫在前面

  • Linux版本:CentOS7.5
  • Hive版本:Hive-3.1.2

創建數據庫

CREATE DATABASE [IF NOT EXISTS] database_name
[COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];

(1)創建一個數據庫,數據庫在HDFS上的默認存儲路徑是 /user/hive/warehouse/*.db

hive (default)> create database db_hive;

(2)避免要創建的數據庫已經存在錯誤,增加 if not exists判斷。(標準寫法)

hive (default)> create database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists
hive (default)> create database if not exists db_hive;

(3)創建一個數據庫,指定數據庫在HDFS上存放的位置

hive (default)> create database db_hive2 location '/db_hive2.db';

查詢數據庫

顯示數據庫

(1)顯示數據庫

hive> show databases;

(2)過濾顯示查詢的數據庫

hive> show databases like 'db_hive*';
OK
db_hive
db_hive_1

查看數據庫詳情

(1)顯示數據庫信息

hive> desc database db_hive;
OK
db_hive		hdfs://wbd01:9000/user/hive/warehouse/db_hive.db	whybigdata USER	

(2)顯示數據庫詳細信息,extended

hive> desc database extended db_hive;
OK
db_hive		hdfs://wbd01:9000/user/hive/warehouse/db_hive.db	whybigdataUSER	

切換當前數據庫

hive (default)> use db_hive;

修改數據庫

用戶可以使用 ALTER DATABASE 命令為某個數據庫的 DBPROPERTIES 設置鍵-值對屬性值,來描述這個數據庫的屬性信息。

hive (default)> alter database db_hive set dbproperties('createtime'='20230421');

在hive中查看修改結果

hive> desc database extended db_hive;
db_name comment location        owner_name      owner_type      parameters
db_hive         hdfs://wbd01:8020/user/hive/warehouse/db_hive.db    whybigdata USER    {createtime=20170830}

刪除數據庫

(1)刪除空數據庫

hive>drop database db_hive2;

(2)如果刪除的數據庫不存在,最好采用 if exists 判斷數據庫是否存在

hive> drop database db_hive;
FAILED: SemanticException [Error 10072]: Database does not exist: db_hive
hive> drop database if exists db_hive2;

(3)如果數據庫不為空,可以采用cascade命令,強制刪除

hive> drop database db_hive;
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. InvalidOperationException(message:Database db_hive is not empty. One or more tables exist.)
hive> drop database db_hive cascade;

創建表

(1)建表語法

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
[(col_name data_type [COMMENT col_comment], ...)] 
[COMMENT table_comment] 
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
[CLUSTERED BY (col_name, col_name, ...) 
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

(2)字段解釋說明

  • CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXISTS 選項來忽略這個異常。
  • EXTERNAL關鍵字可以讓用戶創建一個外部表,在建表的同時可以指定一個指向實際數據的路徑(LOCATION),在刪除表的時候,內部表的元數據和數據會被一起刪除,而外部表只刪除元數據,不刪除數據。
  • COMMENT:為表和列添加注釋。
  • PARTITIONED BY創建分區表
  • CLUSTERED BY創建分桶表
  • SORTED BY不常用,對桶中的一個或多個列另外排序
  • ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char][MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

用戶在建表的時候可以 自定義SerDe 或者使用 自帶的SerDe。如果沒有指定ROW FORMAT 或者ROW FORMAT DELIMITED,將會使用自帶的SerDe。在建表的時候,用戶還需要為表指定列,用戶在指定表的列的同時也會指定自定義的SerDe,Hive通過SerDe確定表的具體的列的數據。

SerDe是Serialize/Deserilize的簡稱, hive使用Serde進行行對象的序列與反序列化。

  • STORED AS指定存儲文件類型

    常用的存儲文件類型:SEQUENCEFILE(二進制序列文件)、TEXTFILE(文本)、RCFILE(列式存儲格式文件)
    如果文件數據是純文本,可以使用STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCEFILE。

  • LOCATION :指定表在HDFS上的存儲位置。

  • AS:后跟查詢語句,根據查詢結果創建表。

  • LIKE允許用戶復制現有的表結構,但是不復制數據。

管理表(內部表)

(1)理論
默認創建的表都是所謂的管理表,有時也被稱為內部表。因為這種表,Hive會(或多或少地)控制著數據的生命周期。Hive默認情況下會將這些表的數據存儲在由配置項hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定義的目錄的子目錄下。當我們刪除一個管理表時,Hive也會刪除這個表中數據。管理表不適合和其他工具共享數據。
(2)案例實操

  • 原始數據
1001	ss1
1002	ss2
1003	ss3
1004	ss4
1005	ss5
1006	ss6
1007	ss7
1008	ss8
1009	ss9
1010	ss10
1011	ss11
1012	ss12
1013	ss13
1014	ss14
1015	ss15
1016	ss16
  • 普通創建表
create table if not exists student(
id int, name string
)
row format delimited fields terminated by '\t'
stored as textfile
location '/user/hive/warehouse/student';
  • 根據查詢結果創建表(查詢的結果會添加到新創建的表中)
create table if not exists student2 as select id, name from student;
  • 根據已經存在的表結構創建表
create table if not exists student3 like student;
  • 查詢表的類型
hive (default)> desc formatted student2;
Table Type:             MANAGED_TABLE  

外部表

(1)理論
因為表是外部表,所以Hive并非認為其完全擁有這份數據。刪除該表并不會刪除掉這份數據,不過描述表的元數據信息會被刪除掉。
(2)管理表和外部表的使用場景
每天將收集到的網站日志定期流入HDFS文本文件。在外部表(原始日志表)的基礎上做大量的統計分析,用到的中間表、結果表使用內部表存儲,數據通過SELECT+INSERT進入內部表。
(3)案例實操
分別創建部門和員工外部表,并向表中導入數據。

  • 原始數據

dept:

10	ACCOUNTING	1700
20	RESEARCH	1800
30	SALES	1900
40	OPERATIONS	1700

emp:

7369	SMITH	CLERK	7902	1980-12-17	800.00		20
7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
7839	KING	PRESIDENT		1981-11-17	5000.00		10
7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
7900	JAMES	CLERK	7698	1981-12-3	950.00		30
7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
7934	MILLER	CLERK	7782	1982-1-23	1300.00		10
  • 上傳數據到HDFS
hive (default)> dfs -mkdir /student;
hive (default)> dfs -put /opt/module/datas/student.txt /student;
  • 建表語句,創建外部表

創建部門表

create external table if not exists dept(
deptno int,
dname string,
loc int
)
row format delimited fields terminated by '\t';

創建員工表

create external table if not exists emp(
empno int,
ename string,
job string,
mgr int,
hiredate string, 
sal double, 
comm double,
deptno int)
row format delimited fields terminated by '\t';
  • 查看創建的表
hive (default)>show tables;
  • 查看表格式化數據
hive (default)> desc formatted dept;
Table Type:             EXTERNAL_TABLE
  • 刪除外部表
hive (default)> drop table dept;

外部表刪除后,hdfs中的數據還在,但是metadata中dept的元數據已被刪除

管理表與外部表的互相轉換

  • 查詢表的類型
hive (default)> desc formatted student2;
Table Type:             MANAGED_TABLE
  • 修改內部表student2為外部表
alter table student2 set tblproperties('EXTERNAL'='TRUE');
  • 查詢表的類型
hive (default)> desc formatted student2;
Table Type:             EXTERNAL_TABLE
  • 修改外部表student2為內部表
alter table student2 set tblproperties('EXTERNAL'='FALSE');
  • 查詢表的類型
hive (default)> desc formatted student2;
Table Type:             MANAGED_TABLE

注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)為固定寫法,區分大小寫!

修改表

重命名表

  • 語法
ALTER TABLE table_name RENAME TO new_table_name
  • 實操案例
hive (default)> alter table order_goods rename to new_order_goods;

增加、修改和刪除表分區

關于分區的內容,可以查看后續文章

增加/修改/替換列信息

(1)語法

  • 更新列
ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
  • 增加和替換列
ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) 

注:ADD是代表新增一字段,字段位置在所有列后面(partition列前),REPLACE則是表示替換表中所有字段。

(2)實操案例

  • 查詢表結構
hive> desc dept;
  • 添加列
hive (default)> alter table dept add columns(deptdesc string);
  • 查詢表結構
hive> desc dept;
  • 更新列
hive (default)> alter table dept change column deptdesc desc string;
  • 查詢表結構
hive> desc dept;
  • 替換列
hive (default)> alter table dept replace columns(deptno string, dname string, loc string);
  • 查詢表結構
hive> desc dept;

刪除表

hive (default)> drop table dept;

全文結束!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67802.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67802.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DeepSeek 核心技術全景解析

DeepSeek 核心技術全景解析:突破性創新背后的設計哲學 DeepSeek的創新不僅僅是對AI基礎架構的改進,更是一場范式革命。本文將深入剖析其核心技術,探討 如何突破 Transformer 計算瓶頸、如何在 MoE(Mixture of Experts&#xff09…

UE 5.3 C++ 對垃圾回收的初步認識

一.UObject的創建 UObject 不支持構造參數。 所有的C UObject都會在引擎啟動的時候初始化,然后引擎會調用其默認構造器。如果沒有默認的構造器,那么 UObject 將不會編譯。 有修改父類參數的需求,就使用指定帶參構造 // Sets default value…

點擊WPS 任務欄上的圖標,不是馬上進入工作頁面,而是呈現多個文檔頁面選擇時的處理方法

問題: 點擊WPS以后不是直接進入 解決: 首頁-配置和修復工具-高級-兼容設置-改為與microsoft office 2010兼容(D)

批量處理多個模型的預測任務

#!/bin/bash# 檢查是否傳入必要的參數&#xff0c;若未傳入參數則打印用法并退出 if [ "$#" -lt 1 ]; thenecho "用法: $0 <file_path>"echo "示例: $0 /home/aistudio/work/PaddleSeg/city/cityscapes_urls_extracted.txt"exit 1 fi# 讀取…

【LLM-agent】(task4)搜索引擎Agent

note 新增工具&#xff1a;搜索引擎Agent 文章目錄 note一、搜索引擎AgentReference 一、搜索引擎Agent import os from dotenv import load_dotenv# 加載環境變量 load_dotenv() # 初始化變量 base_url None chat_model None api_key None# 使用with語句打開文件&#xf…

【自然語言處理(NLP)】基于Transformer架構的預訓練語言模型:BERT 訓練之數據集處理、訓練代碼實現

文章目錄 介紹BERT 訓練之數據集處理BERT 原理及模型代碼實現數據集處理導包加載數據生成下一句預測任務的數據從段落中獲取nsp數據生成遮蔽語言模型任務的數據從token中獲取mlm數據將文本轉換為預訓練數據集創建Dataset加載WikiText-2數據集 BERT 訓練代碼實現導包加載數據構建…

LeetCode435周賽T2貪心

題目描述 給你一個由字符 N、S、E 和 W 組成的字符串 s&#xff0c;其中 s[i] 表示在無限網格中的移動操作&#xff1a; N&#xff1a;向北移動 1 個單位。S&#xff1a;向南移動 1 個單位。E&#xff1a;向東移動 1 個單位。W&#xff1a;向西移動 1 個單位。 初始時&#…

【Numpy核心編程攻略:Python數據處理、分析詳解與科學計算】2.5 高級索引應用:圖像處理中的區域提取

2.5 高級索引應用&#xff1a;圖像處理中的區域提取 目錄/提綱 #mermaid-svg-BI09xc20YqcpUam7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BI09xc20YqcpUam7 .error-icon{fill:#552222;}#mermaid-svg-BI09xc20…

ubuntu直接運行arm環境qemu-arm-static

qemu-arm-static 嵌入式開發有時會在ARM設備上使用ubuntu文件系統。開發者常常會面臨這樣一個問題&#xff0c;想預先交叉編譯并安裝一些應用程序&#xff0c;但是交叉編譯的環境配置以及依賴包的安裝十分繁瑣&#xff0c;并且容易出錯。想直接在目標板上進行編譯和安裝&#x…

通過Redisson構建延時隊列并實現注解式消費

目錄 一、序言二、延遲隊列實現1、Redisson延時消息監聽注解和消息體2、Redisson延時消息發布器3、Redisson延時消息監聽處理器 三、測試用例四、結語 一、序言 兩個月前接了一個4萬的私活&#xff0c;做一個線上商城小程序&#xff0c;在交易過程中不可避免的一個問題就是用戶…

MVC 文件夾:架構之美與實際應用

MVC 文件夾:架構之美與實際應用 引言 MVC(Model-View-Controller)是一種設計模式,它將應用程序分為三個核心組件:模型(Model)、視圖(View)和控制器(Controller)。這種架構模式不僅提高了代碼的可維護性和可擴展性,而且使得開發流程更加清晰。本文將深入探討MVC文…

【PyQt】lambda函數,實現動態傳遞參數

為什么需要 lambda&#xff1f; 在 PyQt5 中&#xff0c;clicked 信號默認會傳遞一個布爾值&#xff08;表示按鈕是否被選中&#xff09;。如果我們希望將按鈕的文本內容傳遞給槽函數&#xff0c;需要通過 lambda 函數顯式傳遞參數。 這樣可以實現將按鈕內容傳遞給槽函數&…

pytorch深度Q網絡

人工智能例子匯總&#xff1a;AI常見的算法和例子-CSDN博客 DQN 引入了深度神經網絡來近似Q函數&#xff0c;解決了傳統Q-learning在處理高維狀態空間時的瓶頸&#xff0c;尤其是在像 Atari 游戲這樣的復雜環境中。DQN的核心思想是使用神經網絡 Q(s,a;θ)Q(s, a; \theta)Q(s,…

Baklib構建高效協同的基于云的內容中臺解決方案

內容概要 隨著云計算技術的飛速發展&#xff0c;內容管理的方式也在不斷演變。企業面臨著如何在數字化轉型過程中高效管理和協同處理內容的新挑戰。為應對這些挑戰&#xff0c;引入基于云的內容中臺解決方案顯得尤為重要。 Baklib作為創新型解決方案提供商&#xff0c;致力于…

DeepSeek-R1 論文. Reinforcement Learning 通過強化學習激勵大型語言模型的推理能力

論文鏈接&#xff1a; [2501.12948] DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning 實在太長&#xff0c;自行扔到 Model 里&#xff0c;去翻譯去提問吧。 工作原理&#xff1a; 主要技術&#xff0c;就是訓練出一些專有用途小模型&…

C++泛型編程指南03-CTAD

文章目錄 C17 自定義類型推斷指引&#xff08;CTAD&#xff09;深度解析一、基礎概念1. 核心作用2. 工作原理 二、標準庫中的 CTAD 應用1. 容器類型推導2. 智能指針推導3. 元組類型推導 三、自定義推導指引語法1. 基本語法結構2. 典型應用場景 四、推導指引設計模式1. 迭代器范…

deepseek+vscode自動化測試腳本生成

近幾日Deepseek大火,我這里也嘗試了一下,確實很強。而目前vscode的AI toolkit插件也已經集成了deepseek R1,這里就介紹下在vscode中利用deepseek幫助我們完成自動化測試腳本的實踐分享 安裝AI ToolKit并啟用Deepseek 微軟官方提供了一個針對AI輔助的插件,也就是 AI Toolk…

電介質超表面中指定渦旋的非線性生成

渦旋光束在眾多領域具有重要應用&#xff0c;但傳統光學器件產生渦旋光束的方式限制了其在集成系統中的應用。超表面的出現為渦旋光束的產生帶來了新的可能性&#xff0c;尤其是在非線性領域&#xff0c;盡管近些年來已經有一些研究&#xff0c;但仍存在諸多問題&#xff0c;如…

基于Springboot+mybatis+mysql+html圖書管理系統2

基于Springbootmybatismysqlhtml圖書管理系統2 一、系統介紹二、功能展示1.用戶登陸2.用戶主頁3.圖書查詢4.還書5.個人信息修改6.圖書管理&#xff08;管理員&#xff09;7.學生管理&#xff08;管理員&#xff09;8.廢除記錄&#xff08;管理員&#xff09; 三、數據庫四、其它…

重構字符串(767)

767. 重構字符串 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:string reorganizeString(string s){string res;//因為1 < s.length < 500 &#xff0c; uint64_t 類型足夠uint16_t n s.size();if (n 0) {return res;}unordere…