首先,hive 沒有專門的資料儲存格式,也沒有為資料建立索引,使用者可以非常自由的組織 hive 中的表,只需要在建立表的時候告訴 hive 資料中的列分隔符和行分隔符,hive 就可以解析資料。
其次,hive 中所有的資料都儲存在 hdfs 中,hive 中包含以下資料模型:table,external table,partition,bucket。
1)表table:乙個表就是hdfs中的乙個目錄
2)區partition:表內的乙個區就是表的目錄下的乙個子目錄
3)桶bucket:如果有分割槽,那麼桶就是區下的乙個單位,如果表內沒有區,那麼桶直接就是表下的單位,桶一般是檔案的形式。
hive 中的 table和資料庫中的 table 在概念上是類似的,每乙個 table 在 hive 中都有乙個相應的目錄儲存資料。例如,乙個表 pvs,它在 hdfs 中的路徑為:/wh/pvs,其中,wh 是在 hive-site.xml 中由 $ 指定的資料倉儲的目錄,所有的 table 資料(不包括 external table)都儲存在這個目錄中。
partition對應於資料庫中的 partition 列的密集索引,但是 hive 中 partition 的組織方式和資料庫中的很不相同。在 hive 中,表中的乙個 partition 對應於表下的乙個目錄,所有的 partition 的資料都儲存在對應的目錄中。例如:pvs 表中包含 ds 和 city 兩個 partition,則對應於 ds = 20090801, ctry = us 的 hdfs 子目錄為:/wh/pvs/ds=20090801/ctry=us;對應於 ds = 20090801, ctry = ca 的 hdfs 子目錄為;/wh/pvs/ds=20090801/ctry=ca。表是否分割槽,如何新增分割槽,都可以通過hive-ql語言完成。通過分割槽,即目錄的存放形式,hive可以比較容易地完成對分割槽條件的查詢。
buckets 對指定列計算 hash,根據 hash 值切分資料,目的是為了並行,每乙個 bucket 對應乙個檔案。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值為 0 的 hdfs 目錄為:/wh/pvs/ds=20090801/ctry=us/part-00000;hash 值為 20 的 hdfs 目錄為:/wh/pvs/ds=20090801/ctry=us/part-00020 。桶是hive的最終的儲存形式。在建立表時,使用者可以對桶和列進行詳細地描述。
external table 指向已經在 hdfs 中存在的資料,可以建立 partition。它和 table 在元資料的組織上是相同的,而實際資料的儲存則有較大的差異。
Hive之壓縮儲存
壓縮儲存有時候可以獲得更好的效能。使用textfile儲存時,可以使用gzip或者bzip2進行壓縮。操作如下 create table raw line string row format delimited fieldsterminated by t lines terminated by n ...
Hive的資料儲存格式
hive 沒有專門的資料儲存格式,也沒有為資料建立索引,使用者可以非常自由的組織 hive 中的表,只需要在建立表的時候告訴 hive 資料中的列分隔符和行分隔符,hive 就可以解析資料。其次,hive 中所有的資料都儲存在 hdfs 中,hive 中包含以下資料模型 table,external...
hive 資料儲存各種模式
hive的資料分為表資料和元資料,表資料是hive中 table 具有的資料 而元資料是用來儲存表的名字,表的列和分割槽及其屬性,表的屬性 是否為外部表等 表的資料所在目錄等。下面分別來介紹。一 hive的資料儲存 hive是基於hadoop分布式檔案系統的,它的資料儲存在hadoop分布式檔案系統...