我有一个要求,做一个蜂巢查询where子句中嵌套查询。 样品代码段将是如下:
选择 *
从表A
其中TA_timestamp>(来自表B选择TIMESTMP其中id = “hourDim”)
这是可能的还是我在这里做得不对,因为我运行上面的脚本,同时得到一个错误?!
要什么我试图做进一步的阐述,有卡桑德拉密钥空间,我发布一个时间戳的统计数据。 周期性地(每小时例如)此统计数据将使用蜂巢,一旦总结了数据将被与对应小时分开存储进行总结。 ( - 时间戳> previous_execution_timestamp IE),所以当查询第二次(和连续运行)运行查询只应在新的数据上运行。 我想通过存储在一个单独的蜂巢表最新的执行时间戳要做到这一点,然后使用该值筛选出的原始统计数据。
这能实现这一点使用蜂巢?!
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)
纵观业务需求的潜在问题,它发生,你可能会使用小时你的分区表蜂房得到更有效的结果。 如果数据可以被写入到使用此因素作为分区键,然后将查询到更新汇总会更快,需要更少的资源。
分区可以失控,当他们达到了数百万人的规模,但这似乎不会去惹这个限制的情况下。
如果你把它的工作:
SELECT * FROM表A其中TA_timestamp在(表B从选择TIMESTMP其中id = “hourDim”)
- 说明:作为>,<,=需要在右侧一个确切的数字,而在这里我们得到这只能与“IN”子句采取多个值。