Hive:将字符串转换为布尔值

Posted

技术标签:

【中文标题】Hive:将字符串转换为布尔值【英文标题】:Hive: Covert String to Boolean 【发布时间】:2018-02-19 14:24:25 【问题描述】:

我有两个 HIVE 表,我需要将 String 列从 table 1 转换为 Boolean 列到 table 2时间>。我发现的唯一功能是 CAST 但它仅在输入为数值的情况下才有效。例如这返回“false”什么是正确的:

SELECT CAST(0 AS BOOLEAN); # Result is true

但我的来源是 STRING 列,它的值为“false”,然后 cast 函数返回以下结果,这对我来说是不正确的:

SELECT CAST("false" AS BOOLEAN); # Result is true

请问您知道在 HIVE 中如何将 STRING 列转换为 BOOLEAN 列的其他方法吗?

【问题讨论】:

【参考方案1】:

这是一个小的解决方法,但它有效。我使用了 case 函数。样本:

# Create TMP_TABLE1
CREATE TEMPORARY TABLE  my_db.TMP_TABLE1
(   
    bool_val_str STRING
);

# Create TMP_TABLE2
CREATE TEMPORARY TABLE  my_db.TMP_TABLE2
(   
    bool_val_bool BOOLEAN
);

# Insert values into TMP_TABLE1
INSERT INTO my_db.TMP_TABLE1 VALUES ("false"),("False"),("FALSE"),("true"),("True"),("TRUE");

# ===========================================================
# THE CONVERSION IS HERE:
# Insert values into TMP_TABLE2 with conversion to boolean
# ===========================================================
INSERT INTO my_db.TMP_TABLE2 
(
    bool_val_bool
) 
    SELECT 
        CASE lower(bool_val_str) WHEN "true" THEN true WHEN "false" THEN false ELSE NULL END
    FROM 
         my_db.TMP_TABLE1;

【讨论】:

嗨,当我尝试这个时,我得到以下信息:FAILED: SemanticException [Error 10016]: Line 2:30 Argument type mismatch 'true': The expressions after WHEN should have the same type with that after CASE: "string" is expected but "boolean" is found你知道避免这个错误的解决方法吗?【参考方案2】:

您不能将字符串转换为布尔值,但可以将布尔值转换为字符串(如 true -> '1';false -> '0')。如果你愿意,你也可以使用 if 子句。

select if(lower(bool_val_str)='true', true, false) from table;

【讨论】:

【参考方案3】:

作为一种解决方法,我建议直接使用 CASE 将字符串转换为我们想要的布尔值:

案例列 当“真”时为真 当'假'然后假 ELSE NULL END 列

【讨论】:

以上是关于Hive:将字符串转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用javascript将字符串数组转换为布尔值? [复制]

TypeScript:将布尔值转换为字符串值

将字符串转换为布尔值[重复]

Ruby:如何将字符串转换为布尔值

PL/SQL 将字符串转换为布尔值

Python:将字符串列表转换为布尔值,其中布尔值以字符串形式存在[重复]