不死鸟.亚历山大.狼崽子

不死鸟.亚历山大.狼崽子

1 Hive事务背景知识

Hive本身从设计之初时,就是不支持事务的,因为Hive的核心目标是将已经存在的结构化数据文件映射成为表,然后提供基于表的SQL分析处理,是一款面向分析的工具。

并且Hive映射的数据通常存储于HDFS上,而HDFS是不支持随机修改文件数据的。

这个定位就意味着在早期的Hive的SQL语法中是没有update,delete操作的,也就没有所谓的事务支持了,因为都是select查询分析操作。

从Hive0.14版本开始,具有ACID语义的事务(支持INSERT,UPDATE和 DELETE这些用例)已添加到Hive中,以解决以下场景下遇到的问题:

  • 流式传输数据。使用如Apache Flume或Apache Kafka之类的工具将数据流式传输到现有分区中,但是这会使读者感到脏读(也就是说,开始查询后能看到写入的数据)。
  • 变化缓慢的维度数据。在典型的星型模式数据仓库中,维度表随时间缓慢变化。例如,零售商将开设新商店,需要将其添加到商店表中,或者现有商店可能会更改其平方英尺或某些其他跟踪的特征。这些更改导致插入单个记录或更新记录(取决于所选策略)。
  • 数据更新。有时发现收集的数据不正确,需要更正。

2 Hive事务表局限性

虽然Hive支持了具有ACID语义的事务,但是在使用起来,并没有像在MySQL中使用那样方便,有很多局限性。原因很简单,毕竟Hive的设计目标不是为了支持事务操作,而是支持分析操作,且最终基于HDFS的底层存储机制使得文件的增加删除修改操作需要动一些小心思。具体限制如下:

    07-10 22:56