2017-11-02 16 views
0

저는 Presto와 Zeppelin을 사용하고 있습니다. 원시 데이터가 많이 있습니다. 그 데이터를 요약해야합니다.시간 열을 5 초 간격으로 그룹화하고 Presto를 사용하여 행 수를 계산하는 방법은 무엇입니까?

5 초마다 시간을 분류하고 싶습니다.

serviceType  logType  date 
------------------------------------------------------ 
service1   log1  2017-10-24 23:00:23.206 
service1   log1  2017-10-24 23:00:23.207 
service1   log1  2017-10-24 23:00:25.206 
service2   log1  2017-10-24 23:00:24.206 
service1   log2  2017-10-24 23:00:27.206 
service1   log2  2017-10-24 23:00:29.302 

다음 결과

serviceType  logType  date      cnt 
-------------------------------------------------------------- 
service1   log1  2017-10-24 23:00:20   2 
service2   log1  2017-10-24 23:00:20   1 
service1   log1  2017-10-24 23:00:25   1 
service1   log2  2017-10-24 23:00:25   2 

첫째, 나는 새 테이블에 저장 datas를 마이그레이션해야합니다.

초, 데이터를 그룹화하고 새 테이블에 실시간으로 저장해야합니다.

SQL 스크립트를 작성하기가 어렵습니다.

도와주세요.

파이썬 인터프리터를 사용해야합니까?

답변

0

당신은 date_trunc

  • timestamp

    1. 폐기 밀리 초 부분 당신은 ts - interval '1' second * (second(ts) % 5)

    예 함께이 퍼팅으로 5 초로 밀리 초 부분없이 timestamp를 반올림 할 수 있습니다

    presto> SELECT ts_rounded, count(*) 
        -> FROM (
        ->  SELECT date_trunc('second', ts) - interval '1' second * (second(ts) % 5) AS ts_rounded 
        ->  FROM (VALUES timestamp '2017-10-24 23:01:20.206', 
        ->   timestamp '2017-10-24 23:01:23.206', 
        ->   timestamp '2017-10-24 23:01:23.207', 
        ->   timestamp '2017-10-24 23:01:26.206') AS t(ts) 
        ->) 
        -> GROUP BY ts_rounded ORDER BY ts_rounded; 
         ts_rounded  | _col1 
    -------------------------+------- 
    2017-10-24 23:01:20.000 |  3 
    2017-10-24 23:01:25.000 |  1 
    (2 rows)