You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user-zh@flink.apache.org by macia kk <pr...@gmail.com> on 2020/11/15 11:22:08 UTC

关于去重(Deduplication)

各位大佬:

  我看文档上建议使用的去重方式是用窗口函数
<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  以及状态管理上?

Re: 关于去重(Deduplication)

Posted by macia kk <pr...@gmail.com>.
好的,明白了,谢谢

Jark Wu <im...@gmail.com> 于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 <pr...@gmail.com> wrote:
>
> > 感谢 Jark 回复, 一直有看你的博客,收益匪浅。
> >
> > 关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据?
> >
> >
> >
> > Jark Wu <im...@gmail.com> 于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 <pr...@gmail.com> 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  以及状态管理上?
> > > >
> > >
> >
>

Re: 关于去重(Deduplication)

Posted by Jark Wu <im...@gmail.com>.
关于2, 你理解反了。性能上 deduplicate with first row 比 first_value 更优。 因为deduplicate
with first row 在 state 里面只存了 key,value 只用了一个空字节来表示。

On Sun, 15 Nov 2020 at 21:47, macia kk <pr...@gmail.com> wrote:

> 感谢 Jark 回复, 一直有看你的博客,收益匪浅。
>
> 关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据?
>
>
>
> Jark Wu <im...@gmail.com> 于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 <pr...@gmail.com> 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  以及状态管理上?
> > >
> >
>

Re: 关于去重(Deduplication)

Posted by macia kk <pr...@gmail.com>.
感谢 Jark 回复, 一直有看你的博客,收益匪浅。

关于2,性能上是 first_value 更优,因为只保存了 key 和 对应的 value,而窗口函数保留了整行数据?



Jark Wu <im...@gmail.com> 于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 <pr...@gmail.com> 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之间用rpc通信,为什么taskmanager之间用netty通信?

Posted by Jeff <zi...@126.com>.
如题!  jobmanager与taskmanager之前通信也用netty通信不行吗?

Re: 关于去重(Deduplication)

Posted by Jark Wu <im...@gmail.com>.
主要两个区别:
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 <pr...@gmail.com> 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  以及状态管理上?
>