Apache spark 即使在使用enableHiveSupport()之后,也无法使用spark sql交换配置单元分区

Apache spark 即使在使用enableHiveSupport()之后,也无法使用spark sql交换配置单元分区,apache-spark,hive,apache-spark-sql,hiveql,Apache Spark,Hive,Apache Spark Sql,Hiveql,我试图将增量数据推送到基本配置单元表中。为此,我在staging数据库中准备了数据,并将其存储在一个表中,该表与我的基表的ddl完全相同。为了将数据从staging移动到base,我尝试使用spark.sql中配置单元表上的“Exchange分区”,如下所示 Alter table base.basetable drop partition (vehicle='BIKE'); ALTER TABLE base.basetable EXCHANGE PARTITION (vehicle='BIKE

我试图将增量数据推送到基本配置单元表中。为此,我在staging数据库中准备了数据,并将其存储在一个表中,该表与我的基表的ddl完全相同。为了将数据从staging移动到base,我尝试使用spark.sql中配置单元表上的“Exchange分区”,如下所示

Alter table base.basetable drop partition (vehicle='BIKE');
ALTER TABLE base.basetable EXCHANGE PARTITION (vehicle='BIKE') WITH TABLE staging.stagingtable;
但我看到了例外:

org.apache.spark.sql.catalyst.parser.ParseException:
Operation not allowed: ALTER TABLE EXCHANGE PARTITION(line 1, pos 0)
== SQL ==
ALTER TABLE base.basetable (vehicle='BIKE') WITH TABLE staging.stagingtable
^^^
看起来spark sql不支持“Exchange分区”,即使我在程序中设置了
enableHiveSupport()

val spark  = SparkSession.builder().config(conf).master("yarn").enableHiveSupport().config("hive.exec.dynamic.partition", "true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
enableHiveSupport()
是否应该为配置单元查询提供所有支持和访问权限

我可以执行
insert overwrite base.basetable分区(vehicle)从staging.stagingtable中选择*的操作,其中vehicle='BIKE'

我们的一些表有巨大的数据,如果“Exchange分区”功能在spark sql中不起作用,那么我们可以使用它。
有人能告诉我在这种情况下如何交换分区吗?

错误消息告诉您答案。spark sql不支持此类操作。

在这种情况下如何交换分区
-如何执行配置单元查询而不是spark?(例如通过直线)我的整个程序都是用spark编写的。在这种情况下有什么建议吗?这应该不是问题,您可以从scala执行配置单元命令(JDBC/plain bash命令)。正如下面的答案中所说的,您不能使用Spark来执行此操作。例如:
import sys.process.\u;Seq(“蜂巢”、“-e”、“改变表格…”)
@shay_uuu我写一个普通的老scala jdbc类,它使用连接道具连接到Hive。然后删除并交换分区?这是你的建议吗?是的,蓝色幻影。我看到工作日志后明白了这一点。我的问题是,我怎样才能克服这一点?我已经用spark编写了整个代码。因此,我试图寻找是否有其他方法将最终数据合并到我的基表中。Linux脚本可能是。DF书写器使用Spark。