Re: Side outputs documentation

2023-09-26 Thread Alexis Sarda-Espinosa
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

2023-09-25 Thread Yunfeng Zhou
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

2023-09-25 Thread Alexis Sarda-Espinosa
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

2023-09-24 Thread 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.
>