主要两个区别: 1. 在语义上,deduplicate 是整行去重,而 first_value, last_value 是列去重。比如 deduplicate with last row,是保留最后一行,如果最后一行中有 null 值,也会保留。而 last_value 是保留该列的最后非 null 值。 2. 性能上 deduplicate 更优,比如 first row, 只保存了 key 的state信息。
Best, Jark On Sun, 15 Nov 2020 at 19:23, macia kk <[email protected]> wrote: > 各位大佬: > > 我看文档上建议使用的去重方式是用窗口函数 > < > https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/queries.html#deduplication > > > > SELECT [column_list]FROM ( > SELECT [column_list], > ROW_NUMBER() OVER ([PARTITION BY col1[, col2...]] > ORDER BY col1 [asc|desc][, col2 [asc|desc]...]) AS rownum > FROM table_name)WHERE rownum <= N [AND conditions] > > > 但是我看 Flink SQL 里还有个 first_value, laste_value,也能实现同样的目标。 > 请问这两者有什么区别吗,尤其是在 watermark 以及状态管理上? >
