我有一种情况需要在mapreduce中复制SQL排名函数。 它类似于:QUALIFY Row_number()over(按a.column1分区顺序a.column2 desc,d.column3 desc)= 1
谢谢。
答案 0 :(得分:0)
它类似于:QUALIFY Row_number()over(partition by a.column1由a.column2 desc命令,d.column3 desc)= 1
对不起,我不太明白。你是想通过蜂巢还是MR来实现这个目的?你的问题是你通过MR需要它,但是你已经显示了这个查询。两者完全不同。
如果您想通过Hive实现此目的,您可能会发现此post非常有用。如果你想要这种MR方式,你需要从头开始编写代码。
HTH
答案 1 :(得分:0)
以下是使用普通查询复制Rank函数。
无论数据库如何,此查询都将执行。要求是根据文件名中的日期对文件名进行排名。
**Sample Records**:
`insert into ref values('840001','840001_2015_04_29');
insert into ref values('840002','840002_2015_04_29');
insert into ref values('840003','840003_2015_04_29');
insert into ref values('840004','840004_2015_04_29');
insert into ref values('840008','840008_2015_04_28');
insert into ref values('840009','840009_2015_05_02');
insert into ref values('850005','850010_2015_05_29');
insert into ref values('850005','850010_2015_05_23');
insert into ref values('850005','850010_2015_05_12');
insert into ref values('850005','850010_2015_05_17');
insert into ref values('850006','850010_2015_05_29');
insert into ref values('850006','850010_2015_05_23');
insert into ref values('850006','850010_2015_05_16');`
`**Table Structure**:
CREATE TABLE ref
(
ffid TEXT
,filename TEXT
);`
**Query**:
SELECT
S1.FFID
,S1.FILENAME
,(
SELECT COUNT(*) + 1
FROM
(SELECT DISTINCT FFID,FILENAME FROM REF) AS S2
WHERE S1.FFID=S2.FFID AND S1.FILENAME < S2.FILENAME
) AS RANK
FROM
(SELECT DISTINCT FFID,FILENAME FROM REF) AS S1
WHERE RANK=1
ORDER BY FFID ;
答案 2 :(得分:0)
排名很高:
rank() over (partition by a.column1 order by a.column2 desc, d.column3 desc)
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+WindowingAndAnalytics