我需要在配置单元查询的where子句中执行嵌套select。示例代码片段如下所示:;
选择*
从表
其中tau timestamp>(从表b中选择timestmp,其中id=“hourdim”)
这是可能的还是我做错了什么,因为我在运行上面的脚本时出错了?!
为了进一步说明我要做的事情,我发布了一个带有时间戳的cassandra键空间。定期(例如每小时)使用配置单元对这些统计信息进行汇总,汇总后的数据将与相应的小时分开存储。因此,当查询第二次运行(以及连续运行)时,查询应该只在新数据上运行(即,-timestamp>previous\u execution\u timestamp)。我试图通过将最新执行的时间戳存储在一个单独的配置单元表中,然后使用该值过滤掉原始的统计信息来实现这一点。
这能用Hive实现吗?!
3条答案
按热度按时间lfapxunr1#
看看问题背后的业务需求,您可能会通过使用hour对配置单元表进行分区来获得更有效的结果。如果可以使用这个因子作为分区键来编写数据,那么更新摘要的查询将更快,并且需要更少的资源。
当分区达到数百万的规模时,它们可能会失控,但这种情况似乎不会嘲笑这种限制。
m1m5dgzv2#
配置单元中不支持where子句中的子查询:https://cwiki.apache.org/confluence/display/hive/languagemanual+subqueries
但是,通常可以使用join语句来获得相同的结果:https://karmasphere.com/hive-queries-on-table-data#join_syntax
例如,此查询:
可以重写为:
mspsb9vt3#
如果你加入:
从表格A中选择*时间戳(从表格B中选择时间戳,其中id=“hourdim”)
说明:as>,<,=需要在右边有一个精确的数字,而这里我们得到的是多个值,这些值只能用'in'子句获取。