【问题标题】:Cast string as "Column Reference" in HIVE SQL在 HIVE SQL 中将字符串转换为“列引用”
【发布时间】:2019-08-09 03:09:04
【问题描述】:

我有一个查询,旨在使用绑定值从表中检索信息并测试是否有任何字段为 NULL。用户输入绑定值的列名,然后测试该列的任何 NULL 值。这是查询的简化版本:

SELECT
   CASE
      WHEN ISNULL(bind.value) 
      THEN 'PASS'
      ELSE 'FAIL'
   END AS Solution

我认为这一直返回“FAIL”,因为 ISNULL() 正在测试作为字符串输入的列。相反,我需要它来测试列中的字段,而不是包含列名称的字符串。无论如何要将此字符串转换为a列的引用或指针(我知道SQL没有指针而是类似指针的对象)?

注意:当我将 bind.value 替换为列名时,它会返回“PASS”。我真的在尝试尽可能保持动态,以便可以将它与其他表一起使用,而无需为我使用它的每个表编写新查询。

【问题讨论】:

    标签: sql hive hiveql


    【解决方案1】:

    很可能您传递的是空字符串而不是 NULL。

    空字符串''与Hive中的NULL不一样,为空字符串添加测试:

    SELECT
       CASE
          WHEN ISNULL(bind.value) OR cast(bind.value as string)='' THEN 'PASS'
          ELSE 'FAIL'
       END AS Solution
    

    【讨论】:

    • 不,正如注释中提到的,如果我直接传入列的名称(不使用绑定值),那么它就可以了。
    • 然后不带引号传递它。更好的展示你的代码,你怎么传???
    • 当用户输入绑定值时,它必须用引号括起来,这样才能读入带有别名的 SELECT 语句。我将列名“table.company_code”传入绑定值
    • 如果引用它将不起作用,因为如果引用它是一个字符串,而不是一个列。结束。
    • 你是 100% 正确的,这是我的问题。我试图弄清楚是否有一种方法可以“取消字符串化”并将其恢复为列引用。感谢您的意见。
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2014-05-17
    • 1970-01-01
    相关资源
    最近更新 更多