2017-05-11 21 views
0

내 cassandra 데이터베이스에서 고유 한 clientid 수를 얻어야합니다.cassandra의 someKeySpace.someTable ...에서 count (distinct someColumn)를 어떻게 선택합니까?

SELECT COUNT(DISTINCT clientid) 
FROM somekeyspace.sometable 
WHERE transdate > '2017-05-06' 
     AND transdate < '2017-05-07' 
     AND locationid = 1; 

이 질문에 유래에 다른 사람이 게시되어 있습니다, 그러나 나는 좋은 답변을 얻을 수없는 것 : 나는 CQL 코드의 다음 조각이 작업을 수행 할 수 없습니다 알고있다. 이 문제를 UDF로 해결할 수 있습니까? 그렇다면 어떻게 될까요?

내가 가진 UDF 문제는 매개 변수로 값의 전체 열을 전달하는 방법을 모른다는 것입니다.

+0

테이블 스키마 란 무엇입니까? –

+0

기본 키 (clientid, locationID, transactionDetail) – J4ce

답변

0

"Spark 사용"과 올바른 캐시.

테이블을 반전시킬 수 있습니다. 테이블을 생성하고 클라이언트 ID를 저장하는 transdate에 키를 입력 한 다음 (transdate, clientid) 범위에서 yyyy-mm-dd를 모두 반복하고 count(*)을 함께 추가하십시오. 만약 당신이 아마 그때 5000 (또는 카운트 집계가 매우 비싸) 실 거예요 클라이언트 당 일일 clientids있다. yyyy-mm-ddThh:00:00처럼 시간이 초과되거나 더 많은 파티션 버킷을 추가하여 15 분 (15 분에 반올림)까지 처리 할 수 ​​있습니다.

위와 같이 할 수 있지만 이전 기록의 일일 합계를 미리 계산하고 저장하는 작업이 있으므로 "오늘"수만 비쌉니다. "오늘"카운트를 redis에 오버로드 할 수 있습니다 (일부 오류가 있으면 ok 하이퍼 로그 로그가 좋을 것입니다). 또는 너무 빠르며 끝날 때 플러시 할 수 있습니다.