如何在mapreduce中实现SQL的秩函数?

如何在mapreduce中实现SQL的秩函数?,mapreduce,hive,rank,Mapreduce,Hive,Rank,我需要在mapreduce中复制SQL rank函数。 这与此类似:按a.column1顺序按a.column2 desc、d.column3 desc=1限定行数超额部分 多谢各位 这与此类似:通过 a、 按a.column2 desc,d.column3 desc=1排序的第1列 对不起,我不太明白。你是想通过hive还是MR来实现这一点?你的问题是你需要通过MR来实现,但你已经展示了这个查询。两者完全不同 如果您想通过Hive实现这一点,您可能会发现这很有用。如果您想要这种方式,您需要从头

我需要在mapreduce中复制SQL rank函数。 这与此类似:按a.column1顺序按a.column2 desc、d.column3 desc=1限定行数超额部分

多谢各位

这与此类似:通过 a、 按a.column2 desc,d.column3 desc=1排序的第1列

对不起,我不太明白。你是想通过hive还是MR来实现这一点?你的问题是你需要通过MR来实现,但你已经展示了这个查询。两者完全不同

如果您想通过Hive实现这一点,您可能会发现这很有用。如果您想要这种方式,您需要从头开始编写代码


下面给出的是使用普通查询复制秩函数

此查询将在不考虑数据库的情况下执行。要求根据文件名中的日期对文件名进行排序

**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 ;
等级是:

rank() over (partition by a.column1 order by a.column2 desc, d.column3 desc)

Hi Tariq,我可以在Hive中实现,但我们需要在Mapreduce中实现同样的功能。我的意思是,我们需要将Hive查询转换为Mapreduce,以向客户端显示Hive和Mapreduce的性能。