각 BUYER_ID을위한 TOP 10의 최신 기록을 찾기 그리고 이것은 위의 테이블 -에서 아래 데이터입니다이 아래 표</p> <pre><code>CREATE TABLE IF NOT EXISTS TestingTable1 ( BUYER_ID BIGINT, ITEM_ID BIGINT, CREATED_TIME STRING ) </code></pre> <p>어제 날짜
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,
당신은 위의 데이터를 참조하는 경우 이 테이블에는 UNIQUE BUYER_ID
이라는 두 개가 있으며 ITEM_ID
및 CREATED_TIME
인 테이블에 해당합니다. 각 BUYER_ID
에 대해이 쿼리 (어제의 날짜를 의미)를 실행할 때마다 오늘 날짜 이전의 시간에 최신 기록 기준 10 개가 필요합니다.
BUYER_ID
에 대한 -
34512201
나는 어제의 날짜
CREATED_TIME
각
BUYER_ID
기준으로 10 최신 기록을해야합니다.
각 BUYER_ID
은 모든 요일의 데이터를 가질 수 있습니다. 그러나 나는 어제 날짜 각 BUYER_ID
에 대한 TOP 10
최신 데이터를 찾기 CREATED_TIME
에서 확인하여 (항상 어제의 날짜를 의미합니다) 오늘날의 데이터 전날에 특히 관심이 있습니다. 아래는 각 BUYER_ID
에 해당하는 샘플 출력입니다.
샘플 출력. 내가 Hive
과 Hive
함께 일하고
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
구문과 같은 SQL을 지원합니다. 그래서 하이브 환경에서도 SQL이 제대로 작동하는지 확인해야합니다.
아무도 도와 줄 수 있습니까?
업데이트 : -
나는 아래의 쿼리를 사용하고 내가 최고 얻을 필요가 10 아래 쿼리에서 최신 날짜 확인을위한 또 하나의 한정자를 추가 할 필요는 where clause for yesterday's date
의미 - 나는 TOP 10
을 사용할 수 없습니다 여기서 하이브는 TOP 10
SQL 구문을 지원하지 않습니다. 이 문제를 해결하려면 다른 방법이 필요합니다.
SELECT * FROM TestingTable1 WHERE ORDER BY buyer_id, created_time DESC;
한 번 더 업데이트 : -
나는 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;
는 그리고 이것은 자바 -
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++;
}
}
에서 RANK의 UDF 기능입니다 그리고 난에 원하는 방식으로 작동하지 않는 쿼리 위, 트위스트 일종의 내가 그 쿼리에 맞춰 만들 수있다.
HiveQL에서 UDF를 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까?
사용중인 SQL 언어를 구체적으로 말해야합니다. – mawburn
나는 하이브 (Hive)와 함께 작업 중이며 하이브 (Hive)는 SQL과 유사한 구문을 지원하므로이 질문을 'SQL'이라고 표시한다. 나는 오라클 구문이 잘 작동 할 것이라고 생각한다. – ferhan
@ 보헤미안, 어떻게 생각하세요? – ferhan