Hive - Hbase集成带有时间戳的事务更新



我是hadoop和大数据的新手,只是想弄清楚这些天将我的数据存储移动到hbase的可能性,我遇到了一个问题,你们中的一些人可能能够帮助我。比如,

我有一个hbase表"hbase_testTable"与列族:"ColFam1"。我已经将"ColFam1"的版本设置为10,因为我必须维护该列族最多10次更新的历史记录。这很好。当我尝试通过hbase shell添加新的行,显式时间戳值它工作得很好。基本上我想使用时间戳作为我的版本控制。所以我指定时间戳为

put 'hbase_testTable' '1001','ColFam1:q1', '1000$', 3

其中'3'是我的版本。一切都很好。

现在我正在尝试与HIVE外部表集成,并且我已经将所有映射设置为与hbase表匹配,如下所示:

create external table testtable (id string, q1 string, q2 string, q3 string) 
STOREd BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH 
SERDEPROPERTIES ("hbase.columns.mapping" = ":key,colfam1:q1, colfam1:q2, colfam1:q3") 
TBLPROPERTIES("hbase.table.name" = "testtable", "transactional" = "true");

和正常插入工作良好。它更新HBase表,反之亦然。

即使外部表被设置为"事务性",我也无法更新HIVE上的数据。它给了我一个错误:

FAILED: SemanticException [Error 10294]: Attempt to do update or delete
        using transaction manager that does not support these operations

表示,对hbase表的任何更新都会立即反映到hive表中。

我可以用hive外部表更新Hbase表,方法是尝试在hive外部表中插入"row"列的新数据。

是否可以控制时间戳写入引用的hbase表(如4,5,6,7..等)请帮助。

时间戳是Hbase版本控制的重要元素之一。您正在尝试创建自己的时间戳,这在Hbase级别上工作得很好。有一点,你应该非常小心,用唯一和非负的。你可以在hbase - definitive Guide中查看自定义版本控制。

现在你有了Hbase之上的Hive。根据文档

there is currently no way to access the HBase timestamp attribute, and queries always access data with the latest timestamp.

这是阅读部分。要放数据,你可以看这里。它仍然说,你必须给出有效的时间戳,而不是任何其他值。

期望未来的版本公开时间戳属性。我希望你对如何在Hive-Hbase集成中处理自定义时间戳有了更好的了解。

最新更新