2017-11-14 9 views
2

GROUP BY을 통해 특정 열의 항목을 계산하는 대신 KSQL을 사용하는 대신 응용 프로그램을 통해 스트리밍되는 모든 항목에 대한 집계를 얻을 수 있습니까?KSQL로 모든 항목 계산하기

이 같은 뭔가를 찾고 있어요 :

| Count all | Count id1 | count id2 | 
| ---245----|----150----|----95-----| 

이상 KSQL이 같은 :

[some timestamp] | Count all | 245 
[some timestamp] | Count id1 | 150 
[some timestamp] | Count id2 | 95 
. 
. 
. 

당신에게
감사 - 팀을

+2

그래서 의사-SQL, FOO' FROM'SELECT COUNT (*), COUNT (DISTINCT ID1), COUNT (DISTINCT ID2)와 같은 뭔가? 그게 네가 쫓아 온거야? –

+0

예, 이것이 초기 아이디어였습니다. 그러나 최종 아이디어는 레코드의 전체 양을 단순히 계산하여 (*) 계산하는 것입니다. @Hojjat 대답은 완벽하게 잘 작동하는 것처럼 보입니다! –

답변

5

당신은 모두 수를 가질 수 없습니다 모두 동일한 쿼리에서 각 키의 개수입니다. 주어진 열의 각 값을 세는 데 하나씩, 주어진 열의 모든 값을 세는 데 두 개의 쿼리를 사용할 수 있습니다. 두 개의 열 col1 및 col2가있는 스트림이 있다고 가정합니다.

SELECT col1, count(*) FROM mystream1 GROUP BY col1; 

당신이 KSQL 항상 집계 GROUP BY 절을 필요로하기 때문에 두 개의 쿼리를 작성하는 데 필요한 모든 행을 계산하려면 : 는 다음 쿼리를 사용할 수있는 무한 창 크기와 COL1의 각 값을 계산합니다. 먼저 상수 값으로 새 열을 만든 다음 새 열에서 값을 계산할 수 있으며 상수이므로 개수가 모든 행 수를 나타냅니다. 다음은 그 예이다 :

CREATE STREAM mystream2 AS SELECT 1 AS col3 FROM mystream1; 
SELECT col3, count(*) FROM mystream2 GROUP BY col3; 
+0

완벽하게, 고마워, 두 번째 부분은 정확히 내가 무엇을 찾고 있었는지! 감사합니다 –

+1

키에 대해 하나의 값을 가진 높은 데이터 속도 집계가있는 주제가있을 경우 주제를 다시 분할하고 모든 메시지를 하나의 파티션으로 보내면 스케일링 문제가 발생할 수 있습니다. 따라서이 접근법을 사용할 때주의해야합니다. – Hojjat

+0

잘 알고있어, 정말 고마워. 이것은 주로 테스트에 사용되므로 운 좋게도 프로덕션 용도가 아닙니다. –