【问题标题】:ksql: create table and filter today's data based on timestampksql:根据时间戳创建表并过滤今天的数据
【发布时间】:2020-05-14 00:10:48
【问题描述】:

我对 KSQL 很陌生,只是想知道如何提取今天的数据进行聚合?假设我有以下架构的计数数据流:

Field     | Type
-----------------------------
 ROWTIME   | BIGINT
 ROWKEY    | VARCHAR(STRING)
 TS        | BIGINT
 COUNT     | BIGINT

如何创建一个表格来输出今天COUNT 总和的快照,其中TS 是使用 KSQL 的 UNIX 时间戳?

【问题讨论】:

    标签: apache-kafka ksqldb


    【解决方案1】:

    您可以使用TIMESTAMPTOSTRING udf 将TS 值更改为所需的日期格式,然后执行求和。这是执行此操作的一种方法:

    CREATE STREAM mystream1 AS SELECT TIMESTAMPTOSTRING(TS, 'yyyy-MM-dd') AS TS, COUNT_VAL FROM mystream;

    SELECT TS, sum(COUNT_VAL) FROM mystream1 GROUP BY TS;
    

    您可能想要重命名流中的 COUNT 列,因为它是 KSQL 中的函数名称。如果您想通过窗口执行此操作,也可以添加 WINDOW。

    【讨论】:

    • 现在我使用了以下命令:ksql> CREATE TABLE ATT_TS as SELECT TIMESTAMPTOSTRING(TS, 'yyyy-MM-dd'), SUM(counts) FROM counts_raw GROUP BY TIMESTAMPTOSTRING(TS, 'yyyy-MM-dd'); 但是当我执行ksql> select * from ATT_TS; Exception in thread "ksql_query_1-bc21f435-0a92-4bdc-8a2c-d11ba4b899e8-StreamThread-40" java.lang.ArrayIndexOutOfBoundsException
    • 我发现我必须先创建一个中间流来取出日期,因为GROUP BY似乎还不能接受TIMESTAMPTOSTRING函数...
    • 好点。你也可以在github.com/confluentinc/ksql为此创建一个github问题吗
    • 更新了答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-12
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-08
    • 2016-06-28
    相关资源
    最近更新 更多