kSQL - 按时间戳将表分组为每分钟一个字符串

问题描述

我有一个关于 ksql 的问题。我对 ksql 很陌生,但在使用 MS sql Server 方面有一些经验。希望能在这里得到一些帮助,因为我不明白为什么现在 Ksql 中会发生这样的事情。仅供参考:我们在 Confluent (Apache Kafka) Cloud 中使用 ksqlDB。

下面是我的用例: 我和我的团队正在使用开源 API 使用一些加密货币数据(价格、市场份额、百分比变化等),我们希望每分钟汇总数据(尤其是价格数据和其他一些数据)。

来自 API 的消息包含以毫秒为单位的时间戳(BIGINT 格式),我们使用 Ksql 在流中将时间戳更改为字符串格式。

在我们的加密货币数据流的最后一步中,我们希望按时间戳(字符串)对 avg(priceusd) 进行分组,以获取每个时间戳的平均价格结果(显示为每分钟的日期和时间)。 但是我们 ksqlDB 中的表总是为表生成每个时间戳(在 group by 子句中)多于一行。在流式传输实时数据时将 auto.offset.reset 设置为“最新”时尤其会发生这种情况。 使用 auto.offset.reset “earliest”从基础主题加载旧数据工作正常(每个时间戳一个条目,因为它应该通过 group by)。

这里是包含 group by 子句的最终表的代码

package postBlo; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chromse.ChromeDriver; 

public class singleClickButton {
    public singleClickButton() {
        super();
    }

    public static void main(String[] args) throws Exception {
        System.setProperty("webdriver.chrome.driver","./exefiles/chromedriver.exe"); 

        WebDriver = new ChromeDriver(); 
        driver.manage().window().maximixe(); 
        driver.get("your-local-site-to-test"); 

        //Referen an input component and set a values
        driver.findElement(By.name("id-html-tag")).sendKeys("someValue text");


        /* ## Execution of button by using id
            You Could use both methods to identify the element you need : 
            By using "xpath" expression wich allows you to navigate between elements by using expressions
            By using id-identifier

            Chose one of both. 
            driver.findElement(By.xpath("expression-xpath")).click();
            driver.findElement(By.id("id-element")).click();
        */
        driver.findElement(By.xpath("/html/body/elemnts-container-button/button\r\n" + "")).click();
        driver.findElement(By.id("button-id")).click();
    }

}

PS:我们已将列合并为一(符号和时间戳),以便稍后将合并的属性用于连接。但这不是重点。

TIMEStAMP_FORMATTED 已从 BIGINT(以毫秒为单位)更改为 STRING,如下所示:

CREATE TABLE COINCAP_Table WITH (KAFKA_TOPIC=‘Coincap_Table’,KEY_FORMAT=‘JSON’,PARTITIONS=1,REPLICAS=3,VALUE_FORMAT=‘JSON’) AS SELECT
data->symbol+’,’+TIMESTAMP_FORMATTED as TIMESTAMP_SYMBOL_KEY,AVG(data->priceusd) as AVG_priceusd,AVG(data->volumeusd24hr) as AVG_volumeusd24hr,AVG(data-> CHANGEPERCENT24HR) as AVG_CHANGEPERCENT24HR,AVG(data->marketcapusd) as AVG_marketCapUsd
FROM COINCAP_STREAM2
GROUP BY data->symbol+’,’+TIMESTAMP_FORMATTED
EMIT CHANGES;

有谁知道解决此问题的解决方案,并且 group by 子句中的每个键只能获得一行?为什么 ksql 会为 group by 子句中的每个键属性生成多于一行(有时是 2 或 3 行)?

感谢您的帮助。

最好的, 塞巴斯蒂安

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)