我创建了一个带有存储处理程序的配置单元表,现在我想向该表中添加一列,但出现以下错误:
[Code: 10134, SQL State: 42000] Error while compiling statement: FAILED:
SemanticException [Error 10134]: ALTER TABLE can only be used for [ADDPROPS,
DROPPROPS] to a non-native table
根据配置单元文档,使用存储处理程序创建的任何配置单元表都是非本机表。
这里有一个链接https://cwiki.apache.org/confluence/display/hive/storagehandlers
有一个jira的案例是增强开放与apache的相同。https://issues.apache.org/jira/browse/hive-1240
例如,在我的例子中,我使用的是druid存储处理程序。
我创建了一个配置单元表,使用:
CREATE TABLE druid_table_1
(`__time` TIMESTAMP, `dimension1` STRING, `metric1` int)
STORED BY 'org.apache.hadoop.hive.druid.DruidStorageHandler';
然后我尝试添加一列:
ALTER TABLE druid_table_1 ADD COLUMNS (`dimension2` STRING);
用上述方法我得到一个错误。
有没有其他方法可以在不重新创建列的情况下将列添加到配置单元中的非本机表中?
1条答案
按热度按时间ahy6op9u1#
hortonworks提供hdp 2.5+版本的修补程序。alter语句中添加了对add列的支持。
列可以使用配置单元中的altertableddl添加到druid表中。
ALTER TABLE ADD COLUMNS (col_name data_type)
无需指定分区规范,因为这些是druid支持的配置单元表,分区/存储由druid维护。