Encontre o registro mais recente do TOP 10 para cada BUYER_ID da data de ontem

Esta é a tabela abaixo

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

E estes são os dados abaixo na tabela acima

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,

Se você ver os dados acima na tabela, existem apenas dois dados UNIQUEBUYER_ID e correspondente àqueles que tenhoITEM_ID ECREATED_TIME. Preciso de apenas 10 registros mais recentes sobre o horário do dia anterior à data de hoje sempre que eu estiver acionando essa consulta (ou seja, a data de ontem) para cadaBUYER_ID.

Então para issoBUYER_ID - 34512201 Eu preciso de 10 mais recorde para cadaBUYER_ID base emCREATED_TIME para a data de ontem apenas.

E cadaBUYER_ID pode ter dados de qualquer dia. Mas estou especificamente interessado por um dia antes dos dados de hoje (significa a data de ontem sempre) verificando noCREATED_TIME

EncontrarTOP 10 dados mais recentes para cadaBUYER_ID para a data de ontem. Abaixo está a saída de amostra que eu deveria estar correspondendo a cadaBUYER_ID.

Exemplo de saída.

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

Estou trabalhando comHive eHive suporta sintaxe semelhante a SQL. Portanto, preciso garantir que o SQL também funcione no ambiente do Hive.

Alguém pode me ajudar com isso?

Atualizar:-

Estou usando a consulta abaixo e preciso obter o top 10 mais recente da consulta abaixo e preciso adicionar mais um qualificador para verificação de data, significawhere clause for yesterday's date- eu não posso usarTOP 10 aqui como o Hive não suportaTOP 10 sintaxe sql. Eu preciso de outra maneira de fazer esse problema.

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

Mais uma atualização: -

Eu escrevi esta consulta abaixo com o uso deRANK 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;

E esta é a função UDF RANK em 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++;
        }
    }

E acima de consulta não é o trabalho do jeito que eu queria, algum tipo de torção tem que ser feito eu acho que nessa consulta.

Existe alguma maneira de fazer isso sem usar qualquer UDF no HiveQL?

questionAnswers(1)

yourAnswerToTheQuestion