Hive 0.14创建事务表

时间:2015-11-11 00:44:52

标签: transactions hive updates

我是hive 0.14以来支持hive交易的新手。

我在hive中创建了一个事务表,如下所示

  

创建表test_transactional(id int,name string)聚集(id)   分为两个存储为orc TBLPROPERTIES的桶(' transactional' =' true');

我还创建了一个包含一些id,string列的示例数据的表。

  

创建表阶段(id int,name string)ROW FORMAT DELIMITED FIELDS   终止于',';

然后我将阶段表中的数据插入到test_transactional表中,如下所示,

  

插入表test_transactional select * from stage;

我还运行了一个更新语句,看它是否正常工作。到目前为止一切都很好。

问题

  1. 当我在test_transactional表的hdfs文件夹上执行ls时,我看不到基本文件夹,只看到delta文件夹。根据文档,我的理解是应该存在基本文件夹。或者只有在运行主要压缩时才会创建基本文件夹?

  2. 当显式运行update / insert / delete语句时,表会更新,但在典型的ETL中,当我在登台表中有数据时,如何确定它是更新,插入还是删除?我是否需要设置一些属性以便hive可以自动执行此操作?如果不能如何处理?

1 个答案:

答案 0 :(得分:0)

  1. 是的,你是正确的基础文件夹只有在主要压缩运行时才会创建。 您可以通过触发以下命令
  2. 手动运行它

    更改表[表名]分区[分区名称] compact ='major'

    1. 我们应该在基本系统中分别跟踪(插入,更新,删除)3列(createdon,modifiedon,deleteflag),从而将数据提取到临时表中。
    2. 限制:基本系统不应删除任何记录,而应设置deleteflag = 1