복붙노트

[HADOOP] 날짜 / 시간 범위에 대한 쿼리 하이브 분할 테이블

HADOOP

날짜 / 시간 범위에 대한 쿼리 하이브 분할 테이블

내 하이브 테이블은 년, 월, 일, 시간으로 분할됩니다.

이제 2014-05-27에서 2014-06-05까지 데이터를 가져오고 싶습니다. 어떻게 할 수 있습니까 ??

나는 하나의 옵션이 에포크 (또는 yyyy-mm-dd-hh)와 질의 전달 에포크 시간에 파티션을 생성하는 것을 안다. 날짜 계층 구조를 잃어 버리지 않고 할 수 있습니까 ??

테이블 구조

CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int)
PARTITIONED BY (year int, month int, day int, hour int) 
STORED AS TEXTFILE;

해결법

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

    1.이것은 우리가 하이브에있는 테이블을 쿼리하는 동안 매일 직면하는 유사한 시나리오입니다. 귀하의 설명과 비슷한 방식으로 테이블을 분할했으며, 쿼리하는 경우 많은 도움이되었습니다. 이것이 우리가 파티션하는 방법입니다.

    이것은 우리가 하이브에있는 테이블을 쿼리하는 동안 매일 직면하는 유사한 시나리오입니다. 귀하의 설명과 비슷한 방식으로 테이블을 분할했으며, 쿼리하는 경우 많은 도움이되었습니다. 이것이 우리가 파티션하는 방법입니다.

    CREATE TABLE IF NOT EXISTS table1 (col1 int, col2 int)
    PARTITIONED BY (year bigint, month bigint, day bigint, hour int) 
    STORED AS TEXTFILE;
    

    파티션의 경우 다음과 같은 값을 할당합니다.

    year = 2014, month = 201409, day = 20140924, hour = 01
    

    이렇게하면 쿼리가 정말 간단 해지며 직접 쿼리 할 수 ​​있습니다.

    select * from table1 where day >= 20140527 and day < 20140605 
    

    희망이 도움이

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

    2.이렇게 쿼리 할 수 ​​있습니다.

    이렇게 쿼리 할 수 ​​있습니다.

      WHERE st_date > '2014-05-27-00' and end_date < '2014-06-05-24' 
    

    그 결과가 사소한 경우에도 '2014-04-04'는 항상 '2014-04-03'보다 커질 수 있기 때문에 원하는 결과를 제공해야합니다.

    내 샘플 테이블에서 실행하고 완벽하게 잘 작동합니다.

  3. from https://stackoverflow.com/questions/24445696/query-hive-partitioned-table-over-date-time-range by cc-by-sa and MIT license