写在蜂巢where子句嵌套select语句(Write a nested select statem

2019-09-22 12:33发布

我有一个要求,做一个蜂巢查询where子句中嵌套查询。 样品代码段将是如下:

选择 *
从表A
其中TA_timestamp>(来自表B选择TIMESTMP其中id = “hourDim”)

这是可能的还是我在这里做得不对,因为我运行上面的脚本,同时得到一个错误?!

要什么我试图做进一步的阐述,有卡桑德拉密钥空间,我发布一个时间戳的统计数据。 周期性地(每小时例如)此统计数据将使用蜂巢,一旦总结了数据将被与对应小时分开存储进行总结。 ( - 时间戳> previous_execution_timestamp IE),所以当查询第二次(和连续运行)运行查询只应在新的数据上运行。 我想通过存储在一个单独的蜂巢表最新的执行时间戳要做到这一点,然后使用该值筛选出的原始统计数据。

这能实现这一点使用蜂巢?!

Answer 1:

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)


Answer 2:

纵观业务需求的潜在问题,它发生,你可能会使用小时你的分区表蜂房得到更有效的结果。 如果数据可以被写入到使用此因素作为分区键,然后将查询到更新汇总会更快,需要更少的资源。

分区可以失控,当他们达到了数百万人的规模,但这似乎不会去惹这个限制的情况下。



Answer 3:

如果你把它的工作:

SELECT * FROM表A其中TA_timestamp在(表B从选择TIMESTMP其中id = “hourDim”)

  • 说明:作为>,<,=需要在右侧一个确切的数字,而在这里我们得到这只能与“IN”子句采取多个值。


文章来源: Write a nested select statement with a where clause in Hive