我有一个名为“客户”的主题,并且为此创建了一个流
CREATE STREAM customers_stream (customerId INT, isActive BOOLEAN)
WITH (KAFKA_TOPIC='customers', VALUE_FORMAT='json');
我的customers
主题的生产者正在生成一个Integer密钥和一个json值。但是当我看到行键被设置为某个二进制值
ksql> print 'customers';
Format:JSON
{"ROWTIME":1570305904984,"ROWKEY":"\u0000\u0000\u0003�","customerId":1001,"isActive":true}
{"ROWTIME":1570307584257,"ROWKEY":"\u0000\u0000\u0003�","customerId":1002,"isActive":true}
现在,如果我创建一个表,它将导致一行(也许因为行键是相同的?)
CREATE TABLE customers (customerId INT, isActive BOOLEAN)
WITH (KAFKA_TOPIC='customers', KEY='customerId',VALUE_FORMAT='json');
搜索完网络后,我碰到了这篇文章https://www.confluent.io/stream-processing-cookbook/ksql-recipes/setting-kafka-message-key,并通过重新分配键来创建了一个新流
CREATE STREAM customers_stream2 AS \
SELECT * FROM customers_stream \
PARTITION BY customerId;
那么我该如何创建一个具有最新客户数据值的表?
从流创建表会导致错误
CREATE TABLE customers_2_table_active AS
SELECT CUSTOMERID,ISACTIVE
FROM customers_stream2;
Invalid result type. Your SELECT query produces a STREAM. Please use CREATE STREAM AS SELECT statement instead.
我需要各个行的最新值,以便另一个微服务可以查询新表。
提前谢谢
答案 0 :(得分:1)
重命名似乎是正确的方法,但是,不能将STREAM
直接转换为TABLE
。
请注意,将您重新键入密码的流customers_stream2
写入了相应的主题。因此,您应该能够从流的主题中创建新的TABLE
,以获取每个键的最新值。