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

osh3o9ms  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(452)

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

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
^^^

这看起来像sparksql不支持“exchange partition”,即使我已经设置了 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 partition(vehicle) select * from staging.stagingtable where vehicle='BIKE' 我们的一些表有大量的数据,如果“exchange partition”功能在sparksql中不起作用的话。有人能告诉我在这种情况下如何交换分区吗?

s4n0splo

s4n0splo1#

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

相关问题