簡體   English   中英

Flink Window 使用 TUMBLE 的聚合在 TIMESTAMP 上失敗

[英]Flink Window Aggregation using TUMBLE failing on TIMESTAMP

我們在數據庫中有一張表 A。 我們正在使用 Flink SQL JdbcCatalog 將該表加載到 flink 中。

這是我們加載數據的方式

val catalog = new JdbcCatalog("my_catalog", "database_name", username, password, url)

streamTableEnvironment.registerCatalog("my_catalog", catalog) streamTableEnvironment.useCatalog("my_catalog")

val query = "select timestamp, count from A"

val sourceTable = streamTableEnvironment.sqlQuery(query) streamTableEnvironment.createTemporaryView("innerTable", sourceTable)

val aggregationQuery = select window_end, sum(count) from TABLE(TUMBLE(TABLE innerTable, DESCRIPTOR(timestamp), INTERVAL '10' minutes)) group by window_end

Exception in thread "main" org.apache.flink.table.api.ValidationException: SQL validation failed. The window function TUMBLE(TABLE table_name, DESCRIPTOR(timecol), datetime interval[, datetime interval]) requires the timecol is a time attribute type, but is TIMESTAMP(6). Exception in thread "main" org.apache.flink.table.api.ValidationException: SQL validation failed. The window function TUMBLE(TABLE table_name, DESCRIPTOR(timecol), datetime interval[, datetime interval]) requires the timecol is a time attribute type, but is TIMESTAMP(6).

簡而言之,我們想在一個已經存在的列上應用窗口聚合。 我們該怎么做 注意 - 這是一個批處理

Flink SQL 中用作時間屬性的時間戳列必須是 TIMESTAMP(3) 或 TIMESTAMP_LTZ(3)。

列應為 TIMESTAMP(3) 或 TIMESTAMP_LTZ(3),但該列也應標記為 ROWTIME。

在您的代碼中鍵入此行

sourceTable.printSchema();

並檢查結果。 該列應標記為 ROWTIME,如下所示。

(
  `deviceId` STRING,
  `dataStart` BIGINT,
  `recordCount` INT,
  `time_Insert` BIGINT,
  `time_Insert_ts` TIMESTAMP(3) *ROWTIME*
)

你可以在下面找到我的樣本。

        Table tableCpuDataCalculatedTemp = tableEnv.fromDataStream(streamCPUDataCalculated, Schema.newBuilder()
                        .column("deviceId", DataTypes.STRING())
                        .column("dataStart", DataTypes.BIGINT())
                        .column("recordCount", DataTypes.INT())
                        .column("time_Insert", DataTypes.BIGINT())
                        .column("time_Insert_ts", DataTypes.TIMESTAMP(3))
                        .watermark("time_Insert_ts", "time_Insert_ts")
                        .build());

水印方法使其成為ROWTIME

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM