新聞中心
Hive數(shù)據(jù)庫是一個基于Hadoop的數(shù)據(jù)倉庫,可以處理大規(guī)模的結構化和半結構化數(shù)據(jù)。在Hive中,使用類似SQL語言的HQL(Hive Query Language)進行查詢和操作數(shù)據(jù),同時它還提供了自己的JDBC和ODBC驅動程序,可以與各大商業(yè)BI軟件、ETL工具等進行數(shù)據(jù)交互。本文將Hive數(shù)據(jù)庫中的完整表結構,包括Hive表、分區(qū)表、內部表和外部表。

成都創(chuàng)新互聯(lián)服務項目包括巴青網(wǎng)站建設、巴青網(wǎng)站制作、巴青網(wǎng)頁制作以及巴青網(wǎng)絡營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網(wǎng)行業(yè)的解決方案,巴青網(wǎng)站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到巴青省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!
一、Hive表
Hive表是最基本的表類型,數(shù)據(jù)存儲在Hive的文件系統(tǒng)上,默認是HDFS。Hive表的結構包括表名、列名、數(shù)據(jù)類型、約束和分隔符等。
① 表名:表名是Hive中區(qū)分表的唯一標識符,它由字母、數(shù)字和下劃線組成,不能以數(shù)字開頭。
② 列名:列名是表中的字段名稱,可以由字母、數(shù)字、下劃線組成,不能包含特殊字符。
③ 數(shù)據(jù)類型:Hive支持多種數(shù)據(jù)類型,包括數(shù)值型、字符型、日期型等。
④ 約束:約束用于保護表中的數(shù)據(jù)完整性,包括主鍵、外鍵、唯一性約束等。
⑤ 分隔符:分隔符用于分隔每個字段。默認情況下,Hive使用制表符分隔符。
二、分區(qū)表
分區(qū)表是在Hive表的基礎上按照一個或多個列進行分區(qū)的,分區(qū)表可以提高查詢效率,并減少數(shù)據(jù)掃描的范圍。在分區(qū)表中,每個分區(qū)都有自己的目錄和數(shù)據(jù)文件。
① 分區(qū)列:分區(qū)列是指按照哪個列進行分區(qū)。可以按照日期、地區(qū)等列進行分區(qū),以提高查詢效率。
② 分區(qū)路徑:分區(qū)路徑指的是每個分區(qū)的目錄路徑,可以是絕對路徑或相對路徑,也可以是由Hive環(huán)境變量定義的路徑。
③ 分區(qū)數(shù)量:分區(qū)數(shù)量指的是表中分區(qū)的個數(shù),數(shù)量越多,查詢效率越高。
三、內部表
內部表也是基于Hive表的一種類型,區(qū)別在于內部表的數(shù)據(jù)存儲在Hive的默認文件系統(tǒng)中,即HDFS。在內部表中,數(shù)據(jù)和元數(shù)據(jù)都存儲在Hive的內部數(shù)據(jù)庫中。
① 庫名:庫名指的是內部表所在的庫名,每個庫都是一個命名空間。
② 表名:表名指的是內部表的名稱,必須唯一。
③ 數(shù)據(jù)存儲:內部表的數(shù)據(jù)存儲在Hadoop分布式文件系統(tǒng)中。每張表有它自己的文件目錄以及文件。這個表的存儲路徑可以進行配置。
四、外部表
外部表也是基于Hive表的一種類型,與內部表不同的是,外部表的數(shù)據(jù)存儲在Hive之外的文件系統(tǒng)中,如本地文件系統(tǒng)、Hadoop分布式文件系統(tǒng)等。在外部表中,數(shù)據(jù)和元數(shù)據(jù)都存儲在Hive的內部數(shù)據(jù)庫中。
① 表名:表名指的是外部表的名稱,必須唯一。
② 數(shù)據(jù)存儲:外部表的數(shù)據(jù)存儲在Hadoop分布式文件系統(tǒng)中。這個表的存儲路徑需要在創(chuàng)建外部表時指定。
③ 分隔符:外部表的分隔符和內部表類似,也是用于分隔每個字段的符號。
:
本文了Hive數(shù)據(jù)庫中的完整表結構,包括Hive表、分區(qū)表、內部表和外部表。Hive表是最基本的表類型,分區(qū)表可以提高查詢效率,內部表的數(shù)據(jù)存儲在Hive的默認文件系統(tǒng)中,而外部表的數(shù)據(jù)存儲在Hive之外的文件系統(tǒng)中。通過對這些表的結構和特點的了解,可以更好地使用Hive處理大規(guī)模的結構化和半結構化數(shù)據(jù)。
相關問題拓展閱讀:
- hive優(yōu)化中 :好的模型設計事半功倍 怎么理解?
- hive是怎么建表中用到其他表時怎么用
hive優(yōu)化中 :好的模型設計事半功倍 怎么理解?
1 索引
Hive支持索引,但是Hive的索引與關系型數(shù)據(jù)庫中的索引并不相同,比如,Hive不支持主鍵或者外鍵。
Hive索引可以建立在表中的某些列上,以提升一些操作的效率,例如減少MapReduce任務中需要讀取的數(shù)據(jù)塊的數(shù)量。
hive索引的原理是建立索引表,索引表的基本包含幾列:1. 源表的索引列;2. _bucketname hdfs中文件地址 3. 索引列在hdfs文件中的偏移量。
原理是通過記錄索引列在HDFS中的偏移量,精準獲取數(shù)據(jù),避免全表掃描。
2 分區(qū)
為了對表進行合理的管理以及提高查詢效率,Hive可以將表組織成“分區(qū)”。
分區(qū)是表的部分列的,可以為頻繁使用的數(shù)據(jù)建立分區(qū),這樣查找分區(qū)中的數(shù)據(jù)時就不需要掃描全表,這對于提高查找效率很有幫助。
龐大的數(shù)據(jù)集可能需要耗費大量的時間去處理。在許多場景下,可以通過分區(qū)的方法減少每一次掃描總數(shù)據(jù)量,這種做法可以顯著地改善性能。
3 分桶
在分區(qū)數(shù)量過于龐大以至于可能導致文件系統(tǒng)崩潰時,我們就需要使用分桶來解決問題了螞梁團。
分區(qū)中的數(shù)據(jù)可以被進一步拆分成桶,不同于分區(qū)對列直接進行拆分,桶往往使用列的哈希值對數(shù)據(jù)打散,并分發(fā)到各個不同的桶中從而完成數(shù)據(jù)的分桶過程。
分區(qū)和索引的區(qū)別:
分區(qū)是直接分割數(shù)據(jù)庫,而索引是建立索引表,需要額外維護索引表
分區(qū)和分桶的區(qū)別:
分桶,是對列更細粒度的劃分,分區(qū)是根據(jù)某一規(guī)則對列進行劃分,比如根據(jù)日期對列進行劃分,由于渣納程序不同日期產生的數(shù)據(jù)容量可能,就會造成頂峰和低峰時段,列分區(qū)的不均勻悶橘。
分桶hive使用對分桶值進行hash,并用hash結果除以桶的個數(shù)做取余運算的方式來分桶,保證了每個桶中都有數(shù)據(jù),但每個桶中的數(shù)據(jù)條數(shù)不一定相等,這樣保證了數(shù)據(jù)的均衡。
這時,在大數(shù)據(jù)量的情況下,查詢速率尤為明顯,因為分桶數(shù)據(jù)更加均勻,不會造成單個查詢速度過慢的情況。
分區(qū),索引,分桶均可優(yōu)化數(shù)據(jù)結構,由于hive就是映射大數(shù)據(jù)儲存?zhèn)}庫的工具,如果不合理優(yōu)化hive數(shù)據(jù)表結構,每次查詢都全表掃描,速度太慢了,數(shù)據(jù)越大,全表掃描越費時
hive是怎么建表中用到其他表時怎么用
1.創(chuàng)建表的語句:Create TABLE table_name , …)> , …)> , …)> INTO num_buckets BUCKETS>
稍微解釋下
CREATE TABLE 創(chuàng)建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常。EXTERNAL 關鍵字可以讓用戶創(chuàng)建一個外部表,在建表的同時指定一個指向實際數(shù)據(jù)的路徑(LOCATION),Hive 創(chuàng)建內部表時,會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變。在刪除表的時候,內部表的元數(shù)據(jù)和數(shù) 據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。如果文件數(shù)據(jù)是純文本,可以使用 STORED AS TEXTFILE。如果數(shù)據(jù)需要壓縮,使用 STORED AS SEQUENCE 。有 分區(qū)的表可以在創(chuàng)建的時候使用 PARTITIONED BY 語升態(tài)句。一個表可以擁有一個或者多個分區(qū),嘩帶每一個分區(qū)單吵蘆源獨存在一個目錄下。而且,表和分區(qū)都可以對某個列進行 CLUSTERED BY 操作,將若干個列放入一個桶(bucket)中。也可以利用SORT BY 對數(shù)據(jù)進行排序。這樣可以為特定應用提高性能。
創(chuàng)建普通的表:create table test_table (id int,name string,no int) row format delimited fields terminated by ‘,’ stored as textfile;
//指定了字段的分隔符為逗號,所以load數(shù)據(jù)的時候,load的文本也要為逗號,否則加載后為NULL。hive只支持單個字符的分隔符,hive默認的分隔符是\001
創(chuàng)建帶有partition的表:create table test_part (id int,name string,no int) partitioned by (dt string) row format delimited fields terminated by ‘\t’ stored as textfile ;
用創(chuàng)建用\t作分隔符的表,PT為分區(qū)字段,
加載如下:
load data local inpath ‘/home/zhangxin/hive/test_hive.txt’ overwrite into table test_part partition (dt=”);
//local是本地文件,注意不是你電腦上的文件,是hadoop所在的本地文件
//如果是在hdfs里的文件,則不需要local。 overwrite into是覆蓋表分區(qū),僅僅是這個分區(qū)的數(shù)據(jù)內容,如果是追加,則不需要overwrite
創(chuàng)建external表:(外部表)create external table test_external (id int,name string,no int) row format delimited fields terminated by ‘,’ location ‘/home/zhangxin/hive/test_hive.txt’;
//用逗號分隔的表,且無分區(qū), location后是外部表數(shù)據(jù)的存放路徑
hive數(shù)據(jù)庫的全部表結構的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于hive數(shù)據(jù)庫的全部表結構,Hive數(shù)據(jù)庫:完整表結構匯總,hive優(yōu)化中 :好的模型設計事半功倍 怎么理解?,hive是怎么建表中用到其他表時怎么用的信息別忘了在本站進行查找喔。
成都創(chuàng)新互聯(lián)科技有限公司,是一家專注于互聯(lián)網(wǎng)、IDC服務、應用軟件開發(fā)、網(wǎng)站建設推廣的公司,為客戶提供互聯(lián)網(wǎng)基礎服務!
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價格厚道的香港/美國云服務器和獨立服務器。創(chuàng)新互聯(lián)——四川成都IDC機房服務器托管/機柜租用。為您精選優(yōu)質idc數(shù)據(jù)中心機房租用、服務器托管、機柜租賃、大帶寬租用,高電服務器托管,算力服務器租用,可選線路電信、移動、聯(lián)通機房等。
名稱欄目:Hive數(shù)據(jù)庫:完整表結構匯總(hive數(shù)據(jù)庫的全部表結構)
本文路徑:http://www.dlmjj.cn/article/dpcgsoh.html


咨詢
建站咨詢
