我想使用Hive Query的count(*)结果作为第二个hive查询的输入。查询简化为:
set LIM = SELECT count(*) from default.mytable* 0.8;
select * from default.mytable LIMIT ${hiveconf:LIM};
上面的代码会导致错误,因为第一个查询没有被执行,并且LIM变量不会被数字值替换。
有没有办法强制Hive替换变量LIM,以便在第二个查询中有一个数值?
答案 0 :(得分:0)
##警告 - 详细解释如下;简短的回答是“没办法”##
就IT架构而言,这种技巧不是在数据库层中完成,而是在应用程序层中完成。
因为我不知道nuthin'关于你的Teradata堆栈(被一些讲法语的同事昵称为“taratata”)我将采用 Oracle堆栈作为示例。
A. 在PL / SQL块中,您可以将查询的(标量)结果检索到变量中,并在以后使用它 - 作为预准备语句中的输入绑定变量,或者作为动态构建要作为SQL查询动态解析的字符串的方法。 PL / SQL块是一个“应用程序”,具有任意复杂性的应用程序逻辑;它恰好在Oracle会话中运行,在同一个也运行数据库层的主机上运行。
B。在SQL * Plus客户端(以及可能兼容的工具,例如SQL Developer)中,您可以使用weird syntax来检索某种值宏变量,可用于在进一步的SQL查询中按原样填充值。这个技巧允许将一些粗略的“应用程序”逻辑应用于客户端的静态SQL脚本。但这显然是一种不可移植的技巧。
底线 - 由于Hive没有程序语言,并且可能(希望)从来没有过程,所以最好的方法就是开发自己的自定义Hive客户端一切都靠你自己,无论你想要什么样的商业逻辑。毕竟,全世界一定有成千上万的人正在开发使用JDBC访问Hive的Java代码,所以你不会孤单......
答案 1 :(得分:0)
嗯..如果你对写一个shell脚本很舒服,你可以这样做。 获取查询输出并将其存储到变量&将变量用于第二个查询。