我是从hive 0.14开始支持的hive事务的新手。
我在配置单元中创建了一个事务表,如下
创建由(id)聚集的表test_transactional(id int,name string)放入2个存储为orc TBLPROPERTIES的桶中("transactional"="true");
我还创建了一个表,其中包含一些具有id、字符串列的示例数据。
创建表stage(id int,name string)ROW FORMAT DELIMITED字段以","终止;
然后,我将数据从stage表插入到test_transactional表中,如下所示,
插入表test_transactionalselect*from stage;
我还运行了一个更新语句,看看它是否有效。到目前为止还不错。
问题
-
当我对test_transactional表的hdfs文件夹进行ls操作时,我看不到基本文件夹,只看到delta文件夹。根据文档,我的理解是基本文件夹应该存在。或者只有在运行主压缩时才会创建基本文件夹?
-
当更新/插入/删除语句显式运行时,表会被更新,但在典型的ETL中,当我在暂存表中有数据时,我如何确定它是更新、插入还是删除?我是否需要设置一些属性,以便配置单元可以自动执行此操作?如果没有,如何处理?
- 是的,你是对的,只有当主压缩运行时,才会创建基本文件夹。您可以通过启动以下命令手动运行它
Alter Table[Table name]Partition[Partition name]compact='major'
- 我们应该有3列(createdon、modifiedon、deleteflag)在基本系统中分别跟踪(插入、更新、删除),从中我们将数据拉入暂存表
限制:基本系统不应删除任何记录,而应设置deleteflag=1