Добавление столбца в улей не допускается из кода scala / spark - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь добавить столбец в таблицу Hive, если в исходных данных появились новые столбцы.Все обнаружение новых столбцов работает хорошо, однако, когда я пытаюсь добавить столбец в таблицу назначения, я получаю эту ошибку:

for (f <- df.schema.fields) {
  if ("[" + f.name + "]"==chk) {
    spark.sqlContext.sql("alter table dbo_nwd_orders add columns (" + f.name + " " + f.dataType.typeName.replace("integer", "int") + ")")
  }
}

Ошибка:

WARN HiveExternalCatalog: Could not alter schema of table  `default`.`dbo_nwd_orders` in a Hive compatible way. Updating Hive metastore in Spark SQL specific format
InvalidOperationException(message:partition keys can not be changed.)

Однако,если я поймаю сгенерированное предложение alter и выполню его из графического интерфейса куста (HUE), я могу добавить его без проблем.

alter table dbo_nwd_orders add columns (newCol int)

Почему это предложение действительно из графического интерфейса, а не из кода искры?

Большое спасибо.

1 Ответ

0 голосов
/ 08 июня 2018

Здесь уже было сказано несколько раз, но только для повторения - Spark не является интерфейсом Hive и не предназначен для полной совместимости с Hive с точки зрения языка (Spark ориентируется на стандарт SQL, Hive использует пользовательский язык запросов, похожий на SQL) или на возможности(Spark - это решение ETL, Hive - решение для хранилищ данных).

Даже макеты данных не полностью совместимы между этими двумя.

Spark с поддержкой Hive - это Spark с доступом к метасторью Hive, а неSpark, который ведет себя как Hive.

Если вам необходим доступ к полному набору функций Hive, подключитесь к Hive напрямую с собственным клиентом или собственным (не Spark) JDBC-соединением и используйте взаимодействие с ним оттуда.

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