在 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>