gpt4 book ai didi

select - 如何在 HIVE 的 CASE 语句中使用 SET 列表变量

转载 作者:行者123 更新时间:2023-12-01 14:50:02 25 4
gpt4 key购买 nike

我遇到一个问题,我将一个值列表设置到一个变量中,然后我想在我的 CASE 语句中的 SELECT 语句中使用该列表,但由于某种原因,我不断收到错误。

Error while compiling statement: FAILED: ParseException line 3:38 cannot recognize input near 'IN' 'THEN' ''C'' in expression specification

例如

SET close=('a','b','c');
SET open=('x','y','z');
SELECT *,
CASE
WHEN test IN ${close} then 'c'
WHEN test IN ${open} then 'o'
END as case
FROM t1

我想知道是否有可能在 HIVE 查询中使用此逻辑。

欢迎任何帮助。

最佳答案

您正在以正确的方式定义变量,但是您所引用的变量不正确,这就是错误的原因。您需要使用 ${hiveconf:vairable_name}

引用变量

试试这个

SET close=('a','b','c');
SET open=('x','y','z');
SELECT *,
CASE
WHEN test IN ${hiveconf:close} then 'c'
WHEN test IN ${hiveconf:open} then 'o'
END as case
FROM t1

详细说明:

共有三个命名空间可用于保存变量。

  1. hiveconf - hive 以此开始,所有 hive 配置都作为此 conf 的一部分存储。最初变量替换不是配置单元的一部分,当它被引入时,所有用户定义的变量也作为它的一部分存储。这绝对不是一个好主意。因此又创建了两个命名空间。
  2. hivevar:存储用户变量
  3. system:存放系统变量。

这就是它的工作原理。

hiveconf 仍然是默认命名空间,因此如果您不提供任何命名空间,它会将您的变量存储在 hiveconf 命名空间中。

但是,当谈到引用变量时,情况并非如此。默认情况下,它指的是 hivevar 命名空间。令人困惑,对吧?从下面的例子中会更清楚。

未提供命名空间,变量 var 将存储在 hiveconf 命名空间中。

set var="default_namespace";

这将起作用,因为您指定了 hiveconf 命名空间

select ${hiveconf:var};

这会给您带来错误,因为如果未提供命名空间,它会检查 hivevar 命名空间。在 hivevar 中没有名称为 var

的变量
select ${var}; 

我们明确提供了hivevar命名空间

set hivevar:var="hivevar_namespace";

因为我们正在提供命名空间,所以这将起作用。

select ${hivevar:var}; 

并且由于在引用变量期间使用的默认工作区是 hivevar,因此以下内容也将起作用。

select ${var};

关于select - 如何在 HIVE 的 CASE 语句中使用 SET 列表变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com