首先,Hive 沒有專門的數據存儲格式,也沒有爲數據創建索引,用戶能夠很是自由的組織 Hive 中的表,只須要在建立表的時候告訴 Hive 數據中的列分隔符和行分隔符,Hive 就能夠解析數據。
其次,Hive 中全部的數據都存儲在 HDFS 中,Hive 中包含如下數據模型:Table,External Table,Partition,Bucket。數據庫
1. Hive 中的 Table 和數據庫中的 Table 在概念上是相似的,每個 Table 在 Hive 中都有一個相應的目錄存儲數據。例如,一個表 xiaojun,它在 HDFS 中的路徑爲:/ warehouse /xiaojun,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的數據倉庫的目錄,全部的 Table 數據(不包括 External Table)都保存在這個目錄中。微信
2. Partition 對應於數據庫中的 Partition 列的密集索引,可是 Hive 中 Partition 的組織方式和數據庫中的很不相同。在 Hive 中,表中的一個 Partition 對應於表下的一個目錄,全部的 Partition 的數據都存儲在對應的目錄中。例如:xiaojun 表中包含 dt 和 city 兩個 Partition,則對應於 dt = 20100801, ctry = US 的 HDFS 子目錄爲:/ warehouse /xiaojun/dt=20100801/ctry=US;對應於 dt = 20100801, ctry = CA 的 HDFS 子目錄爲;/ warehouse /xiaojun/dt=20100801/ctry=CA網站
3. Buckets 對指定列計算 hash,根據 hash 值切分數據,目的是爲了並行,每個 Bucket 對應一個文件。將 user 列分散至 32 個 bucket,首先對 user 列的值計算 hash,對應 hash 值爲 0 的 HDFS 目錄爲:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00000;hash 值爲 20 的 HDFS 目錄爲:/ warehouse /xiaojun/dt =20100801/ctry=US/part-00020code
4. External Table 指向已經在 HDFS 中存在的數據,能夠建立 Partition。它和 Table 在元數據的組織上是相同的,而實際數據的存儲則有較大的差別。視頻
• Table 的建立過程和數據加載過程(這兩個過程能夠在同一個語句中完成),在加載數據的過程當中,實際數據會被移動到數據倉庫目錄中;以後對數據對訪問將會直接在數據倉庫目錄中完成。刪除表時,表中的數據和元數據將會被同時刪除。xml
• External Table 只有一個過程,加載數據和建立表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在 LOCATION 後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個 External Table 時,僅刪除索引
瞭解更多詳情請登陸超人學院網站http://www.crxy.cn?sxyget