2014-05-09 4 views
0

날짜, ID, eventDate 형식의 데이터가 있습니다. 이제 ID는 중복 될 수 있습니다. 우리는 0 < = eventdate -date < = 6 인 행만 선택해야합니다. 하나의 id에 대해서만 하나의 행이 있어야합니다. 각 ID의 이벤트 날짜는 일정합니다.돼지의 특정 기준에 따라 중복 ID 제거

날짜 기본적 걸쳐 일년에 네 주 연속

예 대답이 각각

01-03-2014, 33578, 01-03-2014 
08-03-2014, 57689, 10-03-2014 
15-03-2014, 67890, 21-03-2014 

하나 개의 행이 될 것

01-03-2014, 33578, 01-03-2014 
08-03-2014, 57689, 10-03-2014 
15-03-2014, 67890, 21-03-2014 
15-03-2014, 57689, 10-03-2014 
22-03-2014, 33578, 01-03-2014 
22-03-2014, 67890, 21-03-2014 
22-03-2014, 33578, 01-03-2104 
22-03-2014 67890, 21-03-2014 

처럼 돼지 읽기하고있는 데이터는 id는 위의 논리를 기반으로합니다.

+0

0 <= eventdate -date <= 6은 둘 이상의 행을 제공 할 수 있습니까? –

+0

아니요, 주 첫날에만 주 데이터 만 있으면됩니다. 따라서 하나의 행만됩니다. – user1548157

답변

0

각 ID에 대해 행이 하나만있는 경우 조건 0<=eventdate -date <=6 인 단순 필터를 사용하지 않는 이유는 무엇입니까?

편집 : 확실 해요 누군가는 '마법 UDF 기능'으로 더 잘 할 수 있지만 BuildIn 기능으로는 다음과 같이 수 : 하나 개의 행을 제공하여

a = load 'stack.txt' using PigStorage(',') as (date : chararray, id:chararray, eventdate:chararray); 
b = foreach a 
    { 
    date_yyyy = SUBSTRING(date,8,10); 
    date_mm = SUBSTRING(date,3,5); 
    date_dd = SUBSTRING(date,0,2); 
    eventdate_yyyy = SUBSTRING(TRIM(eventdate),8,10); 
    eventdate_mm = SUBSTRING(TRIM(eventdate),3,5); 
    eventdate_dd = SUBSTRING(TRIM(eventdate),0,2); 
    int_date = (int)(CONCAT(CONCAT(date_yyyy,date_mm),date_dd)); 
    int_eventdate = (int)(CONCAT(CONCAT(eventdate_yyyy,eventdate_mm),eventdate_dd)); 
    generate date, id, eventdate, CONCAT(CONCAT(eventdate_yyyy,eventdate_mm), eventdate_dd), int_eventdate - int_date as diff; 
    }; 
c = FILTER b by (diff >= 0 and diff <= 6); 

여전히 미해결 문제 각각의 이드는 (diff >= 0 and diff <= 6) 상태가되지 않습니다.
나는 곧 대답을 얻습니다. 중복 ID를 위해 어떤 행을 취해야합니까?

+0

감사합니다. @Pawel. 그래, 문제는 필터링 기준 eventdate - date <= 6은 중복 ID의 경우 작동합니다 (1 일과 8 일에 동일한 ID 방문 인 경우). 그러나 ID의 중복이 없다면 나는 존재하는 유일한 행을 고르고 싶습니다. 01-03-2014, 478, 21-03-2014처럼 자,이 478 ID는 다른 곳에서 발생하지 않으며,이 행을 결과 집합에 포함 시키길 원합니다. – user1548157

+0

id에 대한 레코드가 기준 eventdate - date <= 6을 충족시키지 못하고 각 ID에 대해 하나 이상의 레코드가 남아 있으면 어떻게됩니까? 어느 것을 골라야합니까? 그리고 처리 할 레코드의 수는 얼마입니까? –

+0

많은 감사. 나는 나와 함께 UDFS를 가지고있다. 미안하지만 일찍 알려 줬어야 했어. 나는 구체적으로 무엇이 좋은 상태인지를보고있다. 가능한 일요일에 4-5 일요일 만 갖습니다. 그러나 ID는이 날짜에 중복되거나 고유 할 수 있습니다. 우리는 기본적으로 eventday 전에 가장 가까운 일요일 행을 선택해야합니다. 따라서 ID가 01-03-2014 일회에 한 번만 표시되고 이벤트 일은 22-03-2014로 표시되면 해당 ID가 고려됩니다. 그러나 ID가 나중에 8, 15 또는 22에 중복되면 그 특정 날짜가 선택되었을 것입니다. – user1548157

관련 문제