0

我正在尝试加入两个表

ON scores.updated_at_yyyy_mm = distributions.range_yyyy_mm

这当然有效,但也根据分布表中给出的“计数”限制从分数表返回的行数,不幸的是我无法开始工作。我尝试了子查询,包括 - SELECT * FROM (SELECT) - 和 - JOIN(SELECT ...)。理想情况下,我还可以获得分数的随机样本 - TABLESAMPLE ( ROWS) 来救援?

我已经看到了很多 MS SQL 和 Oracle 的解决方案,但找不到任何适用于 Hive 的解决方案(也许 Hive 0.13 可以做到这一点 - 但我还没有弄清楚如何升级作为 Shark 底层的 Hive)。

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

顺便说一句 - 我在 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   |
4

1 回答 1

0

在子查询中包装分布表,计算计数或行数,加入分数并将行数计算为 rn(由 updated_at_yyyy_mm 分布),然后在上部子查询过滤结果行中:其中 rn<=scores.cnt。

于 2014-05-08T08:25:49.293 回答