我正在尝试将增量数据推送到一个基本配置单元表中。为此,我在我的暂存数据库中准备了数据,并将其存储在一个与我的基表的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中不起作用的话。有人能告诉我在这种情况下如何交换分区吗?
1条答案
按热度按时间s4n0splo1#
错误消息告诉您答案。spark sql不支持此类操作。