gpt4 book ai didi

hive - 带有比较运算符的 `where` 中的子查询

转载 作者:行者123 更新时间:2023-12-04 18:41:39 25 4
gpt4 key购买 nike

假设我有一个由 dt 分区的大表 field 。我想在特定日期之后查询此表的数据。例如。

select * from mytab where dt >= 20140701;

棘手的部分是 日期 不是常数,而是 来自子查询 .所以基本上我想要这样的东西:
select * from mytab where dt >= (select min(dt) from activedates);

然而,Hive 做不到,给我 ParseException在子查询上(从文档我猜它只是不支持)。

那么如何基于动态子查询限制我的查询呢?

请注意,性能是这里的关键。所以越快越好,即使它看起来更丑。

还要注意,我们还没有切换到 Hive 0.13,所以没有 in 的解决方案查询优先。

最佳答案

Hive 在构建执行计划时决定分区修剪,因此必须具有 max(dt) 的值。在执行之前。

目前完成这样的事情的唯一方法是将查询分成两部分,第一部分是 select min(dt) from activedates ,其结果将被放入一个变量中。
第二个查询将是:select * from mytab where dt >=${hiveconf:var} .

现在这有点棘手。
您可以像这样对 OS 变量执行第一个查询:

a=`hive -S -e "select min(dt) from activedates"`

然后像这样运行第二个查询:
hive -hiveconf var=$a -e "select * from mytab where dt >=${hiveconf:var}"

或事件只是:
hive -e "select * from mytab where dt >=$a"

或者,如果您使用其他脚本语言,您可以替换代码中的变量。

关于hive - 带有比较运算符的 `where` 中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24630618/

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