如何使用Impala读取包含复杂类型的Hive视图?

Shi*_*kou 6 hive impala apache-spark

我有一些基于case classes处理和建模的数据,类case class中也可以有其他es,所以最终的表有复杂的数据struct,,array。使用案例类,我使用 .hive 将数据保存在配置单元中dataframe.saveAsTextFile(path)

这些数据有时会发生变化或需要具有不同的模型,因此对于每次迭代,我在表名称中使用后缀(some_data_v01、some_data_v03 等)。

我还使用 Impala 按计划在这些表上运行查询,因此为了不在每次保存新表时修改查询,我想使用一个在更改模型时始终更新的视图。

问题是我无法使用 Impala 创建view,因为表中数据的复杂性(嵌套复杂类型)。除了扩展复杂类型的大量工作之外,我还希望保留这些类型(大量嵌套、连接数组时的数据重复)。

一种解决方案是使用 Hive 创建视图,如下所示

create view some_data as select * from some_data_v01;
Run Code Online (Sandbox Code Playgroud)

但如果我这样做,当我想使用 Impala 的表时,

select * from some_data;
Run Code Online (Sandbox Code Playgroud)

甚至一些简单的东西,比如

select some_value_not_nested, struct_type.some_int, struct_type.some_other_int from some_data;
Run Code Online (Sandbox Code Playgroud)

错误如下:

AnalysisException:选择列表中的 Expr 'some_data_v01.struct_type' 返回复杂类型 'STRUCT< some_int:INT、some_other_int:INT、nested_struct:STRUCT<nested_int:INT、nested_other_int:INT>、last_int:INT>'。选择列表中只允许使用标量类型。

有什么方法可以访问此视图,或以其他方式创建它以使其工作?