복붙노트

[HADOOP] 하이브에서 밀리 세컨드의 정밀도를 얻으려면 어떻게해야합니까?

HADOOP

하이브에서 밀리 세컨드의 정밀도를 얻으려면 어떻게해야합니까?

문서에서는 타임 스탬프가 다음 변환을 지원한다고 말합니다.

• 부동 소수점 숫자 유형 : 10 진수 정밀도의 UNIX 타임 스탬프 (초 단위)로 해석됩니다.

우선, 나는 이것을 해석하는 방법을 모르겠습니다. 2013-01-01 12 : 00 : 00.423의 타임 스탬프가있는 경우이 값을 밀리 초를 유지하는 숫자 유형으로 변환 할 수 있습니까? 그게 내가 원하는거야.

더 일반적으로, 나는 타임 스탬프와 같은 비교를 할 필요가있다.

select maxts - mints as latency from mytable

여기서 maxts와 mint는 타임 스탬프 열입니다. 현재,이 날 하이브 0.11.0 사용하여 NullPointerException 제공합니다. 내가 뭔가를하면 쿼리를 수행 할 수 있습니다.

select unix_timestamp(maxts) - unix_timestamp(mints) as latency from mytable

하지만 이것은 밀리 세컨드의 정밀도가 아닌 초 동안 만 작동합니다.

어떤 도움을 주셔서 감사합니다. 추가 정보가 필요한 경우 알려주십시오.

해결법

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

    1.밀리 초 단위로 작업하려면 유닉스 타임 스탬프 기능을 사용하지 마십시오.

    밀리 초 단위로 작업하려면 유닉스 타임 스탬프 기능을 사용하지 마십시오.

    hive> describe function extended unix_timestamp;
    unix_timestamp([date[, pattern]]) - Returns the UNIX timestamp
    Converts the current or specified time to number of seconds since 1970-01-01.
    

    대신 JDBC 호환 타임 스탬프를 double로 변환하십시오. 예 :

    주어진 탭 구분 데이터 :

    cat /user/hive/ts/data.txt :
    a   2013-01-01 12:00:00.423   2013-01-01 12:00:00.433
    b   2013-01-01 12:00:00.423   2013-01-01 12:00:00.733
    
    CREATE EXTERNAL TABLE ts (txt string, st Timestamp, et Timestamp) 
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY '\t'
    LOCATION '/user/hive/ts';
    

    그런 다음 startTime (st)과 endTime (et)의 차이를 밀리 초 단위로 쿼리 할 수 ​​있습니다.

    select 
      txt, 
      cast(
        round(
          cast((e-s) as double) * 1000
        ) as int
      ) latency 
    from (select txt, cast(st as double) s, cast(et as double) e from ts) q;
    
  2. from https://stackoverflow.com/questions/18737561/how-do-i-get-millisecond-precision-in-hive by cc-by-sa and MIT license