来自视图的Impala分析异常

时间:2016-09-29 16:01:45

标签: sql hive impala

我有一个数据库,其中包含从其他视图创建的视图,这些视图是从其他视图创建的(数据工程师构建的视图不是我)

在Hive中,我可以做到这一点,但速度慢,所以我想使用Impala

select * from table limit 5; 

在Impala中我收到错误,尝试了无效的元数据并刷新没有运气。

"ERROR: AnalysisException: No matching function with signature: lower(BIGINT)."

这会发生什么原因?之前从未见过这种类型的错误。有没有办法递归地做到这一点?

show create table;

1 个答案:

答案 0 :(得分:0)

首先,请注意Hive和Impala是不同的解决方案,具有不同的SQL解析器,支持一组独特的功能和特性。在Hive中有效的语法在Impala中可能无效。 Impala 可能不支持使用Hive定义的某些表格式(例如ORC,或带有BINARY列的Parquet)

在这种特定情况下,Hive documentation似乎与Impala documentation功能lower() 匹配(警告:检查您正在使用的版本)

但是有一个很大的问题:lower()接受一个字符串并生成一个字符串。 这不是数字功能。这听起来像是一个严重的错误,比如混淆lower() - 将一些文本转换为小写 - 和floor() - 得到等于或小于十进制值的整数值。 / p>

与您所谓的数据工程师核实他/她正在尝试做什么,并确保视图已正确测试(或在进行更正后进行了适当的测试)。 Hive清楚地应用了一些允许查询运行的隐式类型转换,即使它没有任何意义并产生愚蠢的结果。