1.Hive在Hadoop生態(tài)圈地位
2.數(shù)據(jù)倉庫和數(shù)據(jù)庫的對比分析
同:
都是用來存儲數(shù)據(jù)均為數(shù)據(jù)的存儲載體
數(shù)據(jù)倉庫也是數(shù)據(jù)庫,是數(shù)據(jù)庫的一種衍生,延深應用
數(shù)據(jù)倉庫和數(shù)據(jù)庫間存在數(shù)據(jù)交互,相輔相成各有千秋
異:
數(shù)據(jù)庫面向事務設計,數(shù)據(jù)倉庫面向主體設計的
數(shù)據(jù)庫設計避免冗余,數(shù)據(jù)倉庫刻意引入冗余
數(shù)據(jù)庫一般存儲在線交易數(shù)據(jù),實時性強存儲空間有限。數(shù)據(jù)倉庫一般是歷史數(shù)據(jù),實時性弱但存儲空間龐大
數(shù)據(jù)庫是為捕獲數(shù)據(jù)而設計,即實時性強吞吐量弱,數(shù)據(jù)倉庫是為分析數(shù)據(jù)而設計,即吞吐量強實時性弱。
3.Hive操作
和數(shù)據(jù)庫操作語言類似
4.Hive數(shù)據(jù)模型
5.數(shù)據(jù)類型
Varchar和char對比說明
同:
都是存儲數(shù)據(jù)的類型
異:
varchar變長
節(jié)省數(shù)據(jù)空間,不利于計算
用時間換空間
char 定長
浪費了存儲空間,節(jié)省了計算時間
用空間換時間
6.數(shù)據(jù)操作分類
DDL:對表的操作
DML:數(shù)據(jù)插入
DQL:數(shù)據(jù)查詢
7.HiveSQL
元數(shù)據(jù):描述數(shù)據(jù)的數(shù)據(jù)
表分類:內(nèi)表和外表
概念說明:
hive表分為兩類,即內(nèi)外表。以元數(shù)據(jù)和實體數(shù)據(jù)的操作權限作為分類依據(jù)
特點特征:
內(nèi)表:元數(shù)據(jù)和實體數(shù)據(jù)都歸hive管理,一刪全刪。
外表:元數(shù)據(jù)歸Hive管,實體數(shù)據(jù)歸HDFS,刪表只會刪除Hive元數(shù)據(jù),不會改變實體數(shù)據(jù)
應用場景:
數(shù)據(jù)表生成時,如果是hive內(nèi)部自生成的表則統(tǒng)一設置內(nèi)表,如果不是自生成的,而是外部導入的,則設置為外表。
代碼實現(xiàn):
Create [external] table ……
external內(nèi)外表唯一區(qū)分關鍵字。
7.1 DDL建表模板
關鍵詞解釋
• external: 創(chuàng)建內(nèi)部表還是外部表,此為內(nèi)外表的唯一區(qū)分關鍵字。
• comment col_comment: 給字段添加注釋
• comment table_comment: 給表本身添加注釋
• partitioned by: 按哪些字段分區(qū),可以是一個,也可以是多個
• clustered by col_name… into num_buckets BUCKETS:按哪幾個字段做hash后分桶存儲
• row format:用于設定行、列、集合的分隔符等設置
• stored as : 用于指定存儲的文件類型,如text,rcfile等
• location : 設定該表存儲的hdfs目錄,如果不手動設定,則采用hive默認的存儲路徑
查看已存在表的詳細信息:show create table/desc tablename
顯示表:show tables;
更改表:alter table xxx rename xxx1;
增加字段:alter table xxx1 add columns(age int comment “新增加的列”)
視圖(虛表)
本身不存儲實際數(shù)據(jù),只存儲表關系,使用時再去通過關系查找數(shù)據(jù)。
7.2 DML數(shù)據(jù)加入
加載數(shù)據(jù)腳本:
新版已不支持本地數(shù)據(jù)文件加載到表中。
可以選擇 1.rz -bye 2.hdfs dfs -put xxx.txt /tmp/…
加載HDFS數(shù)據(jù)文件的腳本
注:原始的hdfs文件數(shù)據(jù)將被move到目標表的數(shù)據(jù)目錄中。
將查詢結果插入到數(shù)據(jù)表中
多插入模式(一次查詢多次插入)
表數(shù)據(jù)刪除的三種方法
drop,delete,truncate
1.drop 是把數(shù)據(jù)和元數(shù)據(jù)全部干掉。
2.delete 按照條件刪除數(shù)據(jù)。只會刪掉實體數(shù)據(jù), 其它數(shù)據(jù)包括元數(shù)據(jù)、狀態(tài)數(shù)據(jù)均不會改變。
3.Truncate 截斷數(shù)據(jù),是指將全部數(shù)據(jù)刪除掉。元數(shù)據(jù)不動,但狀態(tài)數(shù)據(jù)會隨之刪掉。
將查詢結果寫入HDFS目錄
外表刪除
刪除外部表后的數(shù)據(jù)變動情況(刪除表后,hdfs文件依然存在)
join查詢
• inner join:左表和右表滿足聯(lián)接條件的數(shù)據(jù),全部查詢出來
• left outer join:以左表為主,將左表數(shù)據(jù)全部保留,右表沒有關聯(lián)上數(shù)據(jù)字段置成NULL
• full outer join:沒有關聯(lián)數(shù)據(jù)全部置成NULL
union
• union all:將所有表數(shù)據(jù),完全疊加在一起,不去重。
• union:將所有表數(shù)據(jù),完全疊加在一起,總體去重。
函數(shù)
if( Test Condition, True Value, False Value )
coalesce( value1,value2,… )將參數(shù)列表中第1個不為null的值作為最后的值
case [ expression ] WHEN condition1 THEN result1
when condition2 THEN result2
else result
end
split 將字符串拆分成一個數(shù)組
explode:將一個集合元素,打散成一行一行的組成,即將一行改成多行,換句話說行轉列
lateral view:與explode聯(lián)用,形成一張新表
select id,name,score from user_score lateral view explode(split(score_list,’,’)) score_table as score;
來源:CSDN博主
原文鏈接:https://blog.csdn.net/m0_49142509/article/details/120957785