我正在尝试将增量数据推送到基本配置单元表中。为此,我将数据准备在登台数据库中,并将其存储在基本表具有确切ddl的表中。为了将数据从分段转移到基础,我正在尝试通过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
^^^
即使我在程序中设置了enableHiveSupport()
,Spark sql也似乎不支持“ Exchange分区”:
val spark = SparkSession.builder().config(conf).master("yarn").enableHiveSupport().config("hive.exec.dynamic.partition", "true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
enableHiveSupport()
是否应该为我提供Hive查询的所有支持和访问权限?
我可以做insert overwrite base.basetable partition(vehicle) select * from staging.stagingtable where vehicle='BIKE'
我们的某些表包含大量数据,并且如果“ Exchange分区”功能在Spark sql中不起作用。 任何人都可以让我知道在这种情况下如何交换分区吗?
答案 0 :(得分:1)
错误消息告诉您答案。 Spark sql不支持此类操作。