天天看点

HIVE 新特性 ACID 初试

在 hive 0.14 之前,hive ql 一直不支持insert、update、delete 操作,这显然很不方便,尤其是在构建数据仓库的过程中,一个比较常见的例子是<code>维度表</code>经常需要更新某列,在 hive 中需要更新历史所有数据,这显然是不合理的。

在 hive 0.14 版本,支持了行级别的 acid 与 transactions,这也就解决了上面的问题。

本文主要讲解如何在 hive 0.14 配置,使得支持上述两个特性,相关原理及性能分析后面再单独写一篇文章来分析。

相关软件说明:

hive 1.1.0

mysql 5.6(存储 metastore )

这里需要注意的是,必须source <code>txn</code>相关的表,否则后面创建表是会报下面几种错误:

这里的表需要具备下面几个条件:

1. 必须以 orc 格式存储

2. 必须分 bucket,且不能 sort

3. 必须显式声明transations

大致如下面模版所述:

知道了限定条件,我们来创建一个表做个测试:

之后<code>insert</code>两条数据

回车后,会运行一个mr去插入数据,之后就可以查询了

这里的中文貌似有乱码问题,这里先不做处理了。

在 hdfs 上生产的文件为:

在创建表时,我遇到了下面的问题

这时由于 mysql 自身对索引字段字符长度的限制,我数据库用的是utf8编码,767/3=255.6,这也就是说索引字段的varchar不能大于255,对于 mysql5.6以及以后的版本,可以通过在<code>/my/etc.conf</code>中添加如下配置解决

相关原理可见:

<a href="http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix">http://dev.mysql.com/doc/refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix</a>