各位大佬:
我看文档上建议使用的去重方式是用窗口函数 <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 以及状态管理上? |
Administrator
|
主要两个区别:
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 <[hidden email]> 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 以及状态管理上? > |
如题! jobmanager与taskmanager之前通信也用netty通信不行吗?
|
In reply to this post by Jark
感谢 Jark 回复, 一直有看你的博客,收益匪浅。
关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据? Jark Wu <[hidden email]> 于2020年11月15日周日 下午8:45写道: > 主要两个区别: > 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 <[hidden email]> 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 以及状态管理上? > > > |
Administrator
|
关于2, 你理解反了。性能上 deduplicate with first row 比 first_value 更优。 因为deduplicate
with first row 在 state 里面只存了 key,value 只用了一个空字节来表示。 On Sun, 15 Nov 2020 at 21:47, macia kk <[hidden email]> wrote: > 感谢 Jark 回复, 一直有看你的博客,收益匪浅。 > > 关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据? > > > > Jark Wu <[hidden email]> 于2020年11月15日周日 下午8:45写道: > > > 主要两个区别: > > 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 <[hidden email]> 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 以及状态管理上? > > > > > > |
好的,明白了,谢谢
Jark Wu <[hidden email]> 于2020年11月16日周一 上午10:27写道: > 关于2, 你理解反了。性能上 deduplicate with first row 比 first_value 更优。 因为deduplicate > with first row 在 state 里面只存了 key,value 只用了一个空字节来表示。 > > On Sun, 15 Nov 2020 at 21:47, macia kk <[hidden email]> wrote: > > > 感谢 Jark 回复, 一直有看你的博客,收益匪浅。 > > > > 关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据? > > > > > > > > Jark Wu <[hidden email]> 于2020年11月15日周日 下午8:45写道: > > > > > 主要两个区别: > > > 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 <[hidden email]> 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 以及状态管理上? > > > > > > > > > > |
Free forum by Nabble | Edit this page |