hive是基於hadoop的乙個資料倉儲工具,可以將結構化的資料檔案對映為一張資料表,並提供類sql查詢功能(類sql的本質就是將sql轉換成mapreduce程式);主要用於做離線資料分析,比直接用mapreduce程式開發效率更高。
hive利用hdfs儲存資料,利用mapreduce查詢分析資料
hive儲存元資料有兩種,一種是自帶的derby(德比),一種是第三方資料庫(常用mysql)。雖然derby是自帶的,但是在不同的路徑下啟動hive時,都會生成一套當前路徑下操作的元資料,無法實現共享,而使用第三方資料庫就不會出現這種弊端,所以實際開發中使用第三方資料庫。
hive中建立的資料庫儲存在mysql中的"dbs"表中,hive中建立的資料表儲存在mysql中的"tbls"表中,hive中建立的資料表的字段儲存在mysql中的"columns_v2"表中。
預設情況下hive中的資料庫會儲存在"/user/hive/warehouse/資料庫名.db",如果hive要與hadoop檔案系統中的檔案成功對映(即將檔案儲存在"/user/hive/warehouse/資料庫名.db/表名"目錄下),則必須建立乙個與待對映檔案資料型別一一對應的資料表,資料表的乙個個字段對應檔案的一列,並且要根據hadoop資料檔案中的分隔符型別,指定與之對應的字段分隔符。hive與hadoop資料文字的對映的實質就是建立乙個與待對映檔案完全對應的資料表(這個表其實就是hadoop檔案系統中的乙個資料檔案)後,將這個待對映檔案存放到這個資料表下面,在操作該資料表時,hadoop檔案系統會根據hql語句轉化成對應的mapreduce程式,將操作結果顯現出來。
1.
row format delimited fields
terminated
bychar
("char"表示文字中字段的分隔符)
2.row format delimited collection items terminated
bychar
("char"表示文字中集合中字段的分隔符)
3.row format delimited map keys
terminated
bychar
("char"表示文字中map集合中的字段的分隔符)
hive建表時預設使用的分割符是"\001"(使用vi編譯器ctrl+v,然後ctrl+a),若在建表時沒有指明分隔符,load文字時,如果文字的分隔符如果是"\001",則可以成功對映,如果分隔符符不是"\001",程式不會報錯,但是不能成功對映,顯示的結果為"null"。
hive使用partitioned by(字段 資料型別)來建立分割槽表,其中"字段"是用來分割槽的,他不能是資料表中已經存在的字段,因為它是虛擬的字段(其實它就相當於是乙個資料夾,在載入資料時,就將載入的資料儲存在指定的這個分割槽的目錄下),不存放任何資料(分割槽表中的資料不能使用"-put"命令來對映資料表,因為路徑不對,缺少"字段"這一級目錄(即使新增"字段",這一級目錄,也不能使用"-put"),載入分割槽表資料只能使用load指令)。此外,partitioned by()中有幾個字段,就是幾級分割槽表。建立分割槽表:
create
table book (id bigint
, name string) partitioned by
(pubid int
)row format delimited fields
terminated
by','
load
data
local inpath '/book.txt' overwrite into
table book partition
(pubid=
1)
分桶表在建立前,需要開啟分桶表功能("set hive.enforce.bucketing = true"開啟分桶功能,"set mapreduce.job.reduces=4"指定分桶的份數),hive使用clustered by(字段),關鍵字來建立分桶表,分桶表建立的時候,分桶的字段必須是表中已經存在的字段(他們就是要分開的字段)。
hive中的分桶表可以提高查詢處理效率(將多個資料表中共同的字段當成分桶字段)
create
table book (id bigint
, name string)
clustered
by(id)
into
4 backets row format delimited fields
terminated
by','
分桶表的資料的匯入使用"insert……select"語句載入資料如
insert overwrite table book select
*from book1 cluster by
(id)
;
hive的資料操作
1.向表中裝載資料 load data local inpath california employees overwrite into table employees partition country us state ca 2.通過查詢語句向表中插入資料 insert overwrite in...
hive的基本操作
建立表 create table table name col name data type comment col comment create table hive wordcount context string 載入資料到hive表 load data local inpath filepa...
hive操作elasticsearch的操作
elasticsearch是乙個基於lucene的搜尋伺服器。它提供了乙個分布式多使用者能力的全文搜尋引擎,基於restful web介面 目前elastic search已經可以很好的與hive資料庫進行配合操作,將hive中的資料在elasticsearch中建立對應的索引,方便使用者用rest...