Hi Gianluca,
Thanks a lot for coming back to me on this. I just though of bringing in a simple example to demonstrate what we are trying to achieve.
SELECT * FROM SAMPLESTREAM EMIT CHANGES;
EMPID EMPNAME EMPCITY EMPDEPARTMENT
1 Peter London Dev
1 Sam London Dev
3 Nick London Dev
4 Arthur Oxford Test
4 Dave Oxford Test
5 Michelle Oxford Test
6 Ramesh Oxford Test
7 Mariam Oxford Test
what we want to achieve in a single KSQLDB table is:
ATTRIBUTE_TYPE ATTRIBUTE_NAME COUNTS
CITY London 3
CITY Oxford 5
DEP Dev 3
DEP Test 5
In a typical database env we will do
SELECT ‘CITY’ AS ATTRIBUTE_TYPE , EMPCITY AS ATTRIBUTE_NAME, COUNT() AS COUNTS FROM SAMPLESTREAM GROUP BY EMPCITY
UNION
SELECT ‘DEPT’ AS ATTRIBUTE_TYPE , EMPDEPARTMENT AS ATTRIBUTE_NAME, COUNT() AS COUNTS FROM SAMPLESTREAM GROUP BY EMPDEPARTMENT
I am bale to create two separate KSQL tables
CREATE TABLE CITY_COUNT
AS
SELECT ‘CITY’ AS ATTRIBUTE_TYPE
,EMPCITY AS ATTRIBUTE_NAME
,COUNT(*) AS COUNTS
FROM SAMPLESTREAM GROUP BY EMPCITY
EMIT CHANGES;
Results:
ATTRIBUTE_TYPE ATTRIBUTE_NAME COUNTS
CITY London 3
CITY Oxford 5
and
CREATE TABLE DEPT_COUNT
AS
SELECT ‘DEPT’ AS ATTRIBUTE_TYPE
,EMPDEPARTMENT AS ATTRIBUTE_NAME
,COUNT(*) AS COUNTS
FROM SAMPLESTREAM GROUP BY EMPDEPARTMENT
EMIT CHANGES;
Result:
ATTRIBUTE_TYPE ATTRIBUTE_NAME COUNTS
DEP Dev 3
DEP Test 5
Based on your suggestion not sure how can I create an aggregated stream from stream SAMPLESTEAM as when I try TO CREATE an aggregated stream using the query below:
CREATE STREAM CITY_COUNT_STREAM
AS
SELECT ‘CITY’ AS ATTRIBUTE_TYPE
,EMPCITY AS ATTRIBUTE_NAME
,COUNT(*) AS COUNTS
FROM SAMPLESTREAM GROUP BY EMPCITY
EMIT CHANGES;
I get the error
“Could not determine output schema for query due to error: Invalid result type. Your SELECT query produces a TABLE. Please use CREATE TABLE AS SELECT statement instead.”
Look forward to hearing from you.