Spark SQL игнорирует значение фильтра динамического раздела - PullRequest
0 голосов
/ 21 февраля 2019

Проблема с Spark 2.4 на EMR 5.20 в AWS.

У меня есть строковый столбец как раздел, в котором есть значения даты.Моя цель - сделать так, чтобы максимальное значение этого столбца упоминалось как фильтр.Значения выглядят следующим образом 2019-01-01 на 1 января 2019 года.

В этом запросе я пытаюсь отфильтровать до определенного значения даты (который является строковым типом данных), и Spark заканчивает чтение всех каталогов, а не только в результате max(value).

spark.sql("select mypartitioncolumn, column1, column2 from mydatabase.mytable where mypartitioncolumn= (select max(mypartitioncolumn) from myothertable) group by 1,2,3 ").show

Однако в этом случае, если я жестко закодирую значение, он только читает соответствующий каталог.

spark.sql("select mypartitioncolumn, column1, column2 from mydatabase.mytable where mypartitioncolumn= '2019-01-01' group by 1,2,3 ").show

Почему Spark не распознает оба метода одинаково?Я удостоверился, что если я выполню запрос select max(mypartitioncolumn) from myothertable, он покажет то же значение, что и мой метод в жестком коде (а также тот же тип данных).

Я не могу найти в документации ничего, что отличало бы запросы к разделам от различий в типах данных.Я проверил, чтобы убедиться, что моя схема в исходной таблице и в качестве значения являются строковыми типами, а также попытался преобразовать мое значение в виде строки cast( (select max(mypartitioncolumn) from myothertable) as string), это не имеет никакого значения.

1 Ответ

0 голосов
/ 12 марта 2019

Обходной путь путем изменения конфигурации

sql("set spark.sql.hive.convertMetastoreParquet = false")

Документация Spark

"При чтении и записи в таблицы паркета Hast metastore Parquet SQL Spark будет пытаться использовать собственную поддержку Parquet вместо Hive SerDeдля повышения производительности. Это поведение контролируется конфигурацией spark.sql.hive.convertMetastoreParquet и включено по умолчанию. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...