2017-09-18 6 views
0

SQL 결과 (Vertica)에서 히스토그램을 작성하려고합니다. WIDTH_BUCKET을 사용했습니다.SQL에서 히스토그램 작성

기본적으로 접근 방식은 각 이벤트에서 목표 값이 일치하는 event_X 및 event_Y의 타임 스탬프를 얻는 것입니다. 그런 다음 각 이벤트의 시간 소인을 차감합니다.

select _time, WIDTH_BUCKET(_time, 600, 86400, 100) as histogram 
    from(  
    select (a.ts - b.ts) as _time 
FROM table.e a, table.e b 
WHERE a.server_date between current_date - 60 and current_date -1 
AND a.event_name = 'event_X' 
AND b.event_name = 'event_Y' 
and ((a.ts - b.ts) > INTERVAL '5 minutes' and (a.ts - b.ts) < INTERVAL '24 hours') 
AND a.target = b.target 
)x 
group by 1 
order by 1 ASC 

그러나이 오류는 다음과 같이 반환됩니다.

ERROR: Function WIDTH_BUCKET(interval(in seconds), int, int, int) does not exist, or permission is denied for WIDTH_BUCKET(interval(in seconds), int, int, int) 

a.ts-b.ts는 ts가 시간 데이터 유형이므로 시간 소인의 구간 데이터 유형입니다. 왜이 오류가 발생하는지 알 수 없습니다.

누군가 내 SQL에 어떤 문제가 있는지 명확히 알 수 있다면 정말 감사하겠습니다.

+0

그냥 확신 할 수있는, 당신이 올바른 권한을 가지고 않습니다

TIMESTAMPDIFF(mi, b.ts, a.ts) > 10 

이 문서 - 대신 (b.ts a.ts)의 TIMESTAMPDIFF를 사용? – 0x11

+0

예. WIDTH_BUCKET을 사용하여 다른 쿼리를 실행했는데 성공했습니다. 그건 INTERVAL 값이 없었어요. 그냥 일반 숫자 값이 있습니다. 이 특정 쿼리는 위의 오류를 반환합니다. –

+0

내가 틀렸다고 정정하되,이 테이블에있는 다른 레코드에 대해'_time'이 다른 것이 아니겠습니까? 양동이는 레코드 당 다른 간격을 가질 수 없습니다. 맞습니까? – 0x11

답변