我有一个数据库,其中包含从其他视图创建的视图,这些视图是从其他视图创建的(数据工程师构建的视图不是我)
在Hive中,我可以做到这一点,但速度慢,所以我想使用Impala
select * from table limit 5;
在Impala中我收到错误,尝试了无效的元数据并刷新没有运气。
"ERROR: AnalysisException: No matching function with signature: lower(BIGINT)."
这会发生什么原因?之前从未见过这种类型的错误。有没有办法递归地做到这一点?
show create table;
答案 0 :(得分:0)
首先,请注意Hive和Impala是不同的解决方案,具有不同的SQL解析器,支持一组独特的功能和特性。在Hive中有效的语法在Impala中可能无效。 Impala 可能不支持使用Hive定义的某些表格式(例如ORC,或带有BINARY列的Parquet)。
在这种特定情况下,Hive documentation似乎与Impala documentation功能lower()
匹配(警告:检查您正在使用的版本)。
但是有一个很大的问题:lower()
接受一个字符串并生成一个字符串。 这不是数字功能。这听起来像是一个严重的错误,比如混淆lower()
- 将一些文本转换为小写 - 和floor()
- 得到等于或小于十进制值的整数值。 / p>
与您所谓的数据工程师核实他/她正在尝试做什么,并确保视图已正确测试(或在进行更正后进行了适当的测试)。 Hive清楚地应用了一些允许查询运行的隐式类型转换,即使它没有任何意义并产生愚蠢的结果。