日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Hive体系结构(三)元数据库与基本操作

發(fā)布時(shí)間:2024/2/28 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hive体系结构(三)元数据库与基本操作 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hive體系結(jié)構(gòu)(一)架構(gòu)與基本組成
Hive體系結(jié)構(gòu)(二)Hive的執(zhí)行原理、與關(guān)系型數(shù)據(jù)庫的比較
Hive體系結(jié)構(gòu)(三)元數(shù)據(jù)庫與基本操作
Hive體系結(jié)構(gòu)(四)注意事項(xiàng)與擴(kuò)展特性

1. Hive元數(shù)據(jù)庫

Hive將元數(shù)據(jù)存儲在RDBMS 中,一般常用的有MYSQL和DERBY。
hive元數(shù)據(jù)對應(yīng)的表約有20個(gè),其中和表結(jié)構(gòu)信息有關(guān)的有9張,其余的10多張或?yàn)榭?#xff0c;或只有簡單的幾條記錄,以下是部分主要表的簡要說明。

表名說明關(guān)聯(lián)鍵
TBLS所有hive表的基本信息TBL_ID,SD_ID
TABLE_PARAM表級屬性,如是否外部表,表注釋等TBL_ID
COLUMNSHive表字段信息(字段注釋,字段名,字段類型,字段序號)SD_ID
SDS所有hive表、表分區(qū)所對應(yīng)的hdfs數(shù)據(jù)目錄和數(shù)據(jù)格式SD_ID,SERDE_ID
SERDE_PARAM序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等SERDE_ID
PARTITIONSHive表分區(qū)信息PART_ID,SD_ID,TBL_ID
PARTITION_KEYSHive分區(qū)表分區(qū)鍵TBL_ID
PARTITION_KEY_VALSHive表分區(qū)名(鍵值)PART_ID

從上面表的內(nèi)容來看,hive整個(gè)創(chuàng)建表的過程已經(jīng)比較清楚了。
1. 解析用戶提交hive語句,對其進(jìn)行解析,分解為表、字段、分區(qū)等hive對象
2. 根據(jù)解析到的信息構(gòu)建對應(yīng)的表、字段、分區(qū)等對象,從 SEQUENCE_TABLE中獲取構(gòu)建對象的最新ID,與構(gòu)建對象信息(名稱,類型等)一同通過DAO方法寫入到元數(shù)據(jù)表中去,成功后將SEQUENCE_TABLE中對應(yīng)的最新ID+5。

實(shí)際上我們常見的RDBMS都是通過這種方法進(jìn)行組織的,典型的如postgresql,其系統(tǒng)表中和hive元數(shù)據(jù)一樣裸露了這些id信息(oid,cid等),而Oracle等商業(yè)化的系統(tǒng)則隱藏了這些具體的ID。通過這些元數(shù)據(jù)我們可以很容易的讀到數(shù)據(jù)諸如創(chuàng)建一個(gè)表的數(shù)據(jù)字典信息,比如導(dǎo)出建表語名等。

2. Hive基本操作

Create Table語句

一些注意項(xiàng):
1. CREATE TABLE創(chuàng)建一個(gè)指定名字的表。如果相同名字的表已經(jīng)存在,則拋出異常;用戶可以用IF NOT EXIST選項(xiàng)來忽略這個(gè)異常。
2. EXTERNAL 關(guān)鍵字可以讓用戶創(chuàng)建一個(gè)外部表,在建表的同時(shí)指定一個(gè)指向?qū)嶋H數(shù)據(jù)的路徑( LOCATION ),Hive 創(chuàng)建內(nèi)部表時(shí),會將數(shù)據(jù)移動到數(shù)據(jù)倉庫指向的路徑;若創(chuàng)建外部表,僅記錄數(shù)據(jù)所在的路徑,不對數(shù)據(jù)的位置做任何改變。在刪除表的時(shí)候,內(nèi)部表的元數(shù)據(jù)和數(shù)據(jù)會被一起刪除,而外部表只刪除元數(shù)據(jù),不刪除數(shù)據(jù)。
3. LIKE允許用戶復(fù)制現(xiàn)有的表結(jié)構(gòu),但是不復(fù)制數(shù)據(jù)。
4. 用戶在建表的時(shí)候可以自定義SerDe或者使用自帶的 SerDe ( Serialize/Deserilize 的簡稱,目的是用于序列化和反序列化 )。如果沒有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,將會使用自帶的SerDe。在建表的時(shí)候,用戶還需要為表指定列,用戶在指定表的列的同時(shí)也會指定自定義的SerDe,Hive通過SerDe確定表的具體的列的數(shù)據(jù)。
5. 如果文件數(shù)據(jù)是純文本,可以使用STORED AS TEXTFILE。如果數(shù)據(jù)需要壓縮,使用STORED AS SEQUENCE。
6. 有分區(qū)的表可以在創(chuàng)建的時(shí)候使用 PARTITIONED B Y語句。一個(gè)表可以擁有一個(gè)或者多個(gè)分區(qū),每一個(gè)分區(qū)單獨(dú)存在一個(gè)目錄下。而且,表和分區(qū)都可以對某個(gè)列進(jìn)行CLUSTERED BY操作,將若干個(gè)列放入一個(gè)桶(bucket)中。也可以利用SORT BY對數(shù)據(jù)進(jìn)行排序。這樣可以為特定應(yīng)用提高性能。
7. 表名和列名不區(qū)分大小寫,SerDe和屬性名區(qū)分大小寫。表和列的注釋是字符串。

Alter Table語句

主要功能包括Add Partitions, Drop Partitions, Rename Table, Change Column, Add/Replace Columns。

Create View語句

創(chuàng)建視圖。格式CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], …) ]

Show語句

Show tables; Show partitions; describe查看表結(jié)構(gòu)。

Load語句

HIVE裝載數(shù)據(jù)時(shí)沒有做任何轉(zhuǎn)換,加載到表中的數(shù)據(jù)只是進(jìn)入相應(yīng)的配置單元表的位置。Load操作只是單純的復(fù)制/移動操作,將數(shù)
據(jù)文件移動到Hive表對應(yīng)的位置。

Insert語句

插入數(shù)據(jù)。Hive不支持一條一條的用 insert 語句進(jìn)行插入操作,這個(gè)應(yīng)該是與hive的storage layer是有關(guān)系的,因?yàn)樗拇鎯邮荋DFS,插入一個(gè)數(shù)據(jù)要全表掃描,還不如用整個(gè)表的替換來的快些。Hive也不支持update的操作。數(shù)據(jù)是以load的方式,加載到建立好的表中。數(shù)據(jù)一旦導(dǎo)入,則不可修改。要么drop掉整個(gè)表,要么建立新的表,導(dǎo)入新的數(shù)據(jù)。

Drop語句

刪除一個(gè)內(nèi)部表的同時(shí)會同時(shí)刪除表的元數(shù)據(jù)和數(shù)據(jù)。刪除一個(gè)外部表,只刪除元數(shù)據(jù)而保留數(shù)據(jù)。

Limit子句

可以限制查詢的記錄數(shù)。查詢的結(jié)果是隨機(jī)選擇的。下面的查詢語句從 t1 表中隨機(jī)查詢5條記錄,SELECT * FROM t1 LIMIT 5。

Top K查詢

下面的查詢語句查詢銷售記錄最大的 5 個(gè)銷售代表。

SET mapred.reduce.tasks = 1 SELECT * FROM sales SORT BY amount DESC LIMIT 5

正則表達(dá)式使用

SELECT語句可以使用正則表達(dá)式做列選擇,下面的語句查詢除了ds和h 之外的所有列:

SELECT `(ds|hr)?+.+` FROM sales

SELECT語句

查詢數(shù)據(jù)

Group by, Order by, Sort by子句

聚合可進(jìn)一步分為多個(gè)表,甚至發(fā)送到 Hadoop 的 DFS 的文件(可以進(jìn)行操作,然后使用HDFS的utilitites)。可以用hive.map.aggr控制怎么進(jìn)行匯總。默認(rèn)為為true,配置單元會做的第一級聚合直接在MAP上的任務(wù)。這通常提供更好的效率,但可能需要更多的內(nèi)存來運(yùn)行成功。

Join語句:

連接操作。一些注意事項(xiàng):
1. Hive只支持等值連接(equality joins)、外連接(outer joins)和(left/right joins)。Hive不支持所有非等值的連接,因?yàn)榉堑戎颠B接非常難轉(zhuǎn)化到map/reduce任務(wù)。
2. Hive 支持多于2個(gè)表的連接。
3. join 時(shí),每次 map/reduce 任務(wù)的邏輯: reducer 會緩存 join 序列中除了最后一個(gè)表的所有表的記錄, 再通過最后一個(gè)表將結(jié)果序列化到文件系統(tǒng)。這一實(shí)現(xiàn)有助于在reduce端減少內(nèi)存的使用量。實(shí)踐中,應(yīng)該把最大的那個(gè)表寫在最后(否則會因?yàn)榫彺胬速M(fèi)大量內(nèi)存)。
4. LEFT,RIGHT 和 FULL OUTER 關(guān)鍵字用于處理 join 中空記錄的情況。
5. LEFT SEMI JOIN 是 IN/EXISTS 子查詢的一種更高效的實(shí)現(xiàn)。Hive 當(dāng)前沒有實(shí)現(xiàn) IN/EXISTS 子查詢,所以你可以用 LEFT SEMI JOIN 重寫你的子查詢語句。LEFT SEMI JOIN的限制是, JOIN子句中右邊的表只能在ON子句中設(shè)置過濾條件,在WHERE子句、SELECT子句或其他地方過濾都不行。

總結(jié)

以上是生活随笔為你收集整理的Hive体系结构(三)元数据库与基本操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。