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

yruzcnhs  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(999)

我有两个配置单元表,需要将字符串列从表1转换为布尔列,再转换为表2。我发现的唯一一个函数是cast,但它只在输入是数值的情况下工作。例如,此返回“false”正确的内容:

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

但我的源代码是字符串列,其中的值为“false”,然后cast函数返回以下对我不正确的结果:

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

请问您知道如何在配置单元中将字符串列转换为布尔列的其他方法吗?

mwngjboj

mwngjboj1#

作为一个工作区,我建议直接使用case将字符串转换为我们想要的布尔值:
“true”时为case列,“false”时为true,否则为null结束列

0ejtzxu1

0ejtzxu12#

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

sbtkgmzw3#

不能将字符串强制转换为布尔值,但可以将布尔值强制转换为字符串(如true->'1';假->“0”)。如果需要,还可以使用if子句。

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

相关问题