這里先做一下簡要的學(xué)習(xí)。
這里屬于數(shù)據(jù)開發(fā)范疇,所以首先肯定是先看一下數(shù)據(jù)倉庫的工具------hive。
hive簡介
Hadoop本身的三個部分HDFS(數(shù)據(jù)儲存),MapReduce(數(shù)據(jù)分析處理)和YARN(集群資源管理和調(diào)度)。其實乍一看這幾個方面其實已經(jīng)較為完善了,看著是可以滿足一整套流程的,那么hive存在的意義是什么呢?
其存在的意義呢,個人感覺是為了方便一點。原因有二,其一是MapReduce本身的開發(fā)難度較大,學(xué)習(xí)成本比較高;其二就是HDFS儲存的文件沒有字段名,甚至沒有數(shù)據(jù)類型,這就使得這個數(shù)據(jù)儲存看起來很讓人惡心了。
而Hive就由此而生,可以將結(jié)構(gòu)化的數(shù)據(jù)文件“映射”成一張清晰的表,并且也提供了類似SQL的查詢功能。其實功能就這么點,說到底就是將MapReduce的任務(wù)換成類似SQL去計算,這樣呢就解決了以上問題。當(dāng)然了底層數(shù)據(jù)還是HDFS,所以上面提到的是“映射”二字。
Hive的安裝部分這里就不浪費時間講了,一些環(huán)境、驅(qū)動什么的弄起來也挺復(fù)雜的。
hive勉強(qiáng)也算是一門編程語言,那么這里就大概說一下他的數(shù)據(jù)類型和文件格式吧,在基本數(shù)據(jù)結(jié)構(gòu)上面與Java很類似,整數(shù)型、浮點型、布爾型、字符串型等等,該有的基本也都有,在數(shù)據(jù)類型轉(zhuǎn)化上面也是有函數(shù)的。
select? ?cast ('1111'? as? int);
這樣就直接實現(xiàn)了字符串轉(zhuǎn)數(shù)值,其實也很簡單啦,感覺應(yīng)該不會很常用,希望要用的時候可以記起來。
除了基本數(shù)據(jù)結(jié)構(gòu)以外就是集合數(shù)據(jù)類型了,包括array(有序集合),map(鍵值對),struct(不同類型的集合),union(不同類型元素在同一字段不同行)。
這四個數(shù)據(jù)類型都是集合,就是內(nèi)部存的數(shù)據(jù)不同,最普遍的應(yīng)該還是array,簡單的單數(shù)據(jù)類型集合。例如(1,2,3)
那么如何從集合里面取值呢?
用[ ]就可以,這點倒是和Python類似了。


除了union數(shù)據(jù)類型寫得稀里糊涂以外,其他也還是蠻好理解的,array和map應(yīng)該還是最常用的類型了,struct存在的意義不知道在哪,以后希望能看到再頓悟吧。至于union,笑笑就可以了。
hive的文本文件數(shù)據(jù)編碼
hive的儲存格式是定義好的,當(dāng)然也可以人為自己去定義,但是我相信沒有哪個憨批會自己去重新定義。
首先就是hive自己的默認(rèn)分割符,除了換行以外就是^A,^B,^C,有點印象就可以,知道它是分割符,這就避免了看代碼不知道這個古怪符號的尷尬局面。至于三種^的區(qū)別其實也很簡單,A就是create table才是產(chǎn)生的分割符,B就是array,map,struct的元素分割符。而C就是map里面鍵值對的分割符號了。
hive操作---DDL命令
這個就是查詢之前更加基礎(chǔ)的命令了,DDL就是數(shù)據(jù)定義語言,主要命令就是create、alter、drop之類的。定義的就是數(shù)據(jù)庫的結(jié)構(gòu)或者數(shù)據(jù)類型。
這個hive的DDL命令與SQL幾乎完全相同,這里我是一點不想看了,主要還是sql看吐了。


內(nèi)部表與外部表
hive值得一提的一點就是這個內(nèi)部和外部表。雖然我現(xiàn)在還沒弄懂兩者創(chuàng)立的原因。
在創(chuàng)建表格時,默認(rèn)內(nèi)部表,加上external才會變成外部表,而生產(chǎn)中,大多使用外部表。
兩者區(qū)別主要在刪除上,內(nèi)部表刪除就是真的刪除,外部表刪除會保留數(shù)據(jù),只刪定義。這里我是沒懂,刪定義?數(shù)據(jù)保留?那我不是刪了個寂寞嗎?




如果在建表時出錯了,就是表建錯了,別著急,這里學(xué)習(xí)一下補(bǔ)救方法,應(yīng)該會派上用場。
