我无法在表上执行更新。
我已经创建了跨国表。
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;
请帮助我。
谢谢。
答案 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
。