Hive:将字符串转换为布尔值
Posted
技术标签:
【中文标题】Hive:将字符串转换为布尔值【英文标题】:Hive: Covert String to Boolean 【发布时间】:2018-02-19 14:24:25 【问题描述】:我有两个 HIVE 表,我需要将 String 列从 table 1 转换为 Boolean 列到 table 2时间>。我发现的唯一功能是 CAST 但它仅在输入为数值的情况下才有效。例如这返回“false”什么是正确的:
SELECT CAST(0 AS BOOLEAN); # Result is true
但我的来源是 STRING 列,它的值为“false”,然后 cast 函数返回以下结果,这对我来说是不正确的:
SELECT CAST("false" AS BOOLEAN); # Result is true
请问您知道在 HIVE 中如何将 STRING 列转换为 BOOLEAN 列的其他方法吗?
【问题讨论】:
【参考方案1】:这是一个小的解决方法,但它有效。我使用了 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;
【讨论】:
嗨,当我尝试这个时,我得到以下信息:FAILED: SemanticException [Error 10016]: Line 2:30 Argument type mismatch 'true': The expressions after WHEN should have the same type with that after CASE: "string" is expected but "boolean" is found
你知道避免这个错误的解决方法吗?【参考方案2】:
您不能将字符串转换为布尔值,但可以将布尔值转换为字符串(如 true -> '1';false -> '0')。如果你愿意,你也可以使用 if 子句。
select if(lower(bool_val_str)='true', true, false) from table;
【讨论】:
【参考方案3】:作为一种解决方法,我建议直接使用 CASE 将字符串转换为我们想要的布尔值:
案例列 当“真”时为真 当'假'然后假 ELSE NULL END 列
【讨论】:
以上是关于Hive:将字符串转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章