如何在检查条件时修复双精度和浮点类型的 Hive 查询问题(在转换时遇到问题)



我正在尝试运行一个基本的 hive 查询,该查询选择高于阈值的值。名为"corr_coeff"的列类型是浮点型,但是通过 hiveview2.0 或通过 zepelin(通过 JDBC 驱动器(的 hive 查询语言总是作为双精度通过我的相等性检查,并且我收到错误。

FilterPredicate 列:corr_coeff声明的类型 (java.lang.Double( 与文件元数据中的架构不匹配。列 corr_coeff 的类型为:浮点

我尝试为阈值设置一个新变量并强制转换它,但这也不起作用。

set PROB_THRESH=(cast 0.70 as float);
select corr_coeff FROM trends where trends.corr_coeff>PROB_THRESH;

然后我得到错误:

org.apache.hive.service.cli.HiveSQLException: 编译语句时出错: 失败: 语义异常 [错误 10004]: 第 1:54 行 无效的表别名或列引用 'PROB_THRESH':(可能的列名包括:索引、文件名、start_trnd、end_trnd、start_trnd_time、end_trnd_time、功能1、功能2 corr_coeff(

编辑:更新 8/21

所以我发现如果我将整个列最初转换为双精度型,它会起作用,但这是浪费资源。

set PROB_THRESH=0.70;
select corr_coeff FROM trends WHERE cast(trends.corr_coeff as double) >${hiveconf:PROB_THRESH};

我想要但总是失败的是将比较中的阈值转换为浮点数,因为 Hive 将变量初始化为双精度

use fca_analytics;
set PROB_THRESH=0.70;
select corr_coeff FROM trends WHERE trends.corr_coeff > cast(${hiveconf:PROB_THRESH} as float);

此操作失败:

FilterPredicate 列:corr_coeff声明的类型 (java.lang.Double( 与文件元数据中的架构不匹配。列 corr_coeff 的类型为:浮点型 此列的有效类型为:[class java.lang.Float]

PROB_THRESH是一个Hive变量。

Hive 变量使用以下语法引用,${hiveconf:myvariable}

因此,您的代码必须修改为,

set PROB_THRESH=0.70;
select corr_coeff FROM trends where trends.corr_coeff > ${hiveconf:PROB_THRESH};

您可以在 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution 上阅读有关 Hive 变量的更多信息

最新更新