hadoop—在配置单元中编写一个带有where子句的嵌套select语句

w8rqjzmb  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(324)

我需要在配置单元查询的where子句中执行嵌套select。示例代码片段如下所示:;
选择*
从表
其中tau timestamp>(从表b中选择timestmp,其中id=“hourdim”)
这是可能的还是我做错了什么,因为我在运行上面的脚本时出错了?!
为了进一步说明我要做的事情,我发布了一个带有时间戳的cassandra键空间。定期(例如每小时)使用配置单元对这些统计信息进行汇总,汇总后的数据将与相应的小时分开存储。因此,当查询第二次运行(以及连续运行)时,查询应该只在新数据上运行(即,-timestamp>previous\u execution\u timestamp)。我试图通过将最新执行的时间戳存储在一个单独的配置单元表中,然后使用该值过滤掉原始的统计信息来实现这一点。
这能用Hive实现吗?!

lfapxunr

lfapxunr1#

看看问题背后的业务需求,您可能会通过使用hour对配置单元表进行分区来获得更有效的结果。如果可以使用这个因子作为分区键来编写数据,那么更新摘要的查询将更快,并且需要更少的资源。
当分区达到数百万的规模时,它们可能会失控,但这种情况似乎不会嘲笑这种限制。

m1m5dgzv

m1m5dgzv2#

配置单元中不支持where子句中的子查询:https://cwiki.apache.org/confluence/display/hive/languagemanual+subqueries
但是,通常可以使用join语句来获得相同的结果:https://karmasphere.com/hive-queries-on-table-data#join_syntax
例如,此查询:

SELECT a.KEY, a.value
   FROM a
   WHERE a.KEY IN
   (SELECT b.KEY FROM B);

可以重写为:

SELECT a.KEY, a.val
   FROM a LEFT SEMI JOIN b ON (a.KEY = b.KEY)
mspsb9vt

mspsb9vt3#

如果你加入:
从表格A中选择*时间戳(从表格B中选择时间戳,其中id=“hourdim”)
说明:as>,<,=需要在右边有一个精确的数字,而这里我们得到的是多个值,这些值只能用'in'子句获取。

相关问题