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

Hive: Covert String to Boolean

我有两个 HIVE table,我需要将 String 列从 table 1 转换为布尔值 列到 table 2。我发现的唯一函数是 CAST,但它仅在输入为数值时才有效。例如这个 return "false" 什么是正确的:

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

但我的来源是 STRING 列,它包含值 "false" 然后 cast 函数 return 以下结果对我来说是不正确的:

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

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

这是一个小变通办法,但它确实有效。我使用了 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;

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

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

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

案例列 当 'True' THEN 为真 当 'False' THEN 假 ELSE NULL END 列