Как использовать Impala для чтения представления Hive, содержащего сложные типы? - PullRequest
4 голосов
/ 26 марта 2019

У меня есть некоторые данные, которые обрабатываются и моделируются на основе case class es, и у классов также могут быть другие case class es, поэтому в итоговой таблице содержатся сложные данные, struct, array. Используя класс case, я сохраняю данные в улье, используя dataframe.saveAsTextFile(path).

Эти данные иногда изменяются или им нужна другая модель, поэтому для каждой итерации я использую суффикс в имени таблицы (some_data_v01, some_data_v03 и т. Д.).

У меня также есть запросы, которые выполняются по расписанию в этих таблицах с использованием Impala, поэтому, чтобы не изменять запрос каждый раз, когда я сохраняю новую таблицу, я хотел использовать представление, которое всегда обновляется всякий раз, когда я изменяю модель.

Проблема в том, что я не могу использовать Impala для создания view из-за сложной природы данных в таблицах (вложенные сложные типы). Помимо большой работы по расширению сложных типов, я хочу, чтобы эти типы были сохранены (много уровней вложенности, дублирование данных при объединении массивов).

Одним из решений было создание представления с использованием Hive, например:

create view some_data as select * from some_data_v01;

Но если я сделаю это, когда захочу использовать стол от Импалы,

select * from some_data;

или даже что-то простое, например

select some_value_not_nested, struct_type.some_int, struct_type.some_other_int from some_data;

ошибка следующая:

AnalysisException: Expr 'some_data_v01.struct_type' в списке выбора возвращает сложный тип 'STRUCT , last_int: INT>'. В списке выбора разрешены только скалярные типы.

Есть ли способ получить доступ к этому представлению или создать его каким-либо другим способом, чтобы он работал?

...