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

时间:2018-02-19 14:24:25

标签: hadoop hive bigdata hql

我有两个HIVE表,我需要将列从表1 转换为布尔列到表2 。我发现的唯一功能是CAST,但仅在输入为数值的情况下才有效。例如,这返回“假”是正确的:

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

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

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

请您知道如何将STRING列转换为HIVE中的BOOLEAN列吗?

3 个答案:

答案 0 :(得分:2)

这是一个小解决方法,但它的工作原理。我使用了 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;

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

作为一个工作场所,我建议直接使用CASE将字符串转换为我们想要的布尔值:

CASE专栏     什么时候'真'然后才是真的     当'错'时那么错误     ELSE NULL END列