數(shù)據(jù)倉庫與Hive

一、數(shù)據(jù)倉庫

1旅掂、數(shù)據(jù)倉庫定義姑丑?

關(guān)于數(shù)據(jù)倉庫(Data Warehouse, DW)的定義比較常見的一種是數(shù)據(jù)倉庫之父比爾·恩門在1991年出版的《建立數(shù)據(jù)倉庫》一書中所提出的定義:

數(shù)據(jù)倉庫是一個面向主題的、集成的辞友、相對穩(wěn)定的栅哀、反映歷史變化的數(shù)據(jù)集合震肮,用于支持管理決策。

還有一種常見的描述是:

數(shù)據(jù)倉庫是將源系統(tǒng)數(shù)據(jù)抽取留拾、轉(zhuǎn)化戳晌、清洗,存儲到維度模型中的系統(tǒng)痴柔,為分析決策提供查詢沦偎、分析的支持。

所以數(shù)據(jù)倉庫到底是什么咳蔚?看完定義描述依舊不知道 =_=||豪嚎。

《數(shù)據(jù)倉庫入門,看這這一篇就夠了》一文中對數(shù)據(jù)倉庫的解釋是這樣的:

數(shù)據(jù)倉庫是面向分析的存儲系統(tǒng)
也就是說數(shù)倉是存數(shù)據(jù)的谈火,企業(yè)的各種數(shù)據(jù)往里面塞侈询,主要目的是為了有效分析數(shù)據(jù),后續(xù)會基于它產(chǎn)出供分析挖掘的數(shù)據(jù)糯耍,或者數(shù)據(jù)應用需要的數(shù)據(jù)

回過頭來理解 面向主題的扔字、集成的、相對穩(wěn)定的温技、反映歷史變化革为。

面向主題的——數(shù)據(jù)倉庫通過一個個主題域?qū)⒍鄠€業(yè)務(wù)系統(tǒng)的數(shù)據(jù)加載到一起
集成的——數(shù)據(jù)倉庫會將不同源數(shù)據(jù)庫中的數(shù)據(jù)匯總到一起
相對穩(wěn)定的——數(shù)據(jù)倉庫中的數(shù)據(jù)一般僅執(zhí)行查詢操作,很少會有刪除和更新舵鳞。但是需定期加載和刷新數(shù)據(jù)震檩。
反映歷史變化——數(shù)據(jù)被加載后一般情況下將被長期保留,因此數(shù)據(jù)倉庫包含來自其時間范圍不同時間段的數(shù)據(jù)

這四個描述就是反應數(shù)據(jù)倉庫存儲數(shù)據(jù)的特點蜓堕,各種來源的數(shù)據(jù)按主題長期的存儲抛虏,用于分析決策。

2俩滥、數(shù)據(jù)倉庫和數(shù)據(jù)庫的差別是什么?

主要差別是在以下兩方面:

  • 實時性差異——關(guān)系數(shù)據(jù)庫都是為實時查詢的業(yè)務(wù)進行設(shè)計的贺奠,而數(shù)據(jù)倉庫則是為海量數(shù)據(jù)做分析挖掘設(shè)計的霜旧,實時性要求不高;
  • 存儲能力和計算能力擴展——數(shù)據(jù)倉庫在存儲能力和計算能力上更好儡率,而關(guān)系數(shù)據(jù)庫在這個方面要差很多挂据。

3、數(shù)據(jù)倉庫和hive的關(guān)系儿普?

提到數(shù)據(jù)倉庫經(jīng)常聽到hive崎逃。hive是什么?hive和數(shù)據(jù)倉庫的關(guān)系是什么眉孩?

(1)hive是什么?

Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架个绍,Hive 是 Hadoop 中的一個重要子項目勒葱,是基于Hadoop的一個數(shù)據(jù)倉庫工具(存數(shù)據(jù)的工具)

(2)Hive內(nèi)部結(jié)構(gòu)

CLI, WebUI為hive的用戶接口;
元數(shù)據(jù)存儲在mysql巴柿,主要數(shù)據(jù)存儲在HDFS凛虽;
Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉(zhuǎn)化為MapReduce任務(wù),利用MapReduce 進行計算[2]

(3)數(shù)據(jù)倉庫與hive關(guān)系

數(shù)據(jù)倉庫比較流行的工具有:AWS Redshift, Greenplum, Hive等广恢。
之前提到數(shù)據(jù)倉庫將各種來源的數(shù)據(jù)按主題長期的存儲凯旋,至于存數(shù)據(jù)用紙盒子、塑料盒子钉迷、鐵盒子都是可選的至非,hive就是存數(shù)據(jù)的一種盒子。

二糠聪、hive的操作

在實際生產(chǎn)環(huán)境中已經(jīng)形成了離線以Hive為主荒椭,Spark為輔, 實時處理用Flink的大數(shù)據(jù)架構(gòu)體系及Impala, Es,Kylin等應用查詢引擎枷颊。
以下采用Spark on Hive模式(即使用Hive作為Spark的數(shù)據(jù)源戳杀,用Spark來讀取HIVE的表數(shù)據(jù),數(shù)據(jù)仍存儲在HDFS上)匯總基礎(chǔ)sql操作夭苗。

1信卡、創(chuàng)建/刪除數(shù)據(jù)

(1)無中生有

創(chuàng)建一個包含id,name,age,class信息的表,要求id题造、age為數(shù)值型傍菇,name、class為字符型界赔。

# 表格框架
spark.sql("create table IF NOT EXISTS student(id int, name string,age int,class string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'")
# 插入行數(shù)據(jù)
spark.sql("insert into student values(1,'小明',23,'奧數(shù)')")
spark.sql("insert into student values(2,'小紅',33,'英語')")
spark.sql("insert into student values(3,'小紅',13,'語文')")
spark.sql("insert into student values(4,'小朱',43,'體育')")
spark.sql("insert into student values(6,'Lily',13,'英語')")
spark.sql("insert into student values(7,'Mark',53,'英語')")
# 效果查看
spark.sql("select * from student").show()
(2)查詢建表

原創(chuàng)建表挺麻煩的丢习,查詢建表更方便一些。

spark.sql("create table if not exists student2 select id, name from student")
spark.sql("select * from student2").show()
(2)drop 刪除表格

如果不想要student2這張表淮悼,使用drop table刪除咐低。

spark.sql("drop table student2")

2、函數(shù)操作

(1)日期相關(guān)函數(shù)

想要在表格上新增一列日期信息袜腥。
unix_timestamp()為獲取當前時間戳的函數(shù)(格式為:1572853933)见擦,from_unixtime函數(shù)轉(zhuǎn)換時間戳為日期格式。

spark.sql("create table if not exists student2 as select *,from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as date from student")
spark.sql("select * from student2").show()

# 取時間范圍的數(shù)據(jù)(取昨天的數(shù)據(jù))
# Hive SQL中的[datediff(endDate, startDate)函數(shù)返回的是2個日期的天數(shù)差值
# CURRENT_DATE為當前時間
spark.sql("select CURRENT_DATE").show()  # 查看當前日期
spark.sql("select * from student2 where datediff(CURRENT_DATE,date)=1").show()
(2)row_number 數(shù)據(jù)表去重

表格有兩個小紅存在羹令,想根據(jù)name對數(shù)據(jù)去重鲤屡。

hive中使用row_number()對表格去重「3蓿“row_number() over (partition by name order by id desc) ” 根據(jù)name去重酒来,根據(jù)id排序

spark.sql("select * from (select  id,name,age,row_number() over (partition by name order by id desc) as rn from student) t where t.rn = 1").show()
(3)group by 統(tǒng)計各類及數(shù)量

想要知道有多少類學科,每類學科有多少人肪凛?

spark.sql("select class,count(1) from student group by class").show()
(4)and/or 多條件檢索

檢索name為小紅堰汉,age大于30的數(shù)據(jù)信息辽社。

spark.sql("select * from student where name='小紅' and age>30").show()
(5)Concat組裝新信息

Concat()將多個字符串連接成一個字符串

spark.sql("create table if not exists student3 as select *, concat(name,'編號為',id,',年齡為',age,'衡奥,教授',class) as info from student")
spark.sql("select * from student3").show()
(6)join 黑名單匹配/過濾

已知學校存在一個黑名單庫爹袁,想要只查看匹配黑名單的信息

# 先創(chuàng)建黑名單
spark.sql("create table IF NOT EXISTS blackStudent(name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'")
spark.sql("select * from blackStudent").show()
spark.sql("insert into blackStudent values('小明')")
spark.sql("insert into blackStudent values('小紅')")
spark.sql("insert into blackStudent values('王菲')")
spark.sql("insert into blackStudent values('江山')")
spark.sql("insert into blackStudent values('肖戰(zhàn)')")
spark.sql("insert into blackStudent values('王一博')")
# 匹配黑名單,inner join取兩張表的合并部分
spark.sql("select * from student inner join blackStudent on student.name=blackStudent.name").show()

想要過濾黑名單的成員信息然后存儲成一張新表

# left outer join 以左表 student為核心做匹配矮固,去未匹配成功(null)的信息
spark.sql("create table student4 select id, student.name,age,class from student left outer join blackStudent on student.name=blackStudent.name where blackStudent.name is null")
spark.sql("select * from student4").show()

4失息、udf

UDF(user-defined function),當hive自帶的函數(shù)無法滿足數(shù)據(jù)預處理档址,支持自建函數(shù)盹兢。

def mymodel(age):
    if age>20:
        result=0
    else:
        result=1
    return result
from pyspark.sql.types import IntegerType
spark.udf.register('mymodel',mymodel,IntegerType())  # 函數(shù)返回值類型為integer
spark.sql("select * from student3 where mymodel(age)>0").show()

三、大規(guī)模數(shù)據(jù)處理

Spark 是專為大規(guī)模數(shù)據(jù)處理而設(shè)計的快速通用的計算引擎守伸,傳統(tǒng)基于本地python計算的模式在面對大規(guī)模數(shù)據(jù)量時性能和時間都無法保障绎秒,基于spark的機器學習很重要哦。

參考資料

[1] 數(shù)據(jù)倉庫入門尼摹,看這這一篇就夠了:https://zhuanlan.zhihu.com/p/39611221
[2] hive簡介:https://www.shiyanlou.com/courses/reports/1385266/
[3] Spark是否能替代Hive:https://blog.csdn.net/ys_230014/article/details/83210800

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末见芹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蠢涝,更是在濱河造成了極大的恐慌玄呛,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件和二,死亡現(xiàn)場離奇詭異徘铝,居然都是意外死亡,警方通過查閱死者的電腦和手機惯吕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門惕它,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人废登,你說我怎么就攤上這事淹魄。” “怎么了堡距?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵甲锡,是天一觀的道長。 經(jīng)常有香客問我吏颖,道長搔体,這世上最難降的妖魔是什么恨樟? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任半醉,我火速辦了婚禮,結(jié)果婚禮上劝术,老公的妹妹穿的比我還像新娘呛凶。我一直安慰自己,他們只是感情好也拜,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布校焦。 她就那樣靜靜地躺著,像睡著了一般比搭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天姆泻,我揣著相機與錄音,去河邊找鬼冒嫡。 笑死拇勃,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的孝凌。 我是一名探鬼主播方咆,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蟀架!你這毒婦竟也來了瓣赂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤片拍,失蹤者是張志新(化名)和其女友劉穎煌集,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穆碎,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡牙勘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了所禀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方面。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖色徘,靈堂內(nèi)的尸體忽然破棺而出恭金,到底是詐尸還是另有隱情,我是刑警寧澤褂策,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布横腿,位于F島的核電站,受9級特大地震影響斤寂,放射性物質(zhì)發(fā)生泄漏耿焊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一遍搞、第九天 我趴在偏房一處隱蔽的房頂上張望罗侯。 院中可真熱鬧,春花似錦溪猿、人聲如沸钩杰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讲弄。三九已至措左,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間避除,已是汗流浹背怎披。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瓶摆,地道東北人钳枕。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像赏壹,于是被迫代替她去往敵國和親鱼炒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Zookeeper用于集群主備切換蝌借。 YARN讓集群具備更好的擴展性昔瞧。 Spark沒有存儲能力。 Spark的Ma...
    Yobhel閱讀 7,287評論 0 34
  • 數(shù)據(jù)倉庫(Data Warehouse ) 1.1 基本概念 數(shù)據(jù)倉庫的目的是構(gòu)建面向分析的集成化的數(shù)據(jù)環(huán)境菩佑, 為...
    c062197eecd2閱讀 1,560評論 0 19
  • 注:轉(zhuǎn)自 大數(shù)據(jù)經(jīng)典學習路線(及供參考) 1.Linux基礎(chǔ)和分布式集群技術(shù) 學完此階段可掌握的核心能力: 熟練使...
    4ea0af17fd67閱讀 766評論 0 0
  • 我是懼于用自己拙劣的文筆來描述一座城市的自晰,來去匆匆的,知道的太少稍坯,想寫的東西酬荞,也不過是一個旅人的印象罷了。南京瞧哟,確...
    _Super米閱讀 476評論 3 4
  • https://blog.csdn.net/sinat_17775997/article/details/7287...
    理子閱讀 46評論 0 0