hive 在分区表上添加列不起作用

问题描述 投票:0回答:2

我分享在分区 Hive 表上添加列的经验。 正如您所看到的,尽管有 CASCADE 功能,但 ALTER 会制动我的表:(

在分区表上添加列

表格说明

CREATE TABLE test (
a                       string,      
b                       string,
c                       string
)
PARTITIONED BY (
x                       string,
y                       string, 
z                       string
)
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 (
'orc.compress'='SNAPPY'
);

复制表格

CREATE TABLE test_tmp...

hadoop distcp hdfs://.../test/* dfs://.../test_tmp

MSCK REPAIR TABLE test_tmp;

SELECT * FROM test_tmp
LIMIT 100

检查:好的(我得到结果)

修改表格

ALTER TABLE test_tmp
ADD COLUMNS(
aa  timestamp,
bb  string,
cc  int,
dd  string
) CASCADE;

SELECT * FROM test_tmp
LIMIT 100

...
]], Vertex did not succeed due to OWN_TASK_FAILURE, failedTasks:1 killedTasks:19, Vertex vertex_1502459312997_187854_4_00 [Map 1] killed/failed due to:OWN_TASK_FAILURE]DAG did not succeed due to VERTEX_FAILURE. failedVertices:1 killedVertices:0
... 1 statement(s) executed, 0 rows affected, exec/fetch time: 21.655/0.000 sec  [0 successful, 1 errors]

检查:KO(我收到此错误)

hadoop hive hiveql partition
2个回答
1
投票

如果您使用 Hive 0.x 或 1.x 那么您可能是......的受害者

HIVE-10598   将列添加到表中时矢量化会停止。

...这是 ORC 格式特有的,即使从 JIRA 标签中看不出来。

从 Hive 2.0 开始有部分修复(即

ADD
已修复,但
DROP
/
RENAME
/
CHANGE
仍然残缺)
感谢

HIVE-11981   ORC 架构演化问题(矢量化、ACID 和 非矢量化)

还有 Hive 2.1.1 的另一个相关修复

CHANGE

HIVE-14355   llap 中 ORC 的架构演变已被破坏 用于 Int 到 String 的转换

未完待续...


0
投票

如果您有外部 Hive 表,那么您可以尝试以下操作:

  1. 删除分区,这只会在内部清除元数据,因为这是外部表

    更改表 如果存在分区则删除

  2. 立即更改表格以添加新列

    更改表 添加列

  3. 刷新 hive 元数据以再次读取分区。这将恢复表目录中的所有分区并更新 Hive 元存储

    MSCK 维修表

© www.soinside.com 2019 - 2024. All rights reserved.