Исправление хорошего SQL-запроса Hive, который выдает исключение синтаксического анализа в Spark SQL

#apache-spark #parsing #hive #hiveql

#apache-spark #синтаксический анализ #улей #hiveql

Вопрос:

Выполнение следующего запроса в Hive работает нормально:

 ALTER TABLE schema.the_table 
DROP IF EXISTS PARTITION (PARTITION_DATE<'2020-03-22')
  

Дата раздела — это строка типа, но это нормально. Цель состоит в том, чтобы удалить разделы старше определенной даты.

С другой стороны, тот же запрос, но используемый в Spark (2.1):

 val spark = SparkSession.builder.enableHiveSupport.getOrCreate
spark.sql("""
ALTER TABLE schema.the_table 
DROP IF EXISTS PARTITION (PARTITION_DATE<'2020-03-22')
""")
  

Выдает исключение синтаксического анализа

Пользовательский класс выдал исключение: org.apache.spark.sql.catalyst.parser.Исключение ParseException: ожидание несоответствующего ввода ‘<‘ {‘)’, ‘,’}( строка 1, поз. 82)

== SQL == ИЗМЕНИТЬ схему ТАБЛИЦЫ.the_table УДАЛИТЬ, ЕСЛИ СУЩЕСТВУЕТ РАЗДЕЛ (PARTITION_DATE<‘2020-03-22’)

Вопрос в том, где я могу найти символы, которые должны быть экранированы в Spark SQL, и есть ли какой-либо способ написать тот же запрос в Spark SQL, что и в Hive?

Комментарии:

1. Это известная ошибка в spark, и в настоящее время ее планируется исправить в версии 3.1.0. Проверьте JIRA здесь

2. @ShreyJakhmola пожалуйста, напишите комментарий в качестве ответа

Ответ №1:

Разделы Hive не могут быть удалены с помощью spark.sql начиная с версии Spark 3.0 из-за известной ошибки, и в настоящее время ее планируется исправить в версии 3.2.0. Проверьте JIRA Spark-JIRA.