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 列
我有两个 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 列