Re: Side outputs documentation
I see, sounds good, thanks for the clarification. Am Di., 26. Sept. 2023 um 03:29 Uhr schrieb Yunfeng Zhou < flink.zhouyunf...@gmail.com>: > Hi Alexis, > > Thanks for the clarification. I found the second constructor on > Flink's master branch here[1], and maybe it was that we had been > commenting on different versions of Flink, and the second constructor > has not been introduced in the version you use. From the source code I > can see that the OutputTag need not be anonymous so long as the type > extraction process passes, while making it anonymous guarantees the > success of this step, so you are right that you need not bother about > this matter so long as your tests and jobs can pass. Besides, I wonder > whether being a static field influences the anonymity of a variable. > To my understanding, making it anonymous means coding `new > OutputTag("foobar"){}` instead of `new > OutputTag("foobar")`. It doesn't matter whether the prefix is > `private OutputTag tag = new OutputTag("foobar"){}` or > `private static OutputTag tag = new > OutputTag("foobar"){}`. They should be independent from each > other and OutputTag's document is correct from this aspect. > > [1] > https://github.com/apache/flink/blob/master/flink-core/src/main/java/org/apache/flink/util/OutputTag.java#L82 > > Best, > Yunfeng > > On Mon, Sep 25, 2023 at 10:57 PM Alexis Sarda-Espinosa > wrote: > > > > Hi Yunfeng, > > > > Thanks for the response. I hadn't even seen the other constructor, but > it seems that the single-arg constructor works fine even if the output tag > is declared as "static final", at least in my use case. I imagine Flink > would complain about unknown types if it really can't figure it out > automatically, so maybe I can just let it be as long as tests pass, but I > was wondering if Flink really needs a non-static field to analyze type > information here. Who knows, maybe there are some scenarios where it's > really a must. > > > > Regards, > > Alexis. > > > > Am Mo., 25. Sept. 2023 um 05:17 Uhr schrieb Yunfeng Zhou < > flink.zhouyunf...@gmail.com>: > >> > >> Hi Alexis, > >> > >> If you create OutputTag with the constructor `OutputTag(String id)`, > >> you need to make it anonymous for Flink to analyze the type > >> information. But if you use the constructor `OutputTag(String id, > >> TypeInformation typeInfo)`, you need not make it anonymous as you > >> have provided the type information. > >> > >> The second constructor is introduced after the document and the first > >> constructor, and I think the document might have been outdated and not > >> match with OutputTag's current behavior. A ticket and PR could be > >> added to fix the document. What do you think? > >> > >> Best, > >> Yunfeng > >> > >> On Fri, Sep 22, 2023 at 4:55 PM Alexis Sarda-Espinosa > >> wrote: > >> > > >> > Hello, > >> > > >> > very quick question, the documentation for side outputs states that > an OutputTag "needs to be an anonymous inner class, so that we can analyze > the type" (this is written in a comment in the example). Is this really > true? I've seen many examples where it's a static element and it seems to > work fine. > >> > > >> > Regards, > >> > Alexis. > >> > >
Re: Side outputs documentation
Hi Alexis, Thanks for the clarification. I found the second constructor on Flink's master branch here[1], and maybe it was that we had been commenting on different versions of Flink, and the second constructor has not been introduced in the version you use. From the source code I can see that the OutputTag need not be anonymous so long as the type extraction process passes, while making it anonymous guarantees the success of this step, so you are right that you need not bother about this matter so long as your tests and jobs can pass. Besides, I wonder whether being a static field influences the anonymity of a variable. To my understanding, making it anonymous means coding `new OutputTag("foobar"){}` instead of `new OutputTag("foobar")`. It doesn't matter whether the prefix is `private OutputTag tag = new OutputTag("foobar"){}` or `private static OutputTag tag = new OutputTag("foobar"){}`. They should be independent from each other and OutputTag's document is correct from this aspect. [1] https://github.com/apache/flink/blob/master/flink-core/src/main/java/org/apache/flink/util/OutputTag.java#L82 Best, Yunfeng On Mon, Sep 25, 2023 at 10:57 PM Alexis Sarda-Espinosa wrote: > > Hi Yunfeng, > > Thanks for the response. I hadn't even seen the other constructor, but it > seems that the single-arg constructor works fine even if the output tag is > declared as "static final", at least in my use case. I imagine Flink would > complain about unknown types if it really can't figure it out automatically, > so maybe I can just let it be as long as tests pass, but I was wondering if > Flink really needs a non-static field to analyze type information here. Who > knows, maybe there are some scenarios where it's really a must. > > Regards, > Alexis. > > Am Mo., 25. Sept. 2023 um 05:17 Uhr schrieb Yunfeng Zhou > : >> >> Hi Alexis, >> >> If you create OutputTag with the constructor `OutputTag(String id)`, >> you need to make it anonymous for Flink to analyze the type >> information. But if you use the constructor `OutputTag(String id, >> TypeInformation typeInfo)`, you need not make it anonymous as you >> have provided the type information. >> >> The second constructor is introduced after the document and the first >> constructor, and I think the document might have been outdated and not >> match with OutputTag's current behavior. A ticket and PR could be >> added to fix the document. What do you think? >> >> Best, >> Yunfeng >> >> On Fri, Sep 22, 2023 at 4:55 PM Alexis Sarda-Espinosa >> wrote: >> > >> > Hello, >> > >> > very quick question, the documentation for side outputs states that an >> > OutputTag "needs to be an anonymous inner class, so that we can analyze >> > the type" (this is written in a comment in the example). Is this really >> > true? I've seen many examples where it's a static element and it seems to >> > work fine. >> > >> > Regards, >> > Alexis. >> >
Re: Side outputs documentation
Hi Yunfeng, Thanks for the response. I hadn't even seen the other constructor, but it seems that the single-arg constructor works fine even if the output tag is declared as "static final", at least in my use case. I imagine Flink would complain about unknown types if it really can't figure it out automatically, so maybe I can just let it be as long as tests pass, but I was wondering if Flink really needs a non-static field to analyze type information here. Who knows, maybe there are some scenarios where it's really a must. Regards, Alexis. Am Mo., 25. Sept. 2023 um 05:17 Uhr schrieb Yunfeng Zhou < flink.zhouyunf...@gmail.com>: > Hi Alexis, > > If you create OutputTag with the constructor `OutputTag(String id)`, > you need to make it anonymous for Flink to analyze the type > information. But if you use the constructor `OutputTag(String id, > TypeInformation typeInfo)`, you need not make it anonymous as you > have provided the type information. > > The second constructor is introduced after the document and the first > constructor, and I think the document might have been outdated and not > match with OutputTag's current behavior. A ticket and PR could be > added to fix the document. What do you think? > > Best, > Yunfeng > > On Fri, Sep 22, 2023 at 4:55 PM Alexis Sarda-Espinosa > wrote: > > > > Hello, > > > > very quick question, the documentation for side outputs states that an > OutputTag "needs to be an anonymous inner class, so that we can analyze the > type" (this is written in a comment in the example). Is this really true? > I've seen many examples where it's a static element and it seems to work > fine. > > > > Regards, > > Alexis. > > >
Re: Side outputs documentation
Hi Alexis, If you create OutputTag with the constructor `OutputTag(String id)`, you need to make it anonymous for Flink to analyze the type information. But if you use the constructor `OutputTag(String id, TypeInformation typeInfo)`, you need not make it anonymous as you have provided the type information. The second constructor is introduced after the document and the first constructor, and I think the document might have been outdated and not match with OutputTag's current behavior. A ticket and PR could be added to fix the document. What do you think? Best, Yunfeng On Fri, Sep 22, 2023 at 4:55 PM Alexis Sarda-Espinosa wrote: > > Hello, > > very quick question, the documentation for side outputs states that an > OutputTag "needs to be an anonymous inner class, so that we can analyze the > type" (this is written in a comment in the example). Is this really true? > I've seen many examples where it's a static element and it seems to work fine. > > Regards, > Alexis. >