在 hive 中添加不允许来自 scala/spark 代码的列



如果源数据有新列,我正在尝试在 Hive 表中添加一列。所有新列的检测都运行良好,但是,当我尝试将列添加到目标表时,我收到此错误:

for (f <- df.schema.fields) {
if ("[" + f.name + "]"==chk) {
spark.sqlContext.sql("alter table dbo_nwd_orders add columns (" + f.name + " " + f.dataType.typeName.replace("integer", "int") + ")")
}
}

错误:

WARN HiveExternalCatalog: Could not alter schema of table  `default`.`dbo_nwd_orders` in a Hive compatible way. Updating Hive metastore in Spark SQL specific format
InvalidOperationException(message:partition keys can not be changed.)

但是,如果我捕获生成的更改句子并从 hive GUI (HUE( 执行它,我可以毫无问题地添加它。

alter table dbo_nwd_orders add columns (newCol int)

为什么这句话对GUI有效,而不是从火花代码中有效?

谢谢。

这里已经说过很多次了,但只是重申一下 - Spark不是Hive接口,也不是为语言(Spark针对SQL标准,Hive使用自定义类似SQL的查询语言(或功能(Spark是ETL解决方案,Hive是数据仓库解决方案(方面完全兼容Hive而设计的。

这两者之间甚至数据布局也不完全兼容。

支持 Hive的 Spark 是可以访问 Hive 元存储的 Spark,而不是行为类似于 Hive 的 Spark。

如果需要访问 Hive 的全套功能,请使用本机客户端或本机(非 Spark(JDBC 连接直接连接到 Hive,并从那里使用它进行交互。

最新更新