剛剛下載了一份HIVE的最新原始碼。
印象最深的是HIVE將表的大小作為了後設資料儲存在了關聯式資料庫中。
譬如在老版本中執行如下的語句:
from base insert overwrite table user select * ;
你會發現日誌的末尾會有 “999 ROWD LOADED INTO TABLE USER” 的字樣
代表有999條目記錄儲存在了user表中。
在而在新版本中,執行最後的日誌展示了USER表的後設資料,其中會有ROW_COUNT:999的字樣
一看MYSQL中,999這個資料確實被儲存了起來。
也就是說大家以後不必再用“select count(*) from user ”去查詢user表的大小了,因為HIVE會將這個語句翻譯為MR作業在HADOOP上執行,效率非常低。
新的方法是
HiveConf
conf = new HiveConf(SessionState.class);
Hive
hive = Hive.get(conf);
System.out.println(hive.getTable(“user”).getTTable()
.getParameters());
List
list = hive.getPartitions(hive.getTable(“user”));
for
(Partition p : list) {
System.out.println(p.getParameters());
}
其中列印出來的就是USER表的後設資料。
PS:
1。有人會問
select count(1) from user where age=20 這種帶有條件的計數怎麼辦?
別忘記HIVE有分割槽的概念,看到上面的API了嗎,分割槽也是有後設資料的。
2. conf是什麼東西?
conf是HIVECONF
尋找你CLASSPATH路徑下的HIVESITE檔案生成的配置檔案物件。
將伺服器上的HIVE配置檔案COPY到你的專案中,這個API就可以使用了。
写评论
很抱歉,必須登入網站才能發佈留言。