无法在事务表上执行更新

时间:2018-11-15 05:33:51

标签: hive

我无法在表上执行更新。

我已经创建了跨国表。

sdf.partionBy('label')

我正在使用Hive CLI。

CREATE TABLE d_mat.mat_data( 
d_id int,  
dname string, 
dloc string) 
 CLUSTERED BY (  
dloc) 
 INTO 2 BUCKETS  
 ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
 STORED AS INPUTFORMAT 
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
 OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' 
TBLPROPERTIES ('transactional'='true');
  

错误:处理语句时出错:无法修改   hive.support.concurrency在运行时。它不在参数列表中   允许在运行时进行修改(状态= 42000,代码= 1)

SET hive.support.concurrency=true;

请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:0)

您正在尝试更新在表(d_loc)中存储的列。

Hive尚不支持更新存储桶列。

将存储桶列更改为d_id

例如:

CREATE TABLE mat_data( 
d_id int,  
dname string, 
dloc string) 
 CLUSTERED BY (  
d_id) 
 INTO 2 BUCKETS  
 ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
 STORED AS INPUTFORMAT 
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
 OUTPUTFORMAT 
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat' 
TBLPROPERTIES ('transactional'='true');

将值插入表格:

hive> insert into mat_data values(1,"hi","das");
hive> select * from mat_data;
+----------------+-----------------+----------------+--+
| mat_data.d_id  | mat_data.dname  | mat_data.dloc  |
+----------------+-----------------+----------------+--+
| 1              | hi              | das            |
+----------------+-----------------+----------------+--+

更新表格:

hive> UPDATE mat_data SET dloc='Australia' where d_id=1;
hive> select * from mat_data;
+----------------+-----------------+----------------+--+
| mat_data.d_id  | mat_data.dname  | mat_data.dloc  |
+----------------+-----------------+----------------+--+
| 1              | hi              | Australia      |
+----------------+-----------------+----------------+--+
  

错误:处理语句时出错:无法修改   hive.support.concurrency在运行时。它不在参数列表中   允许在运行时进行修改(状态= 42000,代码= 1)

此错误与您尝试进行SET hive.support.concurrency=true; 时的配置有关,并且此属性未在白名单参数中列出。

要解决此问题,请更改hive.security.authorization.sqlstd.confwhitelist in Ambari

有关更多详细信息,请参见thisthis链接。