복붙노트

[HADOOP] 하이브 날짜 현명한 사진을 얻기 위해 가입

HADOOP

하이브 날짜 현명한 사진을 얻기 위해 가입

나는이 개 테이블 B에서 키와 날짜를 사용 HIVE에서 테이블과 조인시 테이블 A에서 해당 이전에 가장 가까운 날짜 기록을 가입하려합니다. 예를 들어 다음은 두 입력 테이블은

<----------TABLE A------------->            <------------TABLE B------------>
A_id    A_date      changed_col             B_id    B_date      B_value A_id
****    ******      ***********             ****    ******      ******* *****   
A01     2017-03-20      ABC                 B01     2017-04-02  200     A01
A01     2017-04-01      XYZ                 B01     2017-04-04  500     A01
A01     2017-04-05      LLL                 B02     2017-04-07  900     A02
A02     2017-04-06      KKK                 B02     2017-04-30  800     A02
A02     2017-04-12      JJJ

내가 표 A와 테이블 B에 가입하면 그러나, 동일한 키 (A_ID)에 대한 테이블 A에서 가장 가까운 가장 낮은 일을 찾아야한다. 아래는 예상 출력 테이블은 다음과 같습니다

B_id    B_date          A_id        A_date      changed_col   B_value
****    ******          ****        ******      ***********   *******
B01     2017-02-04      A01     2017-01-04      XYZ             200 
B01     2017-04-04      A01     2017-01-04      XYZ             500
B02     2017-04-07      A02     2017-04-06      KKK             900
B02     2017-04-30      A02     2017-04-12      JJJ             800

어떤 도움을 많이 감사합니다. 감사

해결법

  1. ==============================

    1.쿼리 나 자신을 알아 냈어

    쿼리 나 자신을 알아 냈어

    select * from 
    (select b.*, a.*,
    row_number() over (partition by b.a_id, b.b_date 
    order by b.b_date, datediff(to_date(b.b_date), to_date(a.a_date)) ) as rnk
    FROM b JOIN a 
    ON b.a_id= a.a_id 
    WHERE a.a_date <= b.b_date
    ) j1 where j1.rnk = 1
    
    B_id    B_date          B_value A_id            A_date      changed_col rnk   
    B01     2017-04-02      200     A01     A01     2017-04-01      XYZ     1
    B01     2017-04-04      500     A01     A01     2017-04-01      XYZ     1
    B02     2017-04-07      900     A02     A02     2017-04-06      KKK     1
    B02     2017-04-30      800     A02     A02     2017-04-12      JJJ     1
    

    당신은 순위를 포함하여 지금은 선택한 모든 A로부터 열 및 B를 들어 라인 (1)에서 필요한 열을 선택할 수 있습니다.

  2. ==============================

    2.그것은 위치를 지정 가능 수 문자열 기능을 사용하여 두 테이블에서 날짜에 조건.

    그것은 위치를 지정 가능 수 문자열 기능을 사용하여 두 테이블에서 날짜에 조건.

    여기서 a.substring (A_date, 1,7) = b.substring (B_DATE, 1,7)

    당신이이 곳 절에 추가 조건을 추가 할 수 있으며 필요한 종료 날짜의 사양에 따라.

  3. from https://stackoverflow.com/questions/43460773/hive-join-to-get-the-date-wise-picture by cc-by-sa and MIT license