天天看點

HIVE 新特性 ACID 初試

在 hive 0.14 之前,hive ql 一直不支援insert、update、delete 操作,這顯然很不友善,尤其是在建構資料倉庫的過程中,一個比較常見的例子是<code>次元表</code>經常需要更新某列,在 hive 中需要更新曆史所有資料,這顯然是不合理的。

在 hive 0.14 版本,支援了行級别的 acid 與 transactions,這也就解決了上面的問題。

本文主要講解如何在 hive 0.14 配置,使得支援上述兩個特性,相關原理及性能分析後面再單獨寫一篇文章來分析。

相關軟體說明:

hive 1.1.0

mysql 5.6(存儲 metastore )

這裡需要注意的是,必須source <code>txn</code>相關的表,否則後面建立表是會報下面幾種錯誤:

這裡的表需要具備下面幾個條件:

1. 必須以 orc 格式存儲

2. 必須分 bucket,且不能 sort

3. 必須顯式聲明transations

大緻如下面模版所述:

知道了限定條件,我們來建立一個表做個測試:

之後<code>insert</code>兩條資料

回車後,會運作一個mr去插入資料,之後就可以查詢了

這裡的中文貌似有亂碼問題,這裡先不做處理了。

在 hdfs 上生産的檔案為:

在建立表時,我遇到了下面的問題

這時由于 mysql 自身對索引字段字元長度的限制,我資料庫用的是utf8編碼,767/3=255.6,這也就是說索引字段的varchar不能大于255,對于 mysql5.6以及以後的版本,可以通過在<code>/my/etc.conf</code>中添加如下配置解決

相關原理可見:

<a href="http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix">http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix</a>