我要求在Hive查询的where子句中执行嵌套选择。示例代码段如下;
选择*
来自TableA
其中TA_timestamp> (从TableB中选择时间戳,其中id =“hourDim”)
这是可能的,还是我在这里做错了,因为我在运行上面的脚本时遇到错误?!
为了进一步阐述我想要做的事情,我发布了一个带有时间戳的cassandra键空间。定期(例如每小时)这个统计数据将使用配置单元进行汇总,一旦总结出数据将与相应的小时分开存储。因此,当查询第二次运行(和连续运行)时,查询应该仅对新数据运行(即 - 时间戳> previous_execution_timestamp)。我试图通过将最新执行的时间戳存储在单独的配置单元表中,然后使用该值来过滤掉原始统计数据。
使用配置单元可以实现这一点吗?!
答案 0 :(得分:5)
子查询 不支持: 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)
答案 1 :(得分:0)
查看问题所依据的业务需求,通过使用小时对Hive表进行分区,可能会获得更高效的结果。如果可以编写数据以使用此因子作为分区键,那么更新摘要的查询将更快,并且需要更少的资源。
当分区达到数百万的规模时,分区可能会失控,但这似乎是一个不会取消这种限制的情况。
答案 2 :(得分:0)
如果您输入:
选择* 来自TableA
在TA_timestamp所在的位置(从TableB中选择timestmp,其中id =“ hourDim”)