Thanks for looking into it Hequn!

I do not have a requirement to use TaggedEvent vs Row. But correct me if I
am wrong, creating a Row will require me knowing the internal fields of the
original event in compile time, is that correct? I do have a requirement to
support a generic original event type, so unless i can map T to a Row
without knowing the object fields, i wont be able to use it. Can you
confirm that?
I will look at MapView and let you know, thanks again!

On Sun, May 12, 2019 at 1:30 AM Hequn Cheng <chenghe...@gmail.com> wrote:

> Hi shahar,
>
> An easier way to solve your problem is to use a Row to store your data
> instead of the `TaggedEvent `. I think this is what Fabian means. In this
> way, you don't have to define the user-defined TypeFactory and use the Row
> type directly. Take `TaggedEvent<Car>` as an example, the corresponding row
> type is `Types.ROW(Types.ROW(Types.INT, Types.STRING),
> Types.OBJECT_ARRAY(Types.STRING))` in which Types is
> `org.apache.flink.table.api.Types`. Furthermore, row type is also easier to
> cooperate with Table API & SQL.
>
> However, if the `TaggedEvent` is a must-have for you, you can take a look
> at the MapView[1] as an example of how to define a user-defined table
> factory.
>
> Best, Hequn
>
> [1]
> https://github.com/apache/flink/blob/master/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/api/dataview/MapView.scala
>
> On Sat, May 11, 2019 at 1:20 AM Shahar Cizer Kobrinsky <
> shahar.kobrin...@gmail.com> wrote:
>
>> Hi Fabian,
>>
>> I have a trouble implementing the type for this operation, i wonder how i
>> can do that.
>> So given generic type T i want to create a TypeInformation for:
>> class TaggedEvent<T> {
>>    String[] tags
>>    T originalEvent
>> }
>>
>> Was trying a few different things but not sure how to do it.
>> Doesn't seem like i can use TypeHint as i need to know the actual
>> generics class for it, right?
>> Do i need a TaggedEventTypeFactory? If so, how do i create the
>> TaggedEventTypeInfo for it?  do you have an example for it? was trying to
>> follow this[1] but doesn't seem to really work. I'm getting null as my
>> genericParameter for some reason. Also, how would you create the serializer
>> for the type info? can i reuse some builtin Kryo functionality?
>>
>> Thanks
>>
>>
>> [1]
>> https://ci.apache.org/projects/flink/flink-docs-stable/dev/types_serialization.html#creating-a-typeinformation-or-typeserializer
>>
>>
>>
>>
>>
>> On Thu, May 9, 2019 at 9:08 AM Shahar Cizer Kobrinsky <
>> shahar.kobrin...@gmail.com> wrote:
>>
>>> Thanks Fabian,
>>>
>>> I'm looking into a way to enrich it without having to know the internal
>>> fields of the original event type.
>>> Right now what I managed to do is to map Car into a TaggedEvent<Car>
>>> prior to the SQL query, tags being empty, then run the SQL query selecting 
>>> *origin,
>>> enrich(.. ) as tags*
>>> Not sure there's a better way but i guess that works
>>>
>>>
>>>
>>> On Thu, May 9, 2019 at 12:50 AM Fabian Hueske <fhue...@gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> you can use the value construction function ROW to create a nested row
>>>> (or object).
>>>> However, you have to explicitly reference all attributes that you will
>>>> add.
>>>>
>>>> If you have a table Cars with (year, modelName) a query could look like
>>>> this:
>>>>
>>>> SELECT
>>>>   ROW(year, modelName) AS car,
>>>>   enrich(year, modelName) AS tags
>>>> FROM Cars;
>>>>
>>>> Handling many attributes is always a bit painful in SQL.
>>>> There is an effort to make the Table API easier to use for these use
>>>> cases (for example Column Operations [1]).
>>>>
>>>> Best, Fabian
>>>>
>>>> [1] https://issues.apache.org/jira/browse/FLINK-11967
>>>>
>>>>
>>>>
>>>> Am Do., 9. Mai 2019 um 01:44 Uhr schrieb shkob1 <
>>>> shahar.kobrin...@gmail.com>:
>>>>
>>>>> Just to be more clear on my goal -
>>>>> Im trying to enrich the incoming stream with some meaningful tags
>>>>> based on
>>>>> conditions from the event itself.
>>>>> So the input stream could be an event looks like:
>>>>> Class Car {
>>>>>   int year;
>>>>>   String modelName;
>>>>> }
>>>>>
>>>>> i will have a config that are defining tags as:
>>>>> "NiceCar" -> "year > 2015 AND position("Luxury" in modelName) > 0"
>>>>>
>>>>> So ideally my output will be in the structure of
>>>>>
>>>>> Class TaggedEvent<Car> {
>>>>>    Car origin;
>>>>>    String[] tags;
>>>>> }
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sent from:
>>>>> http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/
>>>>>
>>>>

Reply via email to