HIVE中数据更新(update)操作的实现

来源:互联网 发布:mac怎么设置ppt母版 编辑:程序博客网 时间:2024/05/26 02:54
数据更新是一种常见的操作,然后数据仓库的概念一般要求的是数据是集成、稳定的。HIVE作为一种分布式环境下以HDFS为支撑的数据仓库,它同样更多的要求数据是不可变的。

然而现实很多任务中,往往需要对数据进行更新操作,经查,Hive自0.11版本之后就提供了更新操作。于是想着试验一下,看看HIVE更新的操作和性能。


按照网上办法进行设置.

   hive.support.concurrency – true
    hive.enforce.bucketing – true (Not required as of Hive 2.0)
    hive.exec.dynamic.partition.mode – nonstrict
    hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
    hive.compactor.initiator.on – true (for exactly one instance of the Thrift metastore service)
    hive.compactor.worker.threads – a positive


同样在建表后面添加: stored as orc TBLPROPERTIES('transactional'='true'); 以支持ACID的要求.


如以简单的表进行实验:(id int ,name string) , 随意导入几条数据,进行测试.

写入更新操作命令: update ** set name ='aaa' where id =1;


得到结果如下:

似乎这样操作,HIVE对UPDATE操作就非常好的。其实经过实验,发现HIVE的更新机制速度非常的慢,在一个仅仅为6行的数据测试,其花费时间也要180S,这种效率肯定是无法忍受的。猜测其原因可能需要读出原有的表,进行更新,然后再写回HDFS?仅仅是猜测而已。

另外一个非常头疼的事情是,这种HIVE环境下支持ACID的表,竟然只能在HIVE内部才能访问到,而在BEELINE或者SPARK环境下,居然是无法获得数据的。或者对外不提供接口。(中间那行居然不显示数据!!!!)


0 0
原创粉丝点击