即使使用enableHiveSupport()

时间:2019-07-06 11:03:04

标签: apache-spark hive apache-spark-sql hiveql

我正在尝试将增量数据推送到基本配置单元表中。为此,我将数据准备在登台数据库中,并将其存储在基本表具有确切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中不起作用。 任何人都可以让我知道在这种情况下如何交换分区吗?

1 个答案:

答案 0 :(得分:1)

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