Hive更新和删除

时间:2015-05-31 10:32:28

标签: hive odbc unixodbc

我正在使用Hive 1.0.0版本和Hadoop 2.6.0以及Cloudera ODBC驱动程序。我试图从Cloudera HiveOdbc Driver更新和删除hive数据库中的数据,它会抛出一个错误。这是我的错误。

我做了什么?

创建

create database geometry;

create table odbctest (EmployeeID Int,FirstName String,Designation String, Salary Int,Department String) 
clustered by (department)
into 3 buckets
stored as orcfile
TBLPROPERTIES ('transactional'='true');
  

创建表。

插入

insert into table geometry.odbctest values(10,'Hive','Hive',0,'B');

通过传递上述查询,数据将插入数据库。

更新

当我尝试更新时,出现以下错误

update geometry.odbctest set salary = 50000 where employeeid = 10;
  

SQL> update geometry.odbctest set salary = 50000 where employeeid = 10;

     

[S1000] [Cloudera] [HiveODBC](55)不支持插入操作   表:HIVE.geometry.odbctest

     

[ISQL]错误:无法SQLPrepare

删除:

当我尝试删除以下错误时

delete from geometry.odbctest where employeeid=10;
  

SQL>从geometry.odbctest中删除employeeid = 10;

     

[S1000] [Cloudera] [HiveODBC](55)插入操作不支持表:HIVE.geometry.odbctest

     

[ISQL]错误:无法SQLPrepare

任何人都可以帮助我,

4 个答案:

答案 0 :(得分:3)

您已正确完成了几项必要步骤:

  • ORC格式
  • 分动表

可能的原因是:未包含以下一个或多个配置单元:

  

必须适当设置这些配置参数才能打开   Hive中的事务支持:

hive.support.concurrency – true
hive.enforce.bucketing – true
hive.exec.dynamic.partition.mode – nonstrict
hive.txn.manager – org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
hive.compactor.initiator.on – true (for exactly one instance of the Thrift metastore service)
hive.compactor.worker.threads – a positive number on at least one instance of the Thrift metastore service

交易支持的完整要求如下:https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions

如果您已验证上述设置已就绪,请执行

describe extended odbctest;

评估其与交易相关的特征。

答案 1 :(得分:1)

当使用Cloudera(v 2.5.12.1005 64位)分发的Simba ODBC驱动程序连接到Hive 1.2时,我偶然发现了同样的问题。在验证了javadba帖子中的所有内容之后,我做了一些额外的挖掘,发现问题是ODBC驱动程序中的一个错误。

我能够通过使用Progress DataDirect驱动程序解决问题,看起来hortonworks分发的驱动程序版本也可以工作(链接到下面的两个解决方案)。

https://www.progress.com/data-sources/apache-hive-drivers-for-odbc-and-jdbc http://hortonworks.com/hdp/addons/

希望能帮助任何可能仍在努力的人!

答案 2 :(得分:0)

您不应该将Hive视为常规RDBMS,Hive更适合对非常大的不可变数据集进行批处理。

以下是enter link description here

的内容
  

Hadoop是一个批处理系统,Hadoop的工作往往很高   延迟并在作业提交中产生大量开销   调度。因此,Hive查询的延迟通常很大   即使所涉及的数据集非常小(例如几个),也要高(分钟)   百兆字节)。因此,它无法与系统进行比较   例如Oracle,其中分析的范围要小得多   数据量,但分析进行了更多的迭代   迭代之间的响应时间少于几分钟。蜂巢   旨在为交互式提供可接受的(但不是最佳的)延迟   数据浏览,查询小数据集或测试查询。

     

Hive不是为在线交易处理而设计的,不是   提供实时查询和行级更新。它最适合用于   批量作业超过大量不可变数据(如Web日志)。

答案 3 :(得分:-1)

截至目前,Hive不支持对HDFS中的数据进行更新和删除操作。 https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions