We did originally think of allowing `filter`, `map` etc on a GlobalKTable,
though it would have been slightly different to what you are suggesting,
i.e., we'd materialize the topic as a Store and then provide views on top
of that. They'd also be global, but not materialized as physical state
stores.

On Fri, 26 May 2017 at 02:01 Thomas Becker <tobec...@tivo.com> wrote:

> Hey Eno,
> Thanks for the response. We have considered, but not yet tried that. One
> of the nice things about the GlobalKTable is that it fully "bootstraps"
> before the rest of the topology is started. But if part of the topology is
> itself generating the topic that backs the global table, it seems like that
> would effectively break. Also, doing this obviously requires
> re-materializing the data in a new topic.  To be fair, the topic we are
> building the table from has a bit of an unusual format, which is why I was
> trying to see if anyone else would think this was useful.
>
> -Tommy
>
> ________________________________________
> From: Eno Thereska [eno.there...@gmail.com]
> Sent: Thursday, May 25, 2017 12:03 PM
> To: dev@kafka.apache.org
> Subject: Re: GlobalKTable limitations
>
> Hi Thomas,
>
> Have you considered doing the transformations on the topic, then
> outputting to another topic and then constructing the GlobalKTable from the
> latter?
>
> The GlobalKTable has the limitations you mention since it was primarily
> designed for joins only. We should consider allowing a less restrictive
> interface if it makes sense.
>
> Eno
>
> > On 25 May 2017, at 14:48, Thomas Becker <tobec...@tivo.com> wrote:
> >
> > We need to do a series of joins against a KTable that we can't co-
> > partition with the stream, so we're looking at GlobalKTable.  But the
> > topic backing the table is not ideally keyed for the sort of lookups
> > this particular processor needs to do. Unfortunately, GlobalKTable is
> > very limited in that you can only build one with the exact keys/values
> > from the backing topic. I'd like to be able to perform various
> > transformations on the topic before materializing the table.  I'd
> > envision it looking something like the following:
> >
> > builder.globalTable(keySerde, valueSerde, topicName)
> >    .filter((k, v) -> k.isFoo())
> >    .map((k, v) -> new KeyValue<>(k.getBar(), v.getBaz()))
> >    .build(tableKeySerde, tableValueSerde, storeName);
> >
> > Is this something that has been considered or that others would find
> > useful?
> >
> > --
> >
> >
> >    Tommy Becker
> >
> >    Senior Software Engineer
> >
> >    O +1 919.460.4747 <(919)%20460-4747>
> >
> >    tivo.com
> >
> >
> > ________________________________
> >
> > This email and any attachments may contain confidential and privileged
> material for the sole use of the intended recipient. Any review, copying,
> or distribution of this email (or any attachments) by others is prohibited.
> If you are not the intended recipient, please contact the sender
> immediately and permanently delete this email and any attachments. No
> employee or agent of TiVo Inc. is authorized to conclude any binding
> agreement on behalf of TiVo Inc. by email. Binding agreements with TiVo
> Inc. may only be made by a signed written agreement.
>
> ________________________________
>
> This email and any attachments may contain confidential and privileged
> material for the sole use of the intended recipient. Any review, copying,
> or distribution of this email (or any attachments) by others is prohibited.
> If you are not the intended recipient, please contact the sender
> immediately and permanently delete this email and any attachments. No
> employee or agent of TiVo Inc. is authorized to conclude any binding
> agreement on behalf of TiVo Inc. by email. Binding agreements with TiVo
> Inc. may only be made by a signed written agreement.
>

Reply via email to