如何在 Impala 表中插入无穷大

Posted

技术标签:

【中文标题】如何在 Impala 表中插入无穷大【英文标题】:How to insert infinity in Impala Table 【发布时间】:2017-07-28 06:32:42 【问题描述】:

如何在 Impala 中插入 Infinity 和 NaN。相同的测试适用于 Hive,但在 Impala 中抛出错误。

> create table z2 (x double);
> insert into z2 values (1),("NaN"),("Infinity"),("-Infinity");
Query: insert into z1 values (1),("NaN"),("Infinity"),("-Infinity")
ERROR: AnalysisException: Incompatible return types 'TINYINT' and 'STRING' of 
exprs '1' and ''NaN''.

谁能告诉我如何为 Impala 解决这个问题。

【问题讨论】:

【参考方案1】:

基于Impala Mathematical Functions,您缺少CAST(x AS DOUBLE)

Infinity 和 NaN 可以在文本数据文件中分别指定为 inf 和 nan,Impala 将它们解释为这些特殊值。它们也可以由某些算术表达式产生;例如,1/0 返回 Infinity,pow(-1, 0.5) 返回 NaN。或者您可以转换文字值,例如 CAST('nan' AS DOUBLE) 或 CAST('inf' AS DOUBLE)。

所以你的插入应该是:

> insert into z2 values (1), (CAST ('nan' AS DOUBLE)), 
  (CAST ('inf' AS DOUBLE)), (- CAST ('inf' AS DOUBLE));

然后你会看到:

> select * from z2;
+-----------+
| x         |
+-----------+
| 1         |
| NaN       |
| Infinity  |
| -Infinity |
+-----------+
Fetched 4 row(s) in 0.12s

【讨论】:

以上是关于如何在 Impala 表中插入无穷大的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Impala 中插入 Array<Struct> 值?

使用java在impala表中插入数据

根据数据类型和列名在 impala 表中插入记录

使用 Ibis python 将数据插入到 impala 表中

如何查看 impala 表中的分区数

如何从impala中的表中删除列