我有两个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列吗?
答案 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列