Найдите ТОП 10 последних записей для каждого BUYER_ID за вчерашнюю дату

Это таблица ниже

CREATE TABLE IF NOT EXISTS TestingTable1 
( 
BUYER_ID BIGINT,
ITEM_ID BIGINT, 
CREATED_TIME STRING
)

И это ниже данные в приведенной выше таблице

BUYER_ID    |    ITEM_ID       |    CREATED_TIME
------------+------------------+-----------------------
1015826235      220003038067        2012-07-09 19:40:21,
1015826235      300003861266        2012-07-09 18:19:59,
1015826235      140002997245        2012-07-09 09:23:17,
1015826235      210002448035        2012-07-09 22:21:11,
1015826235      260003553381        2012-07-09 07:09:56,
1015826235      260003553382        2012-07-09 19:40:39,
1015826235      260003553383        2012-07-09 06:58:47,
1015826235      260003553384        2012-07-09 07:28:47,
1015826235      260003553385        2012-07-09 08:48:47,
1015826235      260003553386        2012-07-09 06:38:47,
1015826235      260003553387        2012-07-09 05:38:47,
1015826235      260003553388        2012-07-09 04:55:47,
1015826235      260003553389        2012-07-09 06:54:37,
34512201        597245693           2012-07-09 16:20:21,
34512201        8071787728          2012-07-09 15:19:59,
34512201        5868222883          2012-07-09 08:23:17,
34512201        2412180494          2012-07-09 22:21:11,
34512201        2422054205          2012-07-09 06:09:56,
34512201        1875744030          2012-07-09 19:40:39,
34512201        5639158173          2012-07-09 06:58:47,
34512201        5656232360          2012-07-09 07:28:47, 
34512201        959188449           2012-07-09 08:48:47,
34512201        4645350592          2012-07-09 06:38:47,
34512201        5657320532          2012-07-09 05:38:47,
34512201        290419656539        2012-07-09 04:55:47,

Если вы видите приведенные выше данные в таблице, есть только два уникальныхBUYER_ID и соответствует тем, у меня естьITEM_ID А ТАКЖЕCREATED_TIME, Мне нужно только 10 последних записей на основе времени за день до сегодняшней даты, когда я буду запускать этот запрос (имеется в виду вчерашняя дата) для каждогоBUYER_ID.

Так для этогоBUYER_ID - 34512201 Мне нужно 10 последних записей для каждогоBUYER_ID основа наCREATED_TIME только для вчерашней даты.

И каждыйBUYER_ID может иметь данные за любой день. Но я особенно заинтересован в данных за день до сегодняшнего дня (всегда означает вчерашнюю дату), проверив наCREATED_TIME

Find TOP 10 latest data for each BUYER_ID for yesterday's date. Below is the sample output I should be getting corresponding to each BUYER_ID.

Пример вывода.

BUYER_ID    |    ITEM_ID       |    CREATED_TIME
------------+------------------+-----------------------
34512201        2412180494          2012-07-09 22:21:11
34512201        1875744030          2012-07-09 19:40:39
34512201        597245693           2012-07-09 16:20:21
34512201        8071787728          2012-07-09 15:19:59
34512201        959188449           2012-07-09 08:48:47
34512201        5868222883          2012-07-09 08:23:17
34512201        5656232360          2012-07-09 07:28:47 
34512201        5639158173          2012-07-09 06:58:47
34512201        4645350592          2012-07-09 06:38:47
34512201        2422054205          2012-07-09 06:09:56
1015826235      210002448035        2012-07-09 22:21:11
1015826235      260003553382        2012-07-09 19:40:39
1015826235      220003038067        2012-07-09 19:40:21
1015826235      300003861266        2012-07-09 18:19:59
1015826235      140002997245        2012-07-09 09:23:17
1015826235      260003553385        2012-07-09 08:48:47
1015826235      260003553384        2012-07-09 07:28:47
1015826235      260003553381        2012-07-09 07:09:56
1015826235      260003553383        2012-07-09 06:58:47
1015826235      260003553389        2012-07-09 06:54:37

Я работаю сHive а такжеHive поддерживает синтаксис SQL. Поэтому мне нужно убедиться, что SQL также работает в среде Hive.

Кто-нибудь может мне с этим помочь?

Update:-

Я использую приведенный ниже запрос, и мне нужно получить топ-10 самых последних из нижеприведенного запроса и мне нужно добавить еще один классификатор для проверки даты, то есть вwhere clause for yesterday's date- я не могу использоватьTOP 10 здесь, поскольку Hive не поддерживаетTOP 10 Синтаксис SQL. Мне нужен какой-то другой способ решить эту проблему.

SELECT * FROM TestingTable1 WHERE ORDER BY buyer_id, created_time DESC;

One More UPDATE:-

Я написал этот запрос ниже с использованиемRANK UserDefinedFunction.

SELECT buyer_id, item_id, created_time, rk
FROM (
    SELECT buyer_id, item_id, rank(item_id) as rk, created_time
    FROM testingtable1
    DISTRIBUTE BY buyer_id, item_id
    SORT BY buyer_id, item_id, created_time desc
) a 
WHERE rk < 10
ORDER BY buyer_id, created_time, rk;

И это функции RANK UDF в Java-

package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;

    public final class Rank extends UDF{
        private int  counter;
        private String last_key;
        public int evaluate(final String key){
          if ( !key.equalsIgnoreCase(this.last_key) ) {
             this.counter = 0;
             this.last_key = key;
          }
          return this.counter++;
        }
    }

И вышеупомянутый запрос не работает так, как я хотел, нужно сделать какой-то поворот, я думаю, в этом запросе.

Is there any way to do this without using any UDF in HiveQL?

Ответы на вопрос(1)

Ваш ответ на вопрос