Hive实现update和delete

因为业务要求,需要对Hive表进行delete,在官网查询后,发现update和delete是一类问题。在此总结下如何实现Hive表的delete和update。

首先,先看下官网关于update和delete的相关说明,使用注意事项也请参考官网说明,这里只介绍如何实现相关功能。

Hive实现update和delete_第1张图片

Hive实现update和delete_第2张图片

综合上述信息,Hive自0.14版本开始支持update和delete,要执行update和delete的表必须支持ACID,而关于ACID的详细介绍,需要查看Hive Transactions.

经过对Hive Transactions相关内容的分析,我提取出了以下必要信息:

Hive实现update和delete_第3张图片

Hive实现update和delete_第4张图片

Hive实现update和delete_第5张图片

综合上述信息,可以得出以下结论:

如果一个表要实现update和delete功能,该表就必须支持ACID,而支持ACID,就必须满足以下条件:

1、表的存储格式必须是ORC(STORED AS ORC);

2、表必须进行分桶(CLUSTERED BY (col_name, col_name, ...)  INTO num_buckets BUCKETS);

3、Table property中参数transactional必须设定为True(tblproperties('transactional'='true'));

4、以下配置项必须被设定:

     Client端:

  • hive.support.concurrency – true
  • hive.enforce.bucketing – true
  • hive.exec.dynamic.partition.mode – nonstrict  
  • hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager  

     服务端:

  • hive.compactor.initiator.on – true
  • hive.compactor.worker.threads – 1
  • hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager(经过测试,服务端也需要设定该配置项)

       注意:上述配置项必须区分Client端和服务端。在Cloudera Manager上可以分别添加(hive—>配置—>高级),在更新部署配置信息的时候需要勾选部署客户端配置(默认是勾选的)。

Hive实现update和delete_第6张图片

Hive实现update和delete_第7张图片

你可能感兴趣的:(Hive)