hive支援以下資料型別:
有符號整數: bigint(8 位元組),int(4位元組),smallint(2位元組)、tinyint(1位元組)
浮點數:float 、 double
boolean:flase、true
string
map:無序鍵值對。鍵的型別必須是原子的,值可以是任意型別,同乙個對映的鍵的型別必須相同,值的型別也必須相同
array: 有序列表,所有元素都必須是相同型別
struct:複雜型別,欄位的型別可以不同
hive提供了普通的sql操作,包括關係操作、算數操作以及邏輯操作。
hive也提供了很多內建函式,可以通過命令 show functions; 檢視。這些函式可以分成幾大類,包括數學和統計函式、字串函式、日期函式、條件函式、聚集函式以及處理xml和json的函式。
如果想知道某個函式的功用,可以通過命令查詢,如上。
hive的表在邏輯上有儲存的資料和描述表中資料形式的相關元資料組成。資料一般儲存在hdfs中,元資料存放在關係型資料庫中。
ps: 一般翻譯為 託管表和外部表
在hive中建立表時,預設情況下hive負責管理資料。這意味著hive把資料移入它的 「倉庫目錄」。另一種選擇是建立乙個「外部表」。這會讓hive到倉庫目錄以外的位置訪問資料。
建立託管表:
create
table users(id int,name string);
load data inpath '/user/hive/users' overwrite into
table users ;
建立表users,並把資料移動到 warehouse目錄下。
丟棄表:
drop
table users;
這個表的元資料和資料,會被一起刪除。
load 載入操作是檔案系統中的檔案移動或者檔案重新命名。hive並不檢查表目錄中的檔案是否符合未表所宣告的模式,如果有資料和模式不匹配,只有在查詢是才會知道。通常查詢時返回null時,表示字段缺失或者不匹配。
建立外部表:
create
external
table users(id int,name string)
row format delimited fields terminated by
','location '/user/hive/users' ;
load data inpath '/user/hadoop/users.txt'
into
table users ;
使用external 關鍵字,表示建立外部表。並且在建立時,hive並不會檢查這一外部位置是否存在。drop外部表時,hive只會刪除元資料。
使用分割槽可以加快資料分片的查詢速度。表或分割槽可以進一步分為bucket,可以未資料提供額外的結構以獲取更高效的查詢處理。
partition
以日誌檔案舉例:日誌檔案中每條記錄包含乙個時間戳。如果根據日期進行分割槽,那麼同一日期的記錄就會被存放在同乙個分割槽中。優點: 對於限制到某個或某些特定日期的查詢,處理將會更加高效。乙個表可以以多個維度進行分割槽。
分割槽是建立表時使用 partitioned by 定義。
create
external
table
ifnot
exists logs_static (
ip string,
status int)
partitioned by (year
int, month
int, day
int)
row format delimited fields terminated by
'\t'
location '/user/hadoop/logs/logs_static';
檢視表的描述:
在hdfs中,會建立如下檔案
查詢:
bucket
把錶或者分割槽組織成 桶有個理由。第乙個理由是獲得更高的查詢處理效率。第二個理由是可以使 取樣(sampling) 操作更加高效。
clustered by 定義如何劃分桶以及桶的個數。
create
table bucketed_users (id int, name string)
clustered by (id) sorted by (id asc) into
4 buckets;
這裡,使用id確定如何分桶(hive對值進行雜湊並將結果除以桶的個數取語數)。桶中的資料可以根據乙個或者多個列另外進行排序。這樣對每個桶的連線成了高效的 歸併排序,因此可以進一步提公升map端連線的效率。
將users表中的資料灌入 分桶表:
insert overwrite table bucketed_users
select * from users;
分桶完成後,hive會在hdfs上建立4個資料檔案。
查詢:
select * from bucketed_users tablesample(bucket 2 out of
2on id);
tablesample 表示對錶進行取樣。桶的個數從2開始計數,返回表中約1/2的資料行。因為查詢只需要讀取和tablesample 子句匹配的桶,所以取樣分桶表是非常高效的操作。如果使用rand() 函式對沒有劃分成桶的表進行取樣,即使只需要讀取很小一部分樣本,也要燒麥整個輸入資料集。
select * from users tablesample (bucket 1 out of
4on rand());
Hive學習筆記 Hive 引數
第一部分 hive 引數 hive.exec.max.created.files 說明 所有hive執行的map與reduce任務可以產生的檔案的和 預設值 100000 hive.exec.dynamic.partition 說明 是否為自動分割槽 預設值 false hive.mapred.re...
Hive學習筆記 Hive概述
1.1 資料倉儲 可以利用資料倉儲來儲存我們的資料,但是資料倉儲有別於我們常見的一般資料庫。資料倉儲是乙個面向主題的 整合的 不可更新的 隨時間不變化的資料整合,它用於支援企業或組織的決策分析處理。物件導向的 倉庫中的資料是按照一定的主題進行組織的。主題即使用者使用資料倉儲進行決策時所關心的重點方面...
hive學習筆記
在使用hive進行開發時,我們往往需要獲得乙個已存在hive表的建表語句 ddl 然而hive本身並沒有提供這樣乙個工具。要想還原建表ddl就必須從元資料入手,我們知道,hive的元資料並不存放在hdfs上,而是存放在傳統的rdbms中,典型的如mysql,derby等,這裡我們以mysql為元資料...