[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.밀리 초 단위로 작업하려면 유닉스 타임 스탬프 기능을 사용하지 마십시오.
밀리 초 단위로 작업하려면 유닉스 타임 스탬프 기능을 사용하지 마십시오.
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;
from https://stackoverflow.com/questions/18737561/how-do-i-get-millisecond-precision-in-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS 대 LFS - Hadoop Dist. 파일 시스템은 로컬 파일 시스템에 구축됩니까? (0) | 2019.06.08 |
---|---|
[HADOOP] sqoop 메타 스토어를 바꾸는 방법? (0) | 2019.06.08 |
[HADOOP] 얀 컨테이너 이해 및 튜닝 (0) | 2019.06.08 |
[HADOOP] `ssc.fileStream ()`을 사용하여 마루 파일을 읽는 법? `ssc.fileStream ()`에 전달되는 타입은 무엇입니까? (0) | 2019.06.08 |
[HADOOP] hadoop이 큰 텍스트 파일을 나눈 다음 gzip을 사용하여 분할을 압축 할 수없는 이유는 무엇입니까? (0) | 2019.06.08 |