каталог перезаписи вставки куста, сохраненный как столбцы, созданные паркетом с именами по умолчанию - PullRequest
0 голосов
/ 02 июля 2018

Если я выполню запрос на перезапись вставки улья, как показано ниже, для сохранения данных в формате паркета, то имя столбца по умолчанию будет _col0. Как я могу избежать этого и применять имена столбцов, которые есть в предложении select.

ВСТАВИТЬ ПЕРЕКРЫТУЮ КАТАЛОГ "НЕКОТОРЫЕ-МЕСТО" Хранится как паркет ВЫБЕРИТЕ имя ОТ сотрудника;

- полученный файл паркета создается с именем столбца «_col0» вместо «name»

есть ли способ преодолеть эту проблему путем передачи некоторых свойств в serde?

hive> select * from employee;
OK
employee.id     employee.name   employee.salary
100     john doe        99999
101     jane doe        88888


hive> insert overwrite directory '/tmp/empdata' stored as parquet select name from employee;

scala> spark.read.parquet("/tmp/empdata").printSchema
root
 |-- _col0: string (nullable = true)

1 Ответ

0 голосов
/ 11 июля 2018

Индексы столбцов работают нормально только в том случае, если оба определения таблицы в метастазе и схеме паркета точно совпадают или когда есть только дополнения в конце схемы. Принимая во внимание, что при использовании имен столбцов нет проблем с развитием схемы. Вот три случая, которые работают, когда hive.parquet.use-column-names = true и нарушают значение по умолчанию hive.parquet.use-column-names = false:

  • столбец добавляется в схему в metastore, но не существует в файле паркета.
  • столбец добавляется в файл паркета, но не существует в схеме в metastore.
  • порядок столбцов в схеме в metastore не совпадает с порядком в файле паркета.
...