限制JOIN中的数字或行数

时间:2014-04-17 23:09:32

标签: sql hive shark-sql

我正在尝试加入两个表

ON scores.updated_at_yyyy_mm = distributions.range_yyyy_mm

当然有效,但也可以根据' count'来限制分数表中返回的行数。在发行表中给出,遗憾的是我无法开始工作。我尝试了子查询,SELECT * FROM(SELECT) - 和 - JOIN(SELECT ...)。 理想情况下,我还可以随机抽取一些分数 - TABLESAMPLE(ROWS)来救援?

我已经看到了很多针对MS SQL和Oracle的解决方案,但是找不到Hive的任何东西(也许Hive 0.13可以做到这一点 - 但我还没有弄清楚如何升级底层Shark的Hive)。 / p>

在Hive(和Shark)中是否有可能这样的事情,或者我是否以完全错误的方式解决这个问题?非常感谢你的帮助!!

btw - 我在Apache Shark 0.9.1上,并按照指示在本地运行Shark(即不在Hadoop / Hive集群中)。我的表格如下

scores:                                       distributions:
user_id | updated_at_yyyy_mm | score |        range_yyyy_mm | count |
---------------------------------------       -----------------------
000001  | 2014-01            | 100   |          2014-01     |   2   |
000001  | 2014-02            | 103   |          2014-02     |   1   |
000001  | 2014-03            | 106   |          2014-03     |   3   |
000001  | 2014-04            | 102   |          2014-04     |   1   |
 ...    |   ...              | ...   |
000002  | 2014-01            | 107   |
000002  | 2014-02            | 104   |
000002  | 2014-03            | 105   |
000002  | 2014-04            | 105   |
 ...    |   ...              | ...   |
000003  | 2014-01            | 109   |
000003  | 2014-02            | 111   |
000003  | 2014-03            | 113   |
000003  | 2014-04            | 102   |
 ...    |   ...              | ...   |

这就是我想要的:

profiles:
user_id | updated_at_yyyy_mm | score |
--------------------------------------
000002  | 2014-01            | 107   |
000003  | 2014-01            | 109   |

000002  | 2014-02            | 104   |

000001  | 2014-03            | 106   |
000002  | 2014-03            | 105   |
000003  | 2014-03            | 113   |

000001  | 2014-04            | 102   |

1 个答案:

答案 0 :(得分:0)

在子查询中包装分配表,计算count或row_number,与分数连接并将row_number计算为rn(由updated_at_yyyy_mm分配),然后在上子查询过滤器结果行中:其中rn< = scores.cnt。