我有一个数据库,它有一个由其他视图创建的视图,而其他视图是由其他视图创建的(数据工程师创建的视图不是我)
在 hive 里我可以这样做,但速度很慢,所以我想用 Impala
select * from table limit 5;
在 Impala 我得到一个错误,尝试无效元数据和刷新没有运气。
"ERROR: AnalysisException: No matching function with signature: lower(BIGINT)."
为什么会这样?以前从未见过这种错误。有没有递归的方法?
show create table;
1条答案
按热度按时间jaql4c8m1#
首先,请注意hive和impala是不同的解决方案,具有不同的sql解析器,支持一组不同的函数和特性。在hive中有效的语法在impala中可能无效。impala可能不支持用hive定义的某些表格格式(例如orc或具有二进制列的parquet)。
在这个特定的例子中,hive文档似乎与impala文档匹配
lower()
(注意:检查您使用的版本)。但有一个大问题:
lower()
获取一个字符串并生成一个字符串。它不是一个数字函数。这听起来像是一个严重的错误,比如lower()
--将一些文本转换成小写--然后floor()
--获取等于或小于十进制值的整数值。与您所谓的数据工程师核实他/她正在尝试做什么,并确保视图得到了正确的测试(或者在进行更正之后得到了正确的测试)。hive显然应用了一些隐式类型转换,使查询能够运行,即使这样做毫无意义并产生愚蠢的结果。