㈠ Hive復雜數據類型:array、map、struct
目前所學的復雜數據類型有三種 array , map , struct 。
用這種數據類型的特點就是集合里的每一個欄位都是一個具體的信息,不會是那種 key 與 values 的關系
load數據如上所示,一共兩個欄位, ruoze 和他們工作的城市
也就是欄位與欄位之間的分割用table array欄位之間的分割用「 , 」。
array_contains 這個函數是array_contains(array欄位,『欄位包含的內容』)
比如以上就是array欄位包含 tianjin 的數據。
以上數據一共有3個欄位,分別為id,name,member。其中member里的內容都是以 key:values 的形式出現的,若是這種形式一般用 map 這種復雜數據類型
struct('a',1,2,3,4) (這個數據類型的特點就是可以包含各種各樣的數據類型。但是 struct 可以是任意數據類型,在寫struct數據類型時,在 <> 中要寫清楚struct欄位中的欄位名稱跟數據類型)
㈡ hive表的類型有哪些
Hive 的表有哪些類型呢,我們簡單可以分為四種,受控表、外部表、分區表、桶表,從嚴格意義上說,應該分為兩種受控表,又叫內部表、外部表,分區表和桶表其實是受控表的不同體現。
1、受控表
所謂受控表,我們也經常叫內部表,和外部表對應起來,就是說表的數據的生命周期收表的控制,當表定義被刪除的時候,表中的數據隨之一並被刪除。創建一張表,其對應在hive中就有了表記錄,在metastore表TBLS中就有表定義,當我們一旦從hive中刪除一張表的定義之後,其表中的數據也就不復存在了,在metastore中的定義也就不存在了。
2、外部表
和受控表相對的,怎麼相對呢,你的內部表的數據的生命周期受表定義的影響不是,外部表的不是這樣的,數據的生命周期, 或者說數據存在與否和表的定義互不約束,表中的數據呢,只是表對hdfs上相應文件的一個引用而已,當刪除表定義的時候,表中的數據依然存在。
3、分區表
假設伺服器集群每天都產生一個日誌數據文件,把數據文件統一存儲到HDFS中。我們如果想查詢某一天的數據的話,hive執行的時候會對所有文件都掃描一遍,判斷是否是指定的日期。可以讓日期作為一個子目錄。當hive查詢的時候,根據日期去判斷子目錄。然後掃描符合條件的子目錄中的數據文件。
4、桶表
桶表是對數據進行哈希取值,然後放到不同文件中存儲。分桶是將數據及分解成更容易管理的若幹部分的另一種技術。如果進行表連接操作,那麼就需要對兩張表的數據進行全掃描。非常耗費時間。可以針對連接欄位進行優化。分桶這種情況下呢,對於相似的表中的數據進行比較的話就非常的方便了,只要對比相應的桶中的數據就可了。