Hi there,

I have update the KIP to the previous state voted, including the
configuration change from `field.style` to `field.syntax.version`.

I'll bump the vote thread as well to see if there's agreement on adding
this feature to Connect.

Cheers,
Jorge.

On Wed, 15 Jun 2022 at 23:02, Jorge Esteban Quilcate Otoya <
quilcate.jo...@gmail.com> wrote:

> Thanks, Chris. Your feedback is much appreciated!
>
> I see how the current proposal might be underestimating some edge cases.
> I'm happy to move the design for deep-scan and multi-values to future
> developments related with this KIP and reduce its scope, though open for
> more feedback.
>
> Also, just to be sure, are you proposing also to not include array access
> at this stage?
>
> Thanks,
> Jorge.
>
> On Tue, 14 Jun 2022 at 03:20, Chris Egerton <fearthecel...@gmail.com>
> wrote:
>
>> Hi Jorge,
>>
>> I've done some more thinking and I hate to say it, but I think the syntax
>> does need to be expanded. Right now it's clear what "a.b" refers to and
>> what "a..b" refers to, but what about "a...b"? Is that referring to
>> subfield ".b" of field "a", or subfield "b" of field "a."? This gets even
>> more complicated when thinking about fields whose names are exclusively
>> made up of dots.
>>
>> I'm also a little hesitant to mix the cases of multi-value paths and deep
>> scans. What if you only want to access one subfield deep for an SMT,
>> instead of recursing through all the children of a given field? It's akin
>> to the distinction between * and ** with file globbing patterns, and there
>> could be a substantial performance difference if you have heavily-nested
>> fields.
>>
>> Ultimately, I think that if the proposed "field.syntax.version" property
>> sits well with people, it might be better to reduce the scope of the KIP
>> back to the original proposal and just focus on adding support for
>> explicitly-specified nested values, with no multi-value paths whatsoever,
>> knowing that we have an easy way to introduce new syntax and features in
>> the future. (We could probably leave the "a...b" case for that next
>> version
>> too.)
>>
>> I was a huge fan of this KIP before we started trying to address more
>> complex use cases, and although I don't want to write those off, I think
>> we
>> may have bitten off more than we can chew in time for the 3.3.0 release
>> and
>> would hate to see this KIP get delayed as a result.
>>
>> I'd be really curious to hear from Joshua and Tom on this front, though.
>> Is
>> it acceptable to move more incrementally here and settle on the syntax
>> version property as our means of introducing new features, or is it
>> preferable to implement things monolithically and try to get everything
>> (or
>> at least, as much as possible) right the first time?
>>
>> Thanks again for your continued effort on this KIP!
>>
>> Cheers,
>>
>> Chris
>>
>> On Wed, Jun 8, 2022 at 5:41 PM Jorge Esteban Quilcate Otoya <
>> quilcate.jo...@gmail.com> wrote:
>>
>> > Thanks, Chris!
>> >
>> > Please, find my comments below:
>> >
>> > On Tue, 7 Jun 2022 at 04:39, Chris Egerton <fearthecel...@gmail.com>
>> > wrote:
>> >
>> > > Hi Jorge,
>> > >
>> > > Thanks! Sorry for the delay; here are my thoughts:
>> > >
>> > > 1. Under the "Accessing multiple values by deep-scan" header it's
>> stated
>> > > that "If deep-scan is used, it must have only one field after the
>> > asterisk
>> > > level.". However, in example 3 for the Cast SMT and other examples for
>> > > other SMTs, the spec contains a field of "*.child.k2", which appears
>> to
>> > > have two fields after the asterisk level. I may be misunderstanding
>> the
>> > > proposal, but it seems like the two contradict each other.
>> > >
>> >
>> > Thanks for catching this. I have clarified it by removing this
>> restriction.
>> > Also, have extended the deep-scan scenarios.
>> >
>> >
>> > >
>> > > 2. I'm a little unclear on why we need the special handling for arrays
>> > > where, for an array field "a", the field name "a" can be treated as
>> > either
>> > > the array itself, or every element in the array. Is there a reason we
>> > can't
>> > > use the field name "a.*" to handle the latter case, and "a" to handle
>> the
>> > > former?
>> > >
>> >
>> > Agree, this is confusing. I like the `a.*` approach to access array
>> items.
>> > I have added this to the proposal.
>> >
>> >
>> > >
>> > > 3. How would a user specify that they'd like to access a field with
>> the
>> > > literal name "*"?
>> > >
>> >
>> > Good one. I'm proposing an approach similar to how it's proposed to
>> escape
>> > dots, with a double-asterisk. Curious on your thoughts around this.
>> >
>> >
>> > >
>> > > 4. For the Cast SMT, do you think it might bite some people if fields
>> > that
>> > > can't be cast correctly are silently ignored? I'm imagining the case
>> > where
>> > > none of the fields in a multi-path expression can be cast correctly
>> and
>> > it
>> > > ends up eating half of someone's day to track down why their SMT isn't
>> > > doing anything.
>> > >
>> >
>> > If I understand correctly, this challenge could be relevant across SMTs.
>> > At the moment, most/all? SMTs just silently ignore.
>> > Was thinking about adding a flag `field.on.path.not.found` to either
>> ignore
>> > or fail when no paths are found. What do your think?
>> >
>> >
>> > >
>> > > 5. For the ExtractField and ValueToKey SMTs, what happens if a
>> deep-scan
>> > > field name is used, but only one field is found? Is the resulting
>> field
>> > > still an array, or is it just the single field that was found? (FWIW
>> I'm
>> > > leaning towards keeping it an array just to keep schemas consistent
>> in a
>> > > pipeline in case the number of fields found fluctuates across
>> records.)
>> > >
>> > > Agree. Will clarify that an array is always produced even for 1 or 0
>> > fields are found.
>> >
>> >
>> > > 6. (Nit) For the HeaderFrom SMT, it's stated that "As this SMT affects
>> > only
>> > > existing fields, additional configurations will not be required.".
>> Given
>> > > the new "field.syntax.version" property, this part should probably be
>> > > removed.
>> > >
>> > Agree.
>> >
>> >
>> > >
>> > > 7. Is recursive descent intentionally excluded? That was an important
>> > part
>> > > of Joshua's KIP and his feedback on this KIP; I think it's worth
>> pursuing
>> > > if we can.
>> > >
>> >
>> > My understanding from Joshua's feedback is that by including support for
>> > deep-scan, we are already covering the recursive functionality. Though,
>> I
>> > may be missing something.
>> >
>> > >
>> > >
>> > > Cheers,
>> > >
>> > > Chris
>> > >
>> > > On Tue, May 24, 2022 at 3:49 AM Jorge Esteban Quilcate Otoya <
>> > > quilcate.jo...@gmail.com> wrote:
>> > >
>> > > > Thanks, Chris!
>> > > >
>> > > > I have updated the KIP with the rejected alternatives updated.
>> Also, I
>> > > have
>> > > > drafted the support for arrays and deep scans as part of the
>> proposed
>> > > > notation to make it more complete, even though these can be
>> implemented
>> > > in
>> > > > multiple PRs.
>> > > >
>> > > > Looking forward to your feedback.
>> > > >
>> > > > Cheers,
>> > > > Jorge.
>> > > >
>> > > > On Sat, 21 May 2022 at 17:39, Chris Egerton <
>> fearthecel...@gmail.com>
>> > > > wrote:
>> > > >
>> > > > > Hi Jorge,
>> > > > >
>> > > > > I really appreciate the effort you've made to simplify the syntax
>> and
>> > > > > feature set of a JSONPath-based approach as much as possible. I'm
>> > still
>> > > > > hesitant to continue with it, though.
>> > > > >
>> > > > > 1. The syntax is much less friendly. Just compare
>> "top.mid.bottom" to
>> > > > > "$['top']['mid']['bottom']"... not everyone uses JSONPath or even
>> > JSON,
>> > > > and
>> > > > > the learning curve for the former is going to be steeper. The
>> > examples
>> > > in
>> > > > > the new KIP draft you published demonstrate this pretty well, and
>> > this
>> > > is
>> > > > > without diving into the details of what escape syntax would look
>> > like.
>> > > > >
>> > > > > 2. The three new major features that this syntax adds (array
>> > accesses,
>> > > > deep
>> > > > > scans, and multi-value paths) could all be added pretty easily to
>> the
>> > > dot
>> > > > > notation syntax without introducing brackets and dollar signs.
>> Array
>> > > > > accesses can be described using the same syntax as struct/map
>> field
>> > > > access,
>> > > > > deep scans can be described using '*', and multi-value paths can
>> be
>> > > > > described by referencing the name of a field that's expected to
>> have
>> > > > > children. These are all top-of-the-head ideas and can probably be
>> > > > refined,
>> > > > > but hopefully they demonstrate that we can keep the syntax simple
>> > > without
>> > > > > sacrificing features. Of course, the question of leaving room for
>> > > future
>> > > > > features might arise... given that these are the out-of-the-box
>> SMTs
>> > > that
>> > > > > are likely to be the first that many people encounter, I'd err on
>> the
>> > > > side
>> > > > > of simplicity and a gentle learning curve; if people need to get
>> more
>> > > out
>> > > > > of transforms, the option to implement their own is still there.
>> If
>> > we
>> > > > can
>> > > > > address 95% of use cases with something easy to use, it's not
>> worth
>> > > > making
>> > > > > the feature harder for everyone to use just to accommodate the
>> > > remaining
>> > > > > 5%.
>> > > > >
>> > > > > 3. The advantage of leveraging an existing syntax is twofold:
>> users
>> > who
>> > > > are
>> > > > > already familiar with that syntax don't need to learn a new
>> syntax,
>> > and
>> > > > > maintainers of the syntax get to leverage existing libraries and
>> > > > > documentation for the syntax. With the current proposal, reusing
>> > > > libraries
>> > > > > is off the table, which means that we're going to have to parse
>> this
>> > > > > ourselves (including all the escape syntax edge cases), and we
>> won't
>> > be
>> > > > > able to automatically leverage new features added to that syntax.
>> And
>> > > > given
>> > > > > how stripped-down the syntax is in comparison to full JSONPath,
>> > there's
>> > > > > still going to be a learning curve for users who are already
>> familiar
>> > > > with
>> > > > > it, and we'll still have to document how Connect's variant of
>> > JSONPath
>> > > > > works either instead of or in addition to just linking to a
>> > > > well-maintained
>> > > > > third-party docs site.
>> > > > >
>> > > > > On the topic of "field.path" and "include.path" vs.
>> "field.style", I
>> > > > > actually think that a single property per SMT is cleaner and
>> simpler.
>> > > > > Allowing users to mix and match styles within the same SMT config
>> > seems
>> > > > > like a recipe for confusion, and with a single property that
>> dictates
>> > > > field
>> > > > > syntax behavior, we leave the door open to change the default at a
>> > > later
>> > > > > date. We could even fully remove support for plain field notation
>> at
>> > > some
>> > > > > point and still be able to retain the simple property names of
>> > "field",
>> > > > > "include", etc. instead of forcing people to use "field.path" and
>> the
>> > > > like.
>> > > > > That said, the term "field.style" and the permitted values might
>> be a
>> > > > > little ambiguous. One alternative, though a little heavy-handed,
>> is
>> > to
>> > > > > change it to "field.syntax.version" with permitted values of "V1"
>> > > > (default,
>> > > > > equivalent to "field.style = plain") and "V2" (equivalent to
>> > > > "field.style =
>> > > > > nested"). This would leave us room in the future to make further
>> > > changes
>> > > > to
>> > > > > the syntax without having to come up with new names, although it
>> does
>> > > > > sacrifice a little bit in that the permitted values are no longer
>> > > > > self-describing.
>> > > > >
>> > > > > Cheers,
>> > > > >
>> > > > > Chris
>> > > > >
>> > > > > On Sun, May 15, 2022 at 4:51 PM Jorge Esteban Quilcate Otoya <
>> > > > > quilcate.jo...@gmail.com> wrote:
>> > > > >
>> > > > > > Thank you all for your feedback, and sorry for the long wait
>> for a
>> > > > reply.
>> > > > > >
>> > > > > > I would like to explore the idea of JSONPath-inspired/subset
>> > > notation a
>> > > > > bit
>> > > > > > further:
>> > > > > >
>> > > > > > It will need to be a much-reduced version of JSONPath:
>> > > > > > - No full support for JsonPath therefore an additional
>> dependency.
>> > > > > > - All paths must start with '$'
>> > > > > > - No functions support or other operators allowed.
>> > > > > > - JsonPath dotted and square-bracket notations can be supported
>> to
>> > > > avoid
>> > > > > > escaping dots or other characters: `$a.b.c` and `$['a.b']['c']`
>> -
>> > or
>> > > we
>> > > > > > could only support the second one as it's more complete.
>> > > > > > - Add support for arrays with `[<integer>]`, e.g. `$a.[1].b`
>> > > > > > - Add support for multiple-value paths using array access
>> `$a.*.b`
>> > or
>> > > > > deep
>> > > > > > scan `$a..b`.
>> > > > > >     - Some SMTs that will benefit from this: `MaskField`,
>> `Cast`,
>> > > > > > `ReplaceField`.
>> > > > > > - We could introduce a `path[s]` config under the current
>> > > > configurations
>> > > > > to
>> > > > > > apply this feature so no compatibility issues are introduced:
>> e.g.
>> > > > > > `field.path`, `fields.paths`, `exclude.path`.
>> > > > > >
>> > > > > > With these,  100, 101, 102, and 103 will be effectively solved.
>> > > > > >
>> > > > > > The main challenge that I see at the moment is that by being
>> JSON
>> > > > > > path-like, there may be some edge cases that I can't foresee at
>> the
>> > > > > moment,
>> > > > > > that could make this hard to implement, test, and maintain in
>> the
>> > > long
>> > > > > run.
>> > > > > >
>> > > > > > I'll appreciate your feedback on how this JSONPath-based
>> > alternative
>> > > > > > compares to the dotted notation initially proposed, and if it
>> > matches
>> > > > > your
>> > > > > > feedback.
>> > > > > > I have drafted a copy of the KIP to change the examples to
>> JSONPath
>> > > > > > approach and validate some differences:
>> > > > > > https://cwiki.apache.org/confluence/x/9BihD
>> > > > > >
>> > > > > > About 104. I agreed with Chris. We can handle this as part of a
>> new
>> > > > KIP.
>> > > > > >
>> > > > > > Thanks,
>> > > > > > Jorge.
>> > > > > >
>> > > > > > On Sun, 24 Apr 2022 at 17:27, Chris Egerton <
>> > fearthecel...@gmail.com
>> > > >
>> > > > > > wrote:
>> > > > > >
>> > > > > > > Hi Joshua,
>> > > > > > >
>> > > > > > > I have a few reservations about using JsonPath notation here.
>> > > > > > >
>> > > > > > > 1. There's likely to be a substantial performance penalty for
>> > > > > converting
>> > > > > > > between the Kafka Connect format and something that a JsonPath
>> > > > library
>> > > > > > > would understand.
>> > > > > > >
>> > > > > > > 2. The complexity of the feature will be significantly
>> higher. It
>> > > > will
>> > > > > be
>> > > > > > > harder to test, document, and implement. There will be many
>> more
>> > > edge
>> > > > > > cases
>> > > > > > > to consider and support, and we'll be on the hook to handle
>> any
>> > > bugs
>> > > > or
>> > > > > > > inconsistencies that arise, either as a result of our use of
>> the
>> > > > > JsonPath
>> > > > > > > library we choose, or as a result of bugs in that library.
>> > > > > > >
>> > > > > > > 3. It's not clear that JsonPath is superior or even suitable
>> for
>> > > some
>> > > > > of
>> > > > > > > the SMTs proposed here. What would be the advantages of
>> JsonPath
>> > > with
>> > > > > the
>> > > > > > > InsertField or HoistField SMTs?
>> > > > > > >
>> > > > > > > I also don't think that adding dot notation is unfriendly to
>> > users;
>> > > > > many
>> > > > > > > have proposed this type of syntax in the past, and it's
>> > frequently
>> > > > used
>> > > > > > in
>> > > > > > > informal discussions to refer to nested fields. If the
>> proposed
>> > > > syntax
>> > > > > > was
>> > > > > > > not already intuitive then a case against deciding on our own
>> > might
>> > > > be
>> > > > > > more
>> > > > > > > convincing, but as things stand, simple dot notation is likely
>> > > going
>> > > > to
>> > > > > > be
>> > > > > > > easier for users to understand than JsonPath syntax.
>> > > > > > >
>> > > > > > > Cheers,
>> > > > > > >
>> > > > > > > Chris
>> > > > > > >
>> > > > > > > On Fri, Apr 22, 2022 at 9:31 AM Joshua Grisham <
>> > > > grishamj...@gmail.com>
>> > > > > > > wrote:
>> > > > > > >
>> > > > > > > > Hello all!
>> > > > > > > >
>> > > > > > > > Sorry that I come a bit later to the party here, but I am
>> the
>> > one
>> > > > who
>> > > > > > > wrote
>> > > > > > > > KIP-683 [1] for recursive support (just simply looping
>> through
>> > > all
>> > > > > > child
>> > > > > > > > non-primitive structures for the same matching name(s))
>> which
>> > is
>> > > a
>> > > > > > > slightly
>> > > > > > > > different way to try and solve a similar requirement --
>> > > > unfortunately
>> > > > > > at
>> > > > > > > > the time the dev community was not quite as active and then
>> I
>> > > also
>> > > > > got
>> > > > > > > busy
>> > > > > > > > with work and just life in general so wasn't able to follow
>> up
>> > or
>> > > > > push
>> > > > > > > it.
>> > > > > > > >
>> > > > > > > > I do think it is a very good idea to have some kind of
>> > path-like
>> > > > > > > expression
>> > > > > > > > to be able to specifically address a nested field, as I can
>> see
>> > > > that
>> > > > > > the
>> > > > > > > > simple "recursive" case could potentially result in
>> unwanted or
>> > > > > > > unexpected
>> > > > > > > > behavior, plus there is the potential to introduce a bit of
>> a
>> > > > > > performance
>> > > > > > > > hit to always loop through everything in cases where the
>> > > > > schemas/values
>> > > > > > > > might be quite large.
>> > > > > > > >
>> > > > > > > > One thing I wanted to ask: instead of creating a new "path
>> > > parser"
>> > > > > > > > including some bespoke or "borrowed" syntax, why not just
>> use
>> > > > > something
>> > > > > > > > that already exists? Specifically here I am thinking about
>> > > > JsonPath (
>> > > > > > > > https://github.com/json-path/JsonPath)
>> > > > > > > >
>> > > > > > > > There is already quite nice support in JsonPath for handling
>> > > > special
>> > > > > > > > characters in field names, for handling different
>> non-primitive
>> > > > types
>> > > > > > > > (arrays etc), for handling multiple levels of nesting, etc
>> etc.
>> > > > > Would
>> > > > > > it
>> > > > > > > > be possible to instead to re-think this and maybe have some
>> > kind
>> > > of
>> > > > > > > > JsonPath-based Schema selector / updater and/or
>> JsonPath-based
>> > > > Value
>> > > > > > > > selector / updater? Conceptually this feels like it makes
>> sense
>> > > to
>> > > > > me,
>> > > > > > as
>> > > > > > > > from the top of my head it would be quite a natural fit to
>> map
>> > a
>> > > > Json
>> > > > > > > data
>> > > > > > > > structure to the Connect API data structure (and you could
>> > > > > potentially
>> > > > > > > even
>> > > > > > > > try to leverage the existing Json-to-Connect
>> > > > serializer/deserializer
>> > > > > to
>> > > > > > > > help out with this even in a more "out of the box"-feeling
>> kind
>> > > of
>> > > > > > way).
>> > > > > > > >
>> > > > > > > > Maybe also as Tom mentioned, this part (in my example, this
>> > > > > > > JsonPath-based
>> > > > > > > > "thing") could even be a generic API that could be used by
>> any
>> > > SMT,
>> > > > > > > > including used in custom ones built by the community.  Then
>> I
>> > > think
>> > > > > to
>> > > > > > > use
>> > > > > > > > a completely separate config property somehow related to
>> "path"
>> > > (as
>> > > > > Tom
>> > > > > > > > also mentioned) would also make a lot of sense here as well.
>> > This
>> > > > > way,
>> > > > > > if
>> > > > > > > > you select based on "path" then this JsonPath-based API
>> would
>> > be
>> > > > > used,
>> > > > > > > > otherwise it could use something similar to the existing
>> > > get-field
>> > > > > > based
>> > > > > > > > approach (which I guess could also be refactored into some
>> kind
>> > > of
>> > > > > > > utility
>> > > > > > > > / API as well if it made sense?)
>> > > > > > > >
>> > > > > > > > And with that in mind, if this was the kind of direction to
>> go,
>> > > > then
>> > > > > a
>> > > > > > > > "recursive" capability like I pitched in KIP-683 would also
>> > > become
>> > > > > > > > unnecessary because you could easily write a JsonPath
>> > expression
>> > > > like
>> > > > > > > > "$..someRecuriveField" and it would do the same thing (on
>> top
>> > of
>> > > > > > anything
>> > > > > > > > else you would want to do that is already supported by
>> > JsonPath).
>> > > > > Then
>> > > > > > we
>> > > > > > > > could also kill that older KIP and do a bit of clean-up :)
>> > > > > > > >
>> > > > > > > > [1] -
>> > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-683%3A+Add+recursive+support+to+Connect+Cast+and+ReplaceField+transforms%2C+and+support+for+casting+complex+types+to+either+a+native+or+JSON+string
>> > > > > > > >
>> > > > > > > > Just some extra food for thought. All-in-all I think this
>> is a
>> > > > super
>> > > > > > > great
>> > > > > > > > initiative!
>> > > > > > > >
>> > > > > > > > Best,
>> > > > > > > >
>> > > > > > > > Joshua
>> > > > > > > >
>> > > > > > > >
>> > > > > > > > Den fre 22 apr. 2022 kl 14:50 skrev Chris Egerton <
>> > > > > > > fearthecel...@gmail.com
>> > > > > > > > >:
>> > > > > > > >
>> > > > > > > > > Hi Tom,
>> > > > > > > > >
>> > > > > > > > > Thanks for taking a look at this, and for your thoughtful
>> > > > comments.
>> > > > > > > I'll
>> > > > > > > > > leave it up to Jorge to address most of your comments but
>> I
>> > > > wanted
>> > > > > to
>> > > > > > > > share
>> > > > > > > > > a couple quick thoughts I had regarding 103 and 104.
>> > > > > > > > >
>> > > > > > > > > 103. Like you, I was envisioning a possible syntax for
>> array
>> > > > access
>> > > > > > > that
>> > > > > > > > > used classic C-style brackets; e.g., `arr[index]`.
>> However, I
>> > > > > wonder
>> > > > > > if
>> > > > > > > > we
>> > > > > > > > > could keep things simple and use the same syntax that
>> we're
>> > > > > proposing
>> > > > > > > for
>> > > > > > > > > nested field access? In other words, instead of
>> `arr[index]`,
>> > > > you'd
>> > > > > > > write
>> > > > > > > > > `arr.index`. It'd save us and users the headache of
>> reserving
>> > > > > > > characters
>> > > > > > > > > now that would need to be escaped even if their unescaped
>> > > > brethren
>> > > > > > > aren't
>> > > > > > > > > used for anything, and also avoid the question of what
>> > exactly
>> > > we
>> > > > > > > should
>> > > > > > > > do
>> > > > > > > > > when we see a config that uses reserved characters that
>> > aren't
>> > > > yet
>> > > > > > > > > supported (throwing an exception seems pretty unfriendly
>> for
>> > > new
>> > > > > > > users).
>> > > > > > > > >
>> > > > > > > > > 104. This would probably be useful, but it would come with
>> > some
>> > > > > nasty
>> > > > > > > > > compatibility questions that would need to be addressed if
>> > we'd
>> > > > > want
>> > > > > > > SMTs
>> > > > > > > > > that leverage this new API to be viable for older
>> versions of
>> > > > > > Connect.
>> > > > > > > If
>> > > > > > > > > we package and distribute this feature as a library
>> (either
>> > via
>> > > > an
>> > > > > > > > entirely
>> > > > > > > > > new artifact, or as part of the existing
>> connect-transforms
>> > or
>> > > > > > > > connect-api
>> > > > > > > > > artifacts), then we'd have to either sidestep the existing
>> > > plugin
>> > > > > > > > isolation
>> > > > > > > > > logic [1] that basically makes it impossible for Connect
>> > > plugins
>> > > > to
>> > > > > > > ship
>> > > > > > > > > their own versions of Connect artifacts, or issue a big
>> > warning
>> > > > to
>> > > > > > > people
>> > > > > > > > > that any SMT that uses this API won't work with any older
>> > > > versions
>> > > > > of
>> > > > > > > > > Connect. There's also some other features we might want to
>> > add
>> > > in
>> > > > > an
>> > > > > > > > > SMT-utils library such as the existing, internal, utils
>> that
>> > > > > Connect
>> > > > > > > uses
>> > > > > > > > > right now [2]. It may be worth exploring this in a
>> separate
>> > KIP
>> > > > of
>> > > > > > its
>> > > > > > > > own.
>> > > > > > > > >
>> > > > > > > > > [1] -
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/kafka/blob/d480c4aa6e513e36050d8e067931de2270525d18/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/PluginUtils.java#L46-L143
>> > > > > > > > >
>> > > > > > > > > [2] -
>> > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/kafka/tree/d480c4aa6e513e36050d8e067931de2270525d18/connect/transforms/src/main/java/org/apache/kafka/connect/transforms/util
>> > > > > > > > >
>> > > > > > > > > Cheers,
>> > > > > > > > >
>> > > > > > > > > Chris
>> > > > > > > > >
>> > > > > > > > > On Fri, Apr 22, 2022 at 6:55 AM Tom Bentley <
>> > > tbent...@redhat.com
>> > > > >
>> > > > > > > wrote:
>> > > > > > > > >
>> > > > > > > > > > Hi Jorge,
>> > > > > > > > > >
>> > > > > > > > > > Thanks for the KIP, especially for the examples which
>> are
>> > > > > > > super-clear.
>> > > > > > > > > >
>> > > > > > > > > > 100. The name `field.style` isn't so clear for something
>> > like
>> > > > > > > > > ReplaceField:
>> > > > > > > > > > it's not so obvious that field.style applies to
>> `include`
>> > and
>> > > > > > > > `exclude`.
>> > > > > > > > > >
>> > > > > > > > > > 101. The permitted values for `field.style` don't seem
>> > > terribly
>> > > > > > > > intuitive
>> > > > > > > > > > (to me anyway): the meaning of `plain` isn't very
>> > guessable.
>> > > > Why
>> > > > > > not
>> > > > > > > > > > `top-level` or `root` instead? Also `nested` could be
>> > > > > misconstrued
>> > > > > > to
>> > > > > > > > > mean
>> > > > > > > > > > nested-but-not-top-level, so perhaps `recursive` or
>> > > `cascading`
>> > > > > > might
>> > > > > > > > be
>> > > > > > > > > > better?
>> > > > > > > > > >
>> > > > > > > > > > 102. I'm torn on whether making the interpretation of
>> > > existing
>> > > > > > > configs
>> > > > > > > > > like
>> > > > > > > > > > `field` be dependent on `field.style` is a good idea. I
>> can
>> > > see
>> > > > > > that
>> > > > > > > > it's
>> > > > > > > > > > the simplest thing to do, but it just feels a bit odd
>> that
>> > > > > > sometimes
>> > > > > > > > the
>> > > > > > > > > > `field` would actually be a path and have different
>> > escaping
>> > > > > rules.
>> > > > > > > An
>> > > > > > > > > > alternative would be to come up with a parallel set of
>> > config
>> > > > > names
>> > > > > > > > (e.g.
>> > > > > > > > > > as well as "field" an SMT might support "path") which
>> were
>> > > > > defined
>> > > > > > to
>> > > > > > > > > > always take paths, thus avoiding the changeable
>> > > interpretation
>> > > > of
>> > > > > > the
>> > > > > > > > > > existing configs. The SMT's #configure() would need to
>> > throw
>> > > in
>> > > > > the
>> > > > > > > > case
>> > > > > > > > > > that both configs were given. I can see that that would
>> be
>> > > more
>> > > > > > work
>> > > > > > > in
>> > > > > > > > > > implementation, but it feels cleaner.
>> > > > > > > > > >
>> > > > > > > > > > 103. I think in order to allow for supporting arrays in
>> a
>> > > later
>> > > > > KIP
>> > > > > > > > > (which
>> > > > > > > > > > certainly seems like it could be useful), we'd want to
>> > > specify
>> > > > > the
>> > > > > > > > syntax
>> > > > > > > > > > now, even if it wasn't implemented under this KIP.
>> That's
>> > > > > because I
>> > > > > > > > don't
>> > > > > > > > > > think you can't exclude the possibility that characters
>> > such
>> > > as
>> > > > > `[`
>> > > > > > > and
>> > > > > > > > > `]`
>> > > > > > > > > > appear in field names. So you'd have a compatibility
>> > problem
>> > > if
>> > > > > > > people
>> > > > > > > > > > started using the features of this KIP to access such
>> > fields,
>> > > > > only
>> > > > > > > for
>> > > > > > > > > > those characters to change their meaning under a later
>> KIP.
>> > > > > > > > > >
>> > > > > > > > > > 104. I also wonder whether making paths into a public
>> Java
>> > > API,
>> > > > > for
>> > > > > > > use
>> > > > > > > > > by
>> > > > > > > > > > 3rd party SMTs, would be valuable.
>> > > > > > > > > >
>> > > > > > > > > > Thanks again,
>> > > > > > > > > >
>> > > > > > > > > > Tom
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > > > On Wed, 20 Apr 2022 at 17:53, Chris Egerton <
>> > > > > > fearthecel...@gmail.com
>> > > > > > > >
>> > > > > > > > > > wrote:
>> > > > > > > > > >
>> > > > > > > > > > > 💯 Thanks Jorge, LGTM!
>> > > > > > > > > > >
>> > > > > > > > > > > On Wed, Apr 20, 2022, 12:40 Jorge Esteban Quilcate
>> Otoya
>> > <
>> > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > >
>> > > > > > > > > > > > Thank you, Chris! Not possible without your
>> feedback.
>> > > > > > > > > > > >
>> > > > > > > > > > > > On Tue, 19 Apr 2022 at 23:04, Chris Egerton <
>> > > > > > > > fearthecel...@gmail.com
>> > > > > > > > > >
>> > > > > > > > > > > > wrote:
>> > > > > > > > > > > >
>> > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Thank you for sticking through this. I have one
>> small
>> > > > > remark
>> > > > > > > and
>> > > > > > > > > one
>> > > > > > > > > > > > small
>> > > > > > > > > > > > > clarification; assuming you agree with me on them
>> > then
>> > > > I'm
>> > > > > > > ready
>> > > > > > > > to
>> > > > > > > > > > > vote
>> > > > > > > > > > > > on
>> > > > > > > > > > > > > the KIP.
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > 1. InsertField: The "field.on.missing.parent" and
>> > > > > > > > > > > > "field.on.existing.field"
>> > > > > > > > > > > > > docs both mention a permitted value of "ingore";
>> this
>> > > > > should
>> > > > > > be
>> > > > > > > > > > > "ignore",
>> > > > > > > > > > > > > right?
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > Of course, one more typo :)
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > > 2. InsertField: The examples are still missing the
>> > > > > > > "field.style"
>> > > > > > > > > > > property
>> > > > > > > > > > > > > from the configurations. They should all include
>> the
>> > > > > property
>> > > > > > > > > > > > > "transforms.smt1.field.style": "nested", correct?
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > Yes, it is there. I think I know what you mean now,
>> > seems
>> > > > > that
>> > > > > > > > > > Confluence
>> > > > > > > > > > > > is putting everything in one line when it's in
>> separate
>> > > > lines
>> > > > > > in
>> > > > > > > > the
>> > > > > > > > > > > > editor.
>> > > > > > > > > > > > Hopefully, it's fixed now.
>> > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Thanks again for working through this, and
>> > > > congratulations
>> > > > > > on a
>> > > > > > > > > > > > > well-written KIP!
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > Chris
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > On Tue, Apr 19, 2022 at 2:06 PM Jorge Esteban
>> > Quilcate
>> > > > > Otoya
>> > > > > > <
>> > > > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > > > >
>> > > > > > > > > > > > > > Thank you, Chris! I apply these improvements to
>> the
>> > > > KIP,
>> > > > > > let
>> > > > > > > me
>> > > > > > > > > > know
>> > > > > > > > > > > > how
>> > > > > > > > > > > > > it
>> > > > > > > > > > > > > > looks now.
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > On Mon, 11 Apr 2022 at 23:43, Chris Egerton <
>> > > > > > > > > > fearthecel...@gmail.com
>> > > > > > > > > > > >
>> > > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > Wow, those examples are great! A few more
>> > remarks,
>> > > > but
>> > > > > I
>> > > > > > > > think
>> > > > > > > > > > > we're
>> > > > > > > > > > > > > > > getting close:
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > 1. The examples differ across SMTs with the
>> name
>> > of
>> > > > the
>> > > > > > > > > > > > > newly-introduced
>> > > > > > > > > > > > > > > style property; some of them use
>> "field.style",
>> > and
>> > > > > some
>> > > > > > > use
>> > > > > > > > > > > > > > > "fields.style". I think for consistency's
>> sake we
>> > > > > should
>> > > > > > > > stick
>> > > > > > > > > > with
>> > > > > > > > > > > > > just
>> > > > > > > > > > > > > > > "field.style"; otherwise it could be painful
>> for
>> > > > users
>> > > > > to
>> > > > > > > > have
>> > > > > > > > > to
>> > > > > > > > > > > > > > remember
>> > > > > > > > > > > > > > > which to use.
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > Great catch. Agree, I fixed the config names to
>> > > > > > > `field.style`.
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > 2. Some of the examples are off:
>> > > > > > > > > > > > > > > - TimestampConverter: the input in the second
>> > > example
>> > > > > > > ("when
>> > > > > > > > > > field
>> > > > > > > > > > > > > names
>> > > > > > > > > > > > > > > include dots") doesn't contain a field with a
>> > > dotted
>> > > > > name
>> > > > > > > > > > > > > > > - ValueToKey: the config in the third example
>> > > ("when
>> > > > > > field
>> > > > > > > > > names
>> > > > > > > > > > > > > include
>> > > > > > > > > > > > > > > dots") should probably use "parent..child.k2"
>> as
>> > > the
>> > > > > > > > > > > > > > > "transforms.smt1.fields" property
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > Fixed. Thanks!
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > 3. RE changes to InsertField:
>> > > > > > > > > > > > > > > - The InsertField SMT should also come with
>> the
>> > new
>> > > > > > > > > "field.style"
>> > > > > > > > > > > > > > property
>> > > > > > > > > > > > > > > in order to preserve backwards compatibility,
>> > > right?
>> > > > I
>> > > > > > > don't
>> > > > > > > > > see
>> > > > > > > > > > it
>> > > > > > > > > > > > > > > included in the example configs for that one,
>> > just
>> > > > want
>> > > > > > to
>> > > > > > > > make
>> > > > > > > > > > > sure
>> > > > > > > > > > > > > > > - I don't know of any cases where we use
>> > snake_case
>> > > > for
>> > > > > > > > > property
>> > > > > > > > > > > > names
>> > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > Kafka; we should probably use
>> "on.missing.parent"
>> > > and
>> > > > > > > > > > > > > "on.existing.field"
>> > > > > > > > > > > > > > > as the new property names for InsertField.
>> > > > > > > > > > > > > > > - Why is the "on_existing_field" (or
>> > > > > "on.existing.field")
>> > > > > > > > > > property
>> > > > > > > > > > > > only
>> > > > > > > > > > > > > > > applied when the field style is nested?
>> Couldn't
>> > it
>> > > > be
>> > > > > > > useful
>> > > > > > > > > for
>> > > > > > > > > > > > > > > non-nested fields as well?
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > Great points! I have applied these suggestions
>> to
>> > the
>> > > > > KIP.
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > Chris
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > On Sat, Apr 9, 2022 at 12:40 PM Jorge Esteban
>> > > > Quilcate
>> > > > > > > Otoya
>> > > > > > > > <
>> > > > > > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > Again, great feedback Chris. Much
>> appreciated.
>> > > > > > > > > > > > > > > > Added my comments below:
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > On Tue, 5 Apr 2022 at 20:22, Chris Egerton <
>> > > > > > > > > > > > fearthecel...@gmail.com>
>> > > > > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > Looking good! I have a few comments left
>> but
>> > > all
>> > > > > but
>> > > > > > > one
>> > > > > > > > or
>> > > > > > > > > > two
>> > > > > > > > > > > > are
>> > > > > > > > > > > > > > > > minor.
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > 1. The motivation section states "This
>> KIP is
>> > > > aimed
>> > > > > > to
>> > > > > > > > > > include
>> > > > > > > > > > > > > > support
>> > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > nested structures on the existing SMTs...
>> and
>> > > to
>> > > > > > > include
>> > > > > > > > > the
>> > > > > > > > > > > > > > > abstractions
>> > > > > > > > > > > > > > > > > to reuse this in future SMTs". A good
>> > > > > implementation
>> > > > > > of
>> > > > > > > > > this
>> > > > > > > > > > > KIP
>> > > > > > > > > > > > > will
>> > > > > > > > > > > > > > > > > definitely isolate reusable logic into a
>> > > separate
>> > > > > > > > > abstraction
>> > > > > > > > > > > > that
>> > > > > > > > > > > > > > can
>> > > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > easily pulled in to the SMTs we want to
>> add
>> > > > nested
>> > > > > > > field
>> > > > > > > > > > > support
>> > > > > > > > > > > > > to,
>> > > > > > > > > > > > > > > but
>> > > > > > > > > > > > > > > > > unless we plan on making this kind of
>> > > abstraction
>> > > > > > > > publicly
>> > > > > > > > > > > > > available
>> > > > > > > > > > > > > > as
>> > > > > > > > > > > > > > > > > some kind of utility method or class that
>> > > > external
>> > > > > > SMT
>> > > > > > > > > > > developers
>> > > > > > > > > > > > > can
>> > > > > > > > > > > > > > > > > leverage, we can probably leave this part
>> out
>> > > as
>> > > > > it's
>> > > > > > > > more
>> > > > > > > > > of
>> > > > > > > > > > > an
>> > > > > > > > > > > > > > > > > implementation detail.
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > Make sense, will leave this out of the KIP.
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > 2. The Cast example is a little
>> misleading,
>> > > isn't
>> > > > > it?
>> > > > > > > It
>> > > > > > > > > > > > > demonstrates
>> > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > escape syntax for fields with dot
>> literals in
>> > > > their
>> > > > > > > > names,
>> > > > > > > > > > but
>> > > > > > > > > > > it
>> > > > > > > > > > > > > > > doesn't
>> > > > > > > > > > > > > > > > > demonstrate a way to actually use the Cast
>> > (or
>> > > > any
>> > > > > > > other)
>> > > > > > > > > SMT
>> > > > > > > > > > > to
>> > > > > > > > > > > > > > > access a
>> > > > > > > > > > > > > > > > > nested field in a record, which is the
>> whole
>> > > > point
>> > > > > of
>> > > > > > > the
>> > > > > > > > > > KIP.
>> > > > > > > > > > > I
>> > > > > > > > > > > > > like
>> > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > example of escape syntax but we should
>> > probably
>> > > > > also
>> > > > > > > add
>> > > > > > > > > one
>> > > > > > > > > > > for
>> > > > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > > > field access.
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > Agree. I have added examples to each SMT to
>> be
>> > > more
>> > > > > > clear
>> > > > > > > > > about
>> > > > > > > > > > > how
>> > > > > > > > > > > > > it
>> > > > > > > > > > > > > > > > affects each function
>> > > > > > > > > > > > > > > > .
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > 3. With the InsertField SMT, I'm wondering
>> > what
>> > > > the
>> > > > > > > > > specific
>> > > > > > > > > > > > > behavior
>> > > > > > > > > > > > > > > > will
>> > > > > > > > > > > > > > > > > be when some or all of the "middle layer"
>> > > nested
>> > > > > > fields
>> > > > > > > > are
>> > > > > > > > > > > > > missing.
>> > > > > > > > > > > > > > > For
>> > > > > > > > > > > > > > > > > example, if I have a record with a value
>> of {
>> > > > "k1":
>> > > > > > > "v1 }
>> > > > > > > > > > and I
>> > > > > > > > > > > > > apply
>> > > > > > > > > > > > > > > > > InsertField with topic.field =
>> > n1.n2.n3.topic,
>> > > > what
>> > > > > > > will
>> > > > > > > > > > > happen?
>> > > > > > > > > > > > > Will
>> > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > updated value become { "k1": "v1", "n1": {
>> > > "n2":
>> > > > {
>> > > > > > > "n3":
>> > > > > > > > > > > "topic"
>> > > > > > > > > > > > > }}},
>> > > > > > > > > > > > > > > > will
>> > > > > > > > > > > > > > > > > an exception be thrown, or something else?
>> > This
>> > > > > seems
>> > > > > > > > > > analogous
>> > > > > > > > > > > > to
>> > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > command line mkdir command, which (at
>> least
>> > on
>> > > > some
>> > > > > > > > > operating
>> > > > > > > > > > > > > > systems)
>> > > > > > > > > > > > > > > > > fails by default if you try to create a
>> new
>> > > > nested
>> > > > > > > > > directory
>> > > > > > > > > > > > where
>> > > > > > > > > > > > > > > > anything
>> > > > > > > > > > > > > > > > > but the last element in the path doesn't
>> > exist,
>> > > > but
>> > > > > > can
>> > > > > > > > be
>> > > > > > > > > > > > invoked
>> > > > > > > > > > > > > > > with a
>> > > > > > > > > > > > > > > > > flag that instructs it to go ahead and
>> create
>> > > all
>> > > > > > > levels
>> > > > > > > > of
>> > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > > > directory instead. I'm leaning on the
>> side of
>> > > > "just
>> > > > > > > > create
>> > > > > > > > > > > > > > everything"
>> > > > > > > > > > > > > > > > but
>> > > > > > > > > > > > > > > > > would be interested in your thoughts, and
>> > > either
>> > > > > way,
>> > > > > > > we
>> > > > > > > > > > should
>> > > > > > > > > > > > > > > probably
>> > > > > > > > > > > > > > > > > make sure the intended behavior is
>> > well-defined
>> > > > > > before
>> > > > > > > > > > voting.
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > This is an interesting case, thanks for
>> > catching
>> > > > > this!
>> > > > > > > > > > > > > > > > The default behavior I see is to create
>> parents
>> > > if
>> > > > > they
>> > > > > > > are
>> > > > > > > > > > > missing
>> > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > overwrite fields
>> > > > > > > > > > > > > > > > if they already exist.
>> > > > > > > > > > > > > > > > I'm planning to include the following two
>> flags
>> > > if
>> > > > > > there
>> > > > > > > > is a
>> > > > > > > > > > > need
>> > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > overwrite this behavior:
>> > > > > > > > > > > > > > > > - `on_missing_parent` = (CREATE|IGNORE),
>> > > > > default=CREATE
>> > > > > > > > > > > > > > > > - `on_existing_field` = (OVERWRITE|IGNORE),
>> > > > > > > > default=OVERWRITE
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > 4. Similarly, what will the behavior be if
>> > any
>> > > of
>> > > > > the
>> > > > > > > > field
>> > > > > > > > > > > > > elements
>> > > > > > > > > > > > > > > > > specified with InsertField already exist
>> in
>> > the
>> > > > > > record
>> > > > > > > > > value?
>> > > > > > > > > > > > Will
>> > > > > > > > > > > > > we
>> > > > > > > > > > > > > > > > just
>> > > > > > > > > > > > > > > > > overwrite them? What's the behavior of
>> > > > InsertField
>> > > > > > > today
>> > > > > > > > > > under
>> > > > > > > > > > > > > > similar
>> > > > > > > > > > > > > > > > > circumstances?
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > The current behavior is to overwrite the
>> value.
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > Chris
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > On Thu, Mar 31, 2022 at 4:15 PM Jorge
>> Esteban
>> > > > > > Quilcate
>> > > > > > > > > Otoya
>> > > > > > > > > > <
>> > > > > > > > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > Thanks, Chris! Much appreciated all the
>> > > > feedback
>> > > > > > > here.
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > 1. You nailed it setting the design goal
>> > > here:
>> > > > > "it
>> > > > > > > > > > shouldn't
>> > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > impossible
>> > > > > > > > > > > > > > > > > > to use this new feature for any field
>> name,
>> > > no
>> > > > > > matter
>> > > > > > > > how
>> > > > > > > > > > > > > > convoluted.
>> > > > > > > > > > > > > > > > > It's
>> > > > > > > > > > > > > > > > > > fine if edge cases introduce difficulty
>> > (such
>> > > > as
>> > > > > > > > > > > less-readable
>> > > > > > > > > > > > > > > > > > configurations), but it's not fine if
>> they
>> > > > can't
>> > > > > be
>> > > > > > > > > > addressed
>> > > > > > > > > > > > at
>> > > > > > > > > > > > > > > all."
>> > > > > > > > > > > > > > > > > > Back to the previous proposals (using
>> only
>> > > dots
>> > > > > as
>> > > > > > > > > > > separators)
>> > > > > > > > > > > > we
>> > > > > > > > > > > > > > > have
>> > > > > > > > > > > > > > > > 2
>> > > > > > > > > > > > > > > > > > alternatives:
>> > > > > > > > > > > > > > > > > > 1. escaping with backslashes
>> > > > > > > > > > > > > > > > > > 2. escaping with dots itself
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > I'll lean for alternative 2, as you
>> > proposed
>> > > > > > before.
>> > > > > > > > > Feels
>> > > > > > > > > > to
>> > > > > > > > > > > > me
>> > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > backslashes have more potential to lead
>> to
>> > > > > > confusion
>> > > > > > > in
>> > > > > > > > > > JSON
>> > > > > > > > > > > > > > configs,
>> > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > CSV seems like a good precedent to use
>> the
>> > > same
>> > > > > > > > character
>> > > > > > > > > > to
>> > > > > > > > > > > > > escape
>> > > > > > > > > > > > > > > > > itself.
>> > > > > > > > > > > > > > > > > > KIP is updated to reflect this.
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > 2. Thanks! I'll add an example, and
>> stick
>> > > with
>> > > > > the
>> > > > > > > > > current
>> > > > > > > > > > > > > approach
>> > > > > > > > > > > > > > > > > > defining the style per individual
>> transform
>> > > > > > > > > configuration.
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > 3. Yes, thanks! KIP updated.
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > 4. Of course. KIP updated.
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > On Mon, 28 Mar 2022 at 21:59, Chris
>> > Egerton <
>> > > > > > > > > > > > > > fearthecel...@gmail.com
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > Thanks for addressing my comments; the
>> > KIP
>> > > > > looks
>> > > > > > > > > > up-to-date
>> > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > pretty
>> > > > > > > > > > > > > > > > > > > readable now, and the rejected
>> > alternatives
>> > > > > > section
>> > > > > > > > > does
>> > > > > > > > > > a
>> > > > > > > > > > > > > great
>> > > > > > > > > > > > > > > job
>> > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > outlining the discussion so far and
>> > > providing
>> > > > > > > context
>> > > > > > > > > for
>> > > > > > > > > > > > > anyone
>> > > > > > > > > > > > > > > else
>> > > > > > > > > > > > > > > > > who
>> > > > > > > > > > > > > > > > > > > might want to join in.
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > 1. Thoughts on choice of delimiter:
>> > > > > > > > > > > > > > > > > > > - I like the optimization for simple
>> > cases,
>> > > > > but I
>> > > > > > > > think
>> > > > > > > > > > the
>> > > > > > > > > > > > new
>> > > > > > > > > > > > > > > > > proposal
>> > > > > > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > > > a little too restrictive. What if
>> > there's a
>> > > > > field
>> > > > > > > > whose
>> > > > > > > > > > > name
>> > > > > > > > > > > > > > > contains
>> > > > > > > > > > > > > > > > > all
>> > > > > > > > > > > > > > > > > > > of the permitted options (currently
>> just
>> > > ".",
>> > > > > > ",",
>> > > > > > > > and
>> > > > > > > > > > > "/")?
>> > > > > > > > > > > > > > > > > > > - If we expand the set of permitted
>> > > > delimiters
>> > > > > to
>> > > > > > > > allow
>> > > > > > > > > > for
>> > > > > > > > > > > > any
>> > > > > > > > > > > > > > > > > > > single-character string, configuration
>> > > > > complexity
>> > > > > > > > will
>> > > > > > > > > > > > increase
>> > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > readability may decrease
>> > > > > > > > > > > > > > > > > > > - Also worth pointing out that there
>> is
>> > > some
>> > > > > > > > convention
>> > > > > > > > > > for
>> > > > > > > > > > > > > > > doubling
>> > > > > > > > > > > > > > > > a
>> > > > > > > > > > > > > > > > > > > delimiter character as an escape
>> > mechanism
>> > > > with
>> > > > > > > > formats
>> > > > > > > > > > > like
>> > > > > > > > > > > > > CSV
>> > > > > > > > > > > > > > > [1]
>> > > > > > > > > > > > > > > > > > > - Overall I think we may be
>> approaching
>> > the
>> > > > > > > > saturation
>> > > > > > > > > > > point
>> > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > productive
>> > > > > > > > > > > > > > > > > > > discussion on delimiter syntax so I
>> don't
>> > > > want
>> > > > > to
>> > > > > > > > spend
>> > > > > > > > > > too
>> > > > > > > > > > > > > much
>> > > > > > > > > > > > > > > more
>> > > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > your time on it. I think the one point
>> > I'd
>> > > > like
>> > > > > > to
>> > > > > > > > > leave
>> > > > > > > > > > > for
>> > > > > > > > > > > > > now
>> > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > it
>> > > > > > > > > > > > > > > > > > > shouldn't be impossible to use this
>> new
>> > > > feature
>> > > > > > for
>> > > > > > > > any
>> > > > > > > > > > > field
>> > > > > > > > > > > > > > name,
>> > > > > > > > > > > > > > > > no
>> > > > > > > > > > > > > > > > > > > matter how convoluted. It's fine if
>> edge
>> > > > cases
>> > > > > > > > > introduce
>> > > > > > > > > > > > > > difficulty
>> > > > > > > > > > > > > > > > > (such
>> > > > > > > > > > > > > > > > > > > as less-readable configurations), but
>> > it's
>> > > > not
>> > > > > > fine
>> > > > > > > > if
>> > > > > > > > > > they
>> > > > > > > > > > > > > can't
>> > > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > > > addressed at all.
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > 2.
>> > > > > > > > > > > > > > > > > > > The configuration style where you
>> define
>> > > > > > > > > > > > > "transforms.field.style"
>> > > > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > connector config, and then this
>> applies
>> > to
>> > > > all
>> > > > > > SMTs
>> > > > > > > > for
>> > > > > > > > > > the
>> > > > > > > > > > > > > > > > connector,
>> > > > > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > > > very interesting. However, it doesn't
>> > > follow
>> > > > > > > > convention
>> > > > > > > > > > for
>> > > > > > > > > > > > > > > existing
>> > > > > > > > > > > > > > > > > > SMTs.
>> > > > > > > > > > > > > > > > > > > Right now, if you want to configure an
>> > SMT,
>> > > > you
>> > > > > > > > define
>> > > > > > > > > > its
>> > > > > > > > > > > > name
>> > > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > connector config (for example,
>> > > "transforms":
>> > > > > > > "smt1"),
>> > > > > > > > > and
>> > > > > > > > > > > > then
>> > > > > > > > > > > > > > > define
>> > > > > > > > > > > > > > > > > all
>> > > > > > > > > > > > > > > > > > > of the properties for that SMT in the
>> > > > connector
>> > > > > > > > config
>> > > > > > > > > > > using
>> > > > > > > > > > > > a
>> > > > > > > > > > > > > > > > > > namespacing
>> > > > > > > > > > > > > > > > > > > mechanism specific to that SMT (for
>> > > example,
>> > > > > > > > > > > > > > > "transforms.smt1.prop1":
>> > > > > > > > > > > > > > > > > > > "val1"). That SMT then sees only the
>> > > > properties
>> > > > > > > > defined
>> > > > > > > > > > in
>> > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > namespace,
>> > > > > > > > > > > > > > > > > > > with the prefix stripped (for example,
>> > > > "prop1":
>> > > > > > > > "val1")
>> > > > > > > > > > in
>> > > > > > > > > > > > its
>> > > > > > > > > > > > > > > > > configure
>> > > > > > > > > > > > > > > > > > > [2] [3] method.
>> > > > > > > > > > > > > > > > > > > If we want to continue to follow this
>> > > > > convention,
>> > > > > > > > then
>> > > > > > > > > > > > instead
>> > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > specifying "transforms.field.style"
>> in a
>> > > > > > connector
>> > > > > > > > > > config,
>> > > > > > > > > > > we
>> > > > > > > > > > > > > > would
>> > > > > > > > > > > > > > > > > > expect
>> > > > > > > > > > > > > > > > > > > users to configure
>> > > > > > "transforms.<name>.field.style",
>> > > > > > > > for
>> > > > > > > > > > > each
>> > > > > > > > > > > > > SMT
>> > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > they
>> > > > > > > > > > > > > > > > > > > want to configure a field style for.
>> This
>> > > > would
>> > > > > > > > require
>> > > > > > > > > > > more
>> > > > > > > > > > > > > work
>> > > > > > > > > > > > > > > on
>> > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > part of the user, but would be
>> simpler to
>> > > > > reason
>> > > > > > > > about
>> > > > > > > > > > and
>> > > > > > > > > > > > > easier
>> > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > implement.
>> > > > > > > > > > > > > > > > > > > If we want to explore an alternative
>> > where
>> > > > > users
>> > > > > > > can
>> > > > > > > > > > > specify
>> > > > > > > > > > > > > > global
>> > > > > > > > > > > > > > > > > > > properties that apply to all
>> transforms
>> > in
>> > > a
>> > > > > > > > connector
>> > > > > > > > > > > > config,
>> > > > > > > > > > > > > > then
>> > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > semantics for this need to be defined
>> in
>> > > the
>> > > > > KIP.
>> > > > > > > > This
>> > > > > > > > > > > would
>> > > > > > > > > > > > > have
>> > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > include whether this will apply only
>> for
>> > > the
>> > > > > > > special
>> > > > > > > > > case
>> > > > > > > > > > > of
>> > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > "field.style" and possibly
>> > > "field.separator"
>> > > > > > > > properties
>> > > > > > > > > > or
>> > > > > > > > > > > if
>> > > > > > > > > > > > > it
>> > > > > > > > > > > > > > > > would
>> > > > > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > > > available more generally for other
>> > > > properties,
>> > > > > > > > whether
>> > > > > > > > > it
>> > > > > > > > > > > > will
>> > > > > > > > > > > > > > > apply
>> > > > > > > > > > > > > > > > > only
>> > > > > > > > > > > > > > > > > > > for the SMTs outlined in the KIP or if
>> > the
>> > > > > > > > > "field.style"
>> > > > > > > > > > > and
>> > > > > > > > > > > > > > > possibly
>> > > > > > > > > > > > > > > > > > > "field.separator" properties would
>> also
>> > be
>> > > > > passed
>> > > > > > > > into
>> > > > > > > > > > > custom
>> > > > > > > > > > > > > > SMTs
>> > > > > > > > > > > > > > > so
>> > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > they could choose to act on them if
>> > > > applicable,
>> > > > > > how
>> > > > > > > > > edge
>> > > > > > > > > > > > cases
>> > > > > > > > > > > > > > like
>> > > > > > > > > > > > > > > > > > having
>> > > > > > > > > > > > > > > > > > > an SMT named "field" in your connector
>> > > config
>> > > > > > would
>> > > > > > > > be
>> > > > > > > > > > > > handled,
>> > > > > > > > > > > > > > > etc.
>> > > > > > > > > > > > > > > > > > > Either way, it might help to have an
>> > > example
>> > > > in
>> > > > > > the
>> > > > > > > > KIP
>> > > > > > > > > > > > > outlining
>> > > > > > > > > > > > > > > how
>> > > > > > > > > > > > > > > > > one
>> > > > > > > > > > > > > > > > > > > of the to-be-augmented SMTs can be
>> > > configured
>> > > > > > with
>> > > > > > > > this
>> > > > > > > > > > new
>> > > > > > > > > > > > > > feature
>> > > > > > > > > > > > > > > > > and a
>> > > > > > > > > > > > > > > > > > > before/after of how a record value
>> would
>> > be
>> > > > > > > > transformed
>> > > > > > > > > > > with
>> > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > configuration.
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > 3. The docstring for the
>> > > > > "transforms.field.style"
>> > > > > > > > > > property
>> > > > > > > > > > > > > > mentions
>> > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > the permitted values are "plain" and
>> > > > "nested",
>> > > > > > but
>> > > > > > > > then
>> > > > > > > > > > > > > describes
>> > > > > > > > > > > > > > > > > > behavior
>> > > > > > > > > > > > > > > > > > > with a value of "root". Should that be
>> > > > "plain"
>> > > > > > > > instead?
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > 4. The docstring for the
>> > > > > > > "transforms.field.separator"
>> > > > > > > > > > > > property
>> > > > > > > > > > > > > > > > > > exclusively
>> > > > > > > > > > > > > > > > > > > mentions structs, but the feature is
>> > > intended
>> > > > > to
>> > > > > > > work
>> > > > > > > > > > with
>> > > > > > > > > > > > maps
>> > > > > > > > > > > > > > as
>> > > > > > > > > > > > > > > > > well.
>> > > > > > > > > > > > > > > > > > > Can we update it to reflect this?
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > References:
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > [1] -
>> > https://stackoverflow.com/a/17808731
>> > > > > > > > > > > > > > > > > > > [2] -
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/kafka/blob/7243facb8d69a7252e6b9556b5eaee13e41bab7f/connect/api/src/main/java/org/apache/kafka/connect/transforms/Transformation.java#L30
>> > > > > > > > > > > > > > > > > > > [3] -
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://github.com/apache/kafka/blob/7243facb8d69a7252e6b9556b5eaee13e41bab7f/clients/src/main/java/org/apache/kafka/common/Configurable.java#L26-L29
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > Chris
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > On Mon, Mar 28, 2022 at 1:32 PM Jorge
>> > > Esteban
>> > > > > > > > Quilcate
>> > > > > > > > > > > Otoya
>> > > > > > > > > > > > <
>> > > > > > > > > > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > Thanks, Chris!
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > 1. I'd argue "this..field.child"
>> could
>> > be
>> > > > > > harder
>> > > > > > > to
>> > > > > > > > > > grasp
>> > > > > > > > > > > > > than
>> > > > > > > > > > > > > > > > > > > > "this.field/child" + separator: "/".
>> > > > > > > > > > > > > > > > > > > > Even though this represents
>> additional
>> > > > > > > information,
>> > > > > > > > > it
>> > > > > > > > > > > > > follows
>> > > > > > > > > > > > > > a
>> > > > > > > > > > > > > > > > > > similar
>> > > > > > > > > > > > > > > > > > > > approach as the "Flatten#delimeter"
>> > > > > > > configuration.
>> > > > > > > > > > > > > > > > > > > > I want to give the separator
>> approach
>> > > > another
>> > > > > > > try,
>> > > > > > > > > so I
>> > > > > > > > > > > > have
>> > > > > > > > > > > > > > > > updated
>> > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > KIP with the separator proposal,
>> > sticking
>> > > > to
>> > > > > > > only 2
>> > > > > > > > > > > > > > alternatives
>> > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > should hopefully cover most
>> scenarios.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > 2. Agree. KIP has been updated with
>> > this
>> > > > > > > > improvement.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > 3. You're right. I have updated this
>> > > > section
>> > > > > > > > > > accordingly.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > 4. Good catch! I've replaced it with
>> > > > > > > `DropHeaders`.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > Looking forward to your feedback.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > Thanks,
>> > > > > > > > > > > > > > > > > > > > Jorge.
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > On Wed, 9 Mar 2022 at 21:33, Chris
>> > > Egerton
>> > > > <
>> > > > > > > > > > > > > > > > fearthecel...@gmail.com>
>> > > > > > > > > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > Looking good! Got a few more
>> > thoughts.
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > 1. Sorry to revisit this, but I
>> think
>> > > we
>> > > > > may
>> > > > > > > want
>> > > > > > > > > to
>> > > > > > > > > > > > adopt
>> > > > > > > > > > > > > a
>> > > > > > > > > > > > > > > > > slightly
>> > > > > > > > > > > > > > > > > > > > > different escape syntax style.
>> > > > Backslashes
>> > > > > > are
>> > > > > > > > > great,
>> > > > > > > > > > > but
>> > > > > > > > > > > > > > since
>> > > > > > > > > > > > > > > > > > they're
>> > > > > > > > > > > > > > > > > > > > > already used by JSON, using them
>> as
>> > an
>> > > > > escape
>> > > > > > > > > > sequence
>> > > > > > > > > > > in
>> > > > > > > > > > > > > > field
>> > > > > > > > > > > > > > > > > > > notation
>> > > > > > > > > > > > > > > > > > > > > would also lead to some pretty
>> ugly
>> > > > > connector
>> > > > > > > > > > configs.
>> > > > > > > > > > > > > Anyone
>> > > > > > > > > > > > > > > > who's
>> > > > > > > > > > > > > > > > > > had
>> > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > write regular expressions with
>> > > > backslashes
>> > > > > in
>> > > > > > > > Java
>> > > > > > > > > is
>> > > > > > > > > > > > > > probably
>> > > > > > > > > > > > > > > > > > already
>> > > > > > > > > > > > > > > > > > > > > familiar with this:
>> > > > > > > > > > > > > > > "this\\\\.is\\\\.not\\\\.very\\\\.readable".
>> > > > > > > > > > > > > > > > > What
>> > > > > > > > > > > > > > > > > > > do
>> > > > > > > > > > > > > > > > > > > > > you think about using the dot
>> > character
>> > > > to
>> > > > > > > escape
>> > > > > > > > > > > itself?
>> > > > > > > > > > > > > In
>> > > > > > > > > > > > > > > > other
>> > > > > > > > > > > > > > > > > > > words,
>> > > > > > > > > > > > > > > > > > > > > to access a single field named
>> > > > > "this.field",
>> > > > > > > > > instead
>> > > > > > > > > > of
>> > > > > > > > > > > > > using
>> > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > syntax
>> > > > > > > > > > > > > > > > > > > > > "this\.field" (which in JSON would
>> > have
>> > > > to
>> > > > > be
>> > > > > > > > > > expressed
>> > > > > > > > > > > > as
>> > > > > > > > > > > > > > > > > > > > "this\\.field"),
>> > > > > > > > > > > > > > > > > > > > > we could use "this..field", and
>> for a
>> > > > > single
>> > > > > > > > field
>> > > > > > > > > > > named
>> > > > > > > > > > > > > > > > > > "this\field",
>> > > > > > > > > > > > > > > > > > > > > instead of using the syntax
>> > > "this\\field"
>> > > > > > (or,
>> > > > > > > in
>> > > > > > > > > > JSON,
>> > > > > > > > > > > > > > > > > > > "this\\\\field"),
>> > > > > > > > > > > > > > > > > > > > > we could use "this\field" (or, in
>> > JSON,
>> > > > > > > > > > "this\\field").
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > 2. Could you flesh out the
>> details on
>> > > the
>> > > > > new
>> > > > > > > > > > > > "field.style"
>> > > > > > > > > > > > > > > > > property,
>> > > > > > > > > > > > > > > > > > > > > including the type, default value,
>> > > > > > importance,
>> > > > > > > > and
>> > > > > > > > > a
>> > > > > > > > > > > > > > > preliminary
>> > > > > > > > > > > > > > > > > > > > docstring?
>> > > > > > > > > > > > > > > > > > > > > See
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-618%3A+Exactly-Once+Support+for+Source+Connectors#KIP618:ExactlyOnceSupportforSourceConnectors-Newproperties
>> > > > > > > > > > > > > > > > > > > > > for an example.
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > 3. Is the "Compatibility,
>> > Deprecation,
>> > > > and
>> > > > > > > > > Migration
>> > > > > > > > > > > > Plan"
>> > > > > > > > > > > > > > > > section
>> > > > > > > > > > > > > > > > > > > still
>> > > > > > > > > > > > > > > > > > > > > accurate after the latest update?
>> > Seems
>> > > > > like
>> > > > > > > it's
>> > > > > > > > > > still
>> > > > > > > > > > > > > > written
>> > > > > > > > > > > > > > > > > with
>> > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > assumption that nested field
>> syntax
>> > > will
>> > > > be
>> > > > > > > > > hardcoded
>> > > > > > > > > > > or
>> > > > > > > > > > > > > > > opt-in,
>> > > > > > > > > > > > > > > > > > which
>> > > > > > > > > > > > > > > > > > > > IIUC
>> > > > > > > > > > > > > > > > > > > > > isn't the case anymore.
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > 4. Nit: The "These SMTs do not
>> > require
>> > > > > nested
>> > > > > > > > > > structure
>> > > > > > > > > > > > > > > support"
>> > > > > > > > > > > > > > > > > > > section
>> > > > > > > > > > > > > > > > > > > > > mentions a "Drop" SMT. I think
>> this
>> > may
>> > > > be
>> > > > > > > > > referring
>> > > > > > > > > > to
>> > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > Confluent
>> > > > > > > > > > > > > > > > > > > > Drop
>> > > > > > > > > > > > > > > > > > > > > SMT, which isn't a part of Apache
>> > > Kafka.
>> > > > > > Should
>> > > > > > > > we
>> > > > > > > > > > drop
>> > > > > > > > > > > > > (heh)
>> > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > SMT
>> > > > > > > > > > > > > > > > > > > > from
>> > > > > > > > > > > > > > > > > > > > > the list? Or perhaps just replace
>> it
>> > > with
>> > > > > > > > > > > "DropHeaders",
>> > > > > > > > > > > > > > which
>> > > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > > > > currently
>> > > > > > > > > > > > > > > > > > > > > missing from the list and
>> shouldn't
>> > > > require
>> > > > > > any
>> > > > > > > > > > > > > nested-field
>> > > > > > > > > > > > > > > > > related
>> > > > > > > > > > > > > > > > > > > > > updates?
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > Chris
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > On Mon, Feb 28, 2022 at 2:12 PM
>> Jorge
>> > > > > Esteban
>> > > > > > > > > > Quilcate
>> > > > > > > > > > > > > Otoya
>> > > > > > > > > > > > > > <
>> > > > > > > > > > > > > > > > > > > > > quilcate.jo...@gmail.com> wrote:
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > Thank you, Chris! and sorry for
>> the
>> > > > > delayed
>> > > > > > > > > > response.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > Please, find my comments below:
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > On Mon, 14 Feb 2022 at 17:34,
>> Chris
>> > > > > Egerton
>> > > > > > > > > > > > > > > > > > > > <chr...@confluent.io.invalid
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > Hi Jorge,
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > Thanks for the KIP! I'd love
>> to
>> > see
>> > > > > > support
>> > > > > > > > for
>> > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > fields
>> > > > > > > > > > > > > > > > > > added
>> > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > > out-of-the-box SMTs provided
>> with
>> > > > > > Connect.
>> > > > > > > > Here
>> > > > > > > > > > are
>> > > > > > > > > > > > my
>> > > > > > > > > > > > > > > > initial
>> > > > > > > > > > > > > > > > > > > > > thoughts:
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 1. I agree that there's a
>> case to
>> > > be
>> > > > > made
>> > > > > > > for
>> > > > > > > > > > > > expanding
>> > > > > > > > > > > > > > > > > > HoistField
>> > > > > > > > > > > > > > > > > > > > > with a
>> > > > > > > > > > > > > > > > > > > > > > > new config property for
>> > > identifying a
>> > > > > > > nested,
>> > > > > > > > > > > > > > to-be-hoisted
>> > > > > > > > > > > > > > > > > > field,
>> > > > > > > > > > > > > > > > > > > > but
>> > > > > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > > example in the KIP doesn't
>> really
>> > > > > > > demonstrate
>> > > > > > > > > why
>> > > > > > > > > > > > this
>> > > > > > > > > > > > > > > would
>> > > > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > > > > > > valuable. I
>> > > > > > > > > > > > > > > > > > > > > > > think it'd be helpful to
>> expand
>> > the
>> > > > > > example
>> > > > > > > > to
>> > > > > > > > > > add
>> > > > > > > > > > > > > other
>> > > > > > > > > > > > > > > > fields
>> > > > > > > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > > > > > > > order
>> > > > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > show how adding nested field
>> > > support
>> > > > > > > enables
>> > > > > > > > > > users
>> > > > > > > > > > > to
>> > > > > > > > > > > > > > > hoist a
>> > > > > > > > > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > > > > > > > > field
>> > > > > > > > > > > > > > > > > > > > > > > without dropping other fields
>> > from
>> > > > the
>> > > > > > > value.
>> > > > > > > > > > Maybe
>> > > > > > > > > > > > > > > something
>> > > > > > > > > > > > > > > > > > like
>> > > > > > > > > > > > > > > > > > > > > this:
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >     source = nested.val
>> > > > > > > > > > > > > > > > > > > > > > >     field = line
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >     value (before):
>> > > > > > > > > > > > > > > > > > > > > > >         {
>> > > > > > > > > > > > > > > > > > > > > > >             "nested": {
>> > > > > > > > > > > > > > > > > > > > > > >                 "val": 42,
>> > > > > > > > > > > > > > > > > > > > > > >                 "other val":
>> 96
>> > > > > > > > > > > > > > > > > > > > > > >             }
>> > > > > > > > > > > > > > > > > > > > > > >         }
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >     value (after):
>> > > > > > > > > > > > > > > > > > > > > > >         {
>> > > > > > > > > > > > > > > > > > > > > > >             "nested": {
>> > > > > > > > > > > > > > > > > > > > > > >                 "line": {
>> > > > > > > > > > > > > > > > > > > > > > >                     "val": 42,
>> > > > > > > > > > > > > > > > > > > > > > >                 }
>> > > > > > > > > > > > > > > > > > > > > > >                 "other val":
>> 96
>> > > > > > > > > > > > > > > > > > > > > > >             }
>> > > > > > > > > > > > > > > > > > > > > > >         }
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 2. Nit: I think "source" is a
>> > > little
>> > > > > > > strange
>> > > > > > > > > for
>> > > > > > > > > > > the
>> > > > > > > > > > > > > new
>> > > > > > > > > > > > > > > > > > HoistField
>> > > > > > > > > > > > > > > > > > > > > > > property name. Maybe
>> "hoisted" or
>> > > > > > > > > "hoisted.field"
>> > > > > > > > > > > > would
>> > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > more
>> > > > > > > > > > > > > > > > > > > > > > > descriptive?
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > About 1. and 2.:
>> > > > > > > > > > > > > > > > > > > > > > Agree. The example for this SMT
>> is
>> > > > > updated
>> > > > > > > and
>> > > > > > > > > have
>> > > > > > > > > > > > added
>> > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > `hoisted`
>> > > > > > > > > > > > > > > > > > > > > > configuration.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 3. Is there a reasonable use
>> case
>> > > for
>> > > > > > > > expanding
>> > > > > > > > > > > > Flatten
>> > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > be
>> > > > > > > > > > > > > > > > > > able
>> > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > flatten specific fields? My
>> > > > > understanding
>> > > > > > > is
>> > > > > > > > > that
>> > > > > > > > > > > > it's
>> > > > > > > > > > > > > > > mostly
>> > > > > > > > > > > > > > > > > > > useful
>> > > > > > > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > > > > > > writing to systems like
>> databases
>> > > > that
>> > > > > > > don't
>> > > > > > > > > > > support
>> > > > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > > > > values
>> > > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > > require everything to be a
>> flat
>> > > list
>> > > > of
>> > > > > > > > > key-value
>> > > > > > > > > > > > > pairs.
>> > > > > > > > > > > > > > > > Being
>> > > > > > > > > > > > > > > > > > able
>> > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > flatten a nested field
>> wouldn't
>> > > > provide
>> > > > > > any
>> > > > > > > > > > > advantage
>> > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > use
>> > > > > > > > > > > > > > > > > > > > > case.
>> > > > > > > > > > > > > > > > > > > > > > > Are there other cases where it
>> > > would?
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 4. I don't think we should
>> > > > > > unconditionally
>> > > > > > > > > change
>> > > > > > > > > > > the
>> > > > > > > > > > > > > > > default
>> > > > > > > > > > > > > > > > > > > > delimiter
>> > > > > > > > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > > > > > > Flatten. It's a
>> > > > backwards-incompatible,
>> > > > > > > > > breaking
>> > > > > > > > > > > > change
>> > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > could
>> > > > > > > > > > > > > > > > > > > > > cause
>> > > > > > > > > > > > > > > > > > > > > > > headaches for users. It might
>> be
>> > > > > > reasonable
>> > > > > > > > to
>> > > > > > > > > > > change
>> > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > default
>> > > > > > > > > > > > > > > > > > > > value
>> > > > > > > > > > > > > > > > > > > > > > > dynamically based on whether
>> the
>> > > user
>> > > > > has
>> > > > > > > > > > > specified a
>> > > > > > > > > > > > > > value
>> > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > "field"
>> > > > > > > > > > > > > > > > > > > > > > > property, but considering the
>> > > > > motivation
>> > > > > > > for
>> > > > > > > > > > > changing
>> > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > default
>> > > > > > > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > > > > it creates conflicts with the
>> > > > > > > > to-be-introduced
>> > > > > > > > > > > nested
>> > > > > > > > > > > > > > field
>> > > > > > > > > > > > > > > > > > syntax
>> > > > > > > > > > > > > > > > > > > > > (which
>> > > > > > > > > > > > > > > > > > > > > > > could arise with downstream
>> SMTs
>> > > > > > regardless
>> > > > > > > > of
>> > > > > > > > > > > > whether
>> > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > user
>> > > > > > > > > > > > > > > > > > has
>> > > > > > > > > > > > > > > > > > > > > > > explicitly configured Flatten
>> > with
>> > > > the
>> > > > > > > > "field"
>> > > > > > > > > > > > > > property), I
>> > > > > > > > > > > > > > > > > don't
>> > > > > > > > > > > > > > > > > > > > know
>> > > > > > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > > > > this would be too useful
>> either.
>> > I
>> > > > have
>> > > > > > > some
>> > > > > > > > > > > thoughts
>> > > > > > > > > > > > > > below
>> > > > > > > > > > > > > > > > on
>> > > > > > > > > > > > > > > > > > how
>> > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > handle possible conflicts
>> between
>> > > > names
>> > > > > > > with
>> > > > > > > > > dots
>> > > > > > > > > > > in
>> > > > > > > > > > > > > > their
>> > > > > > > > > > > > > > > > > names
>> > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > dotted
>> > > > > > > > > > > > > > > > > > > > > > > syntax for nested field
>> > references
>> > > > that
>> > > > > > > > should
>> > > > > > > > > > > > > hopefully
>> > > > > > > > > > > > > > > make
>> > > > > > > > > > > > > > > > > > > either
>> > > > > > > > > > > > > > > > > > > > > > change
>> > > > > > > > > > > > > > > > > > > > > > > unnecessary.
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > Fair enough. With the support
>> for
>> > > > nested
>> > > > > > > fields
>> > > > > > > > > in
>> > > > > > > > > > > > other
>> > > > > > > > > > > > > > > SMTs,
>> > > > > > > > > > > > > > > > > > > Flatten
>> > > > > > > > > > > > > > > > > > > > > > could stay as it is.
>> > > > > > > > > > > > > > > > > > > > > > This removes the need for (4)
>> > > changing
>> > > > > > > Flatten
>> > > > > > > > > > config
>> > > > > > > > > > > > as
>> > > > > > > > > > > > > > > well.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 5. I think it's fine to expand
>> > > > > > ExtractField
>> > > > > > > > to
>> > > > > > > > > > > > support
>> > > > > > > > > > > > > > > nested
>> > > > > > > > > > > > > > > > > > > > notation,
>> > > > > > > > > > > > > > > > > > > > > > but
>> > > > > > > > > > > > > > > > > > > > > > > it might be worth noting in
>> the
>> > > > > rejected
>> > > > > > > > > > > alternatives
>> > > > > > > > > > > > > > > section
>> > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > this
>> > > > > > > > > > > > > > > > > > > > > > > isn't strictly necessary since
>> > you
>> > > > can
>> > > > > > > > replace
>> > > > > > > > > > any
>> > > > > > > > > > > > > single
>> > > > > > > > > > > > > > > > > > > invocation
>> > > > > > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > > > > > that SMT that uses nested
>> field
>> > > > > notation
>> > > > > > > with
>> > > > > > > > > > > > multiple
>> > > > > > > > > > > > > > > > > > invocations
>> > > > > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > > > it
>> > > > > > > > > > > > > > > > > > > > > > > that use non-nested notation.
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > Agree. Adding it.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 6. Nit: "RegerRouter" should
>> be
>> > > > > > > "RegexRouter"
>> > > > > > > > > in
>> > > > > > > > > > > the
>> > > > > > > > > > > > > list
>> > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > SMTs
>> > > > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > > do
>> > > > > > > > > > > > > > > > > > > > > > > not require nested structure
>> > > support.
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > Ack. Fixing it.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 7. It may be rare for dots in
>> > field
>> > > > > names
>> > > > > > > to
>> > > > > > > > > > occur
>> > > > > > > > > > > in
>> > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > wild
>> > > > > > > > > > > > > > > > > > > > > (although
>> > > > > > > > > > > > > > > > > > > > > > I
>> > > > > > > > > > > > > > > > > > > > > > > wouldn't be so certain of
>> this),
>> > > but
>> > > > > > unless
>> > > > > > > > we
>> > > > > > > > > > want
>> > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > inflict
>> > > > > > > > > > > > > > > > > > > > > headaches
>> > > > > > > > > > > > > > > > > > > > > > on
>> > > > > > > > > > > > > > > > > > > > > > > users of Flatten, I think
>> we're
>> > > going
>> > > > > to
>> > > > > > > have
>> > > > > > > > > to
>> > > > > > > > > > > > think
>> > > > > > > > > > > > > > > about
>> > > > > > > > > > > > > > > > > > > > conflicts
>> > > > > > > > > > > > > > > > > > > > > > > between dotted notation and
>> > > > non-nested
>> > > > > > > fields
>> > > > > > > > > > whose
>> > > > > > > > > > > > > names
>> > > > > > > > > > > > > > > > > contain
>> > > > > > > > > > > > > > > > > > > > > dots. I
>> > > > > > > > > > > > > > > > > > > > > > > don't think this is actually
>> > such a
>> > > > bad
>> > > > > > > > thing,
>> > > > > > > > > > > > though.
>> > > > > > > > > > > > > I
>> > > > > > > > > > > > > > > > agree
>> > > > > > > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > > > > > > > > dotted
>> > > > > > > > > > > > > > > > > > > > > > > notation is intuitive and
>> pretty
>> > > > > > > commonplace
>> > > > > > > > > (in
>> > > > > > > > > > > > tools
>> > > > > > > > > > > > > > like
>> > > > > > > > > > > > > > > > jq,
>> > > > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > > > > > > example), so I'd like it if we
>> > > could
>> > > > > > stick
>> > > > > > > to
>> > > > > > > > > it.
>> > > > > > > > > > > > What
>> > > > > > > > > > > > > > > about
>> > > > > > > > > > > > > > > > > > > > > introducing
>> > > > > > > > > > > > > > > > > > > > > > > escape syntax, using a
>> backslash?
>> > > > That
>> > > > > > way,
>> > > > > > > > > users
>> > > > > > > > > > > > could
>> > > > > > > > > > > > > > > > > > > disambiguate
>> > > > > > > > > > > > > > > > > > > > > > > between "this.field" (which
>> would
>> > > > refer
>> > > > > > to
>> > > > > > > > the
>> > > > > > > > > > > nested
>> > > > > > > > > > > > > > field
>> > > > > > > > > > > > > > > > > > "field"
>> > > > > > > > > > > > > > > > > > > > > under
>> > > > > > > > > > > > > > > > > > > > > > > the top-level "this" field),
>> and
>> > > > > > > > "this\.field"
>> > > > > > > > > > > (which
>> > > > > > > > > > > > > > would
>> > > > > > > > > > > > > > > > > refer
>> > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > > field named "this.field").
>> Like
>> > > with
>> > > > > most
>> > > > > > > > > > languages
>> > > > > > > > > > > > > that
>> > > > > > > > > > > > > > > use
>> > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > backslash
>> > > > > > > > > > > > > > > > > > > > > > > for escape sequences, it could
>> > also
>> > > > be
>> > > > > > used
>> > > > > > > > to
>> > > > > > > > > > > escape
>> > > > > > > > > > > > > > > itself,
>> > > > > > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > event
>> > > > > > > > > > > > > > > > > > > > > > > that a field name contains a
>> > > > > backslash. I
>> > > > > > > > think
>> > > > > > > > > > > this
>> > > > > > > > > > > > is
>> > > > > > > > > > > > > > > more
>> > > > > > > > > > > > > > > > > > > > intuitive
>> > > > > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > > simpler than, e.g., adding a
>> new
>> > > > config
>> > > > > > > > > property
>> > > > > > > > > > to
>> > > > > > > > > > > > > > toggle
>> > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > delimiter
>> > > > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > be used when parsing nested
>> field
>> > > > > > > references.
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > I like this approach. Adding to
>> the
>> > > > KIP.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 8. I don't think we can
>> > > > unconditionally
>> > > > > > > turn
>> > > > > > > > > this
>> > > > > > > > > > > > > feature
>> > > > > > > > > > > > > > > on.
>> > > > > > > > > > > > > > > > > The
>> > > > > > > > > > > > > > > > > > > > risk
>> > > > > > > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > > > > > breaking existing pipelines
>> > > > (especially
>> > > > > > > ones
>> > > > > > > > > that
>> > > > > > > > > > > > > > involve,
>> > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > > > > example, a
>> > > > > > > > > > > > > > > > > > > > > > > combination of the Flatten and
>> > Cast
>> > > > > SMTs)
>> > > > > > > is
>> > > > > > > > > > pretty
>> > > > > > > > > > > > > > high. I
>> > > > > > > > > > > > > > > > > think
>> > > > > > > > > > > > > > > > > > > > this
>> > > > > > > > > > > > > > > > > > > > > > > should be an opt-in feature,
>> at
>> > > least
>> > > > > > until
>> > > > > > > > the
>> > > > > > > > > > > next
>> > > > > > > > > > > > > > major
>> > > > > > > > > > > > > > > > > > release.
>> > > > > > > > > > > > > > > > > > > > One
>> > > > > > > > > > > > > > > > > > > > > > way
>> > > > > > > > > > > > > > > > > > > > > > > we could accomplish this is by
>> > > > > > introducing
>> > > > > > > a
>> > > > > > > > > new
>> > > > > > > > > > > > > > > > "field.style"
>> > > > > > > > > > > > > > > > > > > (name
>> > > > > > > > > > > > > > > > > > > > > > > obviously subject to change)
>> > > property
>> > > > > > with
>> > > > > > > > > values
>> > > > > > > > > > > of
>> > > > > > > > > > > > > > > "plain"
>> > > > > > > > > > > > > > > > > > > > (default)
>> > > > > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > > "nested". If set to "plain"
>> then
>> > > the
>> > > > > > > current
>> > > > > > > > > > > > non-nested
>> > > > > > > > > > > > > > > > > behavior
>> > > > > > > > > > > > > > > > > > is
>> > > > > > > > > > > > > > > > > > > > > used,
>> > > > > > > > > > > > > > > > > > > > > > > and if set to "nested", then
>> the
>> > > > > proposed
>> > > > > > > > > nested
>> > > > > > > > > > > > > behavior
>> > > > > > > > > > > > > > > is.
>> > > > > > > > > > > > > > > > > We
>> > > > > > > > > > > > > > > > > > > can
>> > > > > > > > > > > > > > > > > > > > > > > consider updating the default
>> > value
>> > > > to
>> > > > > > > > "nested"
>> > > > > > > > > > in
>> > > > > > > > > > > a
>> > > > > > > > > > > > > > future
>> > > > > > > > > > > > > > > > > major
>> > > > > > > > > > > > > > > > > > > > > release
>> > > > > > > > > > > > > > > > > > > > > > > (or even codify that plan in
>> this
>> > > > KIP,
>> > > > > if
>> > > > > > > > > there's
>> > > > > > > > > > > > > enough
>> > > > > > > > > > > > > > > > > support
>> > > > > > > > > > > > > > > > > > > for
>> > > > > > > > > > > > > > > > > > > > > it).
>> > > > > > > > > > > > > > > > > > > > > > > This would also leave the door
>> > open
>> > > > for
>> > > > > > > > adding
>> > > > > > > > > > > > > recursive
>> > > > > > > > > > > > > > > > > support
>> > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > SMTs
>> > > > > > > > > > > > > > > > > > > > > > in
>> > > > > > > > > > > > > > > > > > > > > > > the future by adding a
>> permitted
>> > > > value
>> > > > > of
>> > > > > > > > > > > > "recursive".
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > 9. One of the linked tickets
>> in
>> > the
>> > > > > > > > > "Motivation"
>> > > > > > > > > > > > > section,
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > https://issues.apache.org/jira/browse/KAFKA-10640,
>> > > > > > > > > > > > has
>> > > > > > > > > > > > > > an
>> > > > > > > > > > > > > > > > open
>> > > > > > > > > > > > > > > > > > PR
>> > > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > KIP
>> > > > > > > > > > > > > > > > > > > > > > > that propose adding recursive
>> > > support
>> > > > > to
>> > > > > > > some
>> > > > > > > > > > SMTs.
>> > > > > > > > > > > > > Have
>> > > > > > > > > > > > > > > you
>> > > > > > > > > > > > > > > > > > > > considered
>> > > > > > > > > > > > > > > > > > > > > > > this type of functionality for
>> > your
>> > > > > KIP?
>> > > > > > Or
>> > > > > > > > is
>> > > > > > > > > > your
>> > > > > > > > > > > > aim
>> > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > stick
>> > > > > > > > > > > > > > > > > > > > solely
>> > > > > > > > > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > > > > > nested field support?
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > I like the `field.style`
>> > > configuration
>> > > > > flag
>> > > > > > > > > > approach.
>> > > > > > > > > > > > > > > > > > > > > > Thanks for pointing out the
>> > > `recursive`
>> > > > > > > > approach.
>> > > > > > > > > > > Will
>> > > > > > > > > > > > > add
>> > > > > > > > > > > > > > > > > `nested`
>> > > > > > > > > > > > > > > > > > > at
>> > > > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > moment, let's check the demand
>> for
>> > > > > > > `recursive`
>> > > > > > > > to
>> > > > > > > > > > > > > consider
>> > > > > > > > > > > > > > it
>> > > > > > > > > > > > > > > > as
>> > > > > > > > > > > > > > > > > > part
>> > > > > > > > > > > > > > > > > > > > of
>> > > > > > > > > > > > > > > > > > > > > > this or another KIP.
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > I have added the following on
>> the
>> > > KIP:
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > ```
>> > > > > > > > > > > > > > > > > > > > > > Future KIPs could extend this
>> > support
>> > > > > for:
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > - Recursive notation: name a
>> field
>> > > and
>> > > > > > apply
>> > > > > > > it
>> > > > > > > > > to
>> > > > > > > > > > > all
>> > > > > > > > > > > > > > fields
>> > > > > > > > > > > > > > > > > > across
>> > > > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > schema matching that name.
>> > > > > > > > > > > > > > > > > > > > > > - Access to arrays: Adding `[]`
>> > > > notation
>> > > > > to
>> > > > > > > > > > represent
>> > > > > > > > > > > > > > access
>> > > > > > > > > > > > > > > to
>> > > > > > > > > > > > > > > > > > > arrays
>> > > > > > > > > > > > > > > > > > > > > and
>> > > > > > > > > > > > > > > > > > > > > > applying SMTs to fields within
>> an
>> > > > array.
>> > > > > > > > > > > > > > > > > > > > > > ```
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > Cheers,
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > Chris
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > On Tue, Feb 8, 2022 at 1:23 PM
>> > > Jorge
>> > > > > > > Esteban
>> > > > > > > > > > > Quilcate
>> > > > > > > > > > > > > > > Otoya <
>> > > > > > > > > > > > > > > > > > > > > > > quilcate.jo...@gmail.com>
>> wrote:
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > > Hi Dev team,
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > > I'd like to start a new
>> > > discussion
>> > > > > > thread
>> > > > > > > > on
>> > > > > > > > > > > Kafka
>> > > > > > > > > > > > > > > Connect
>> > > > > > > > > > > > > > > > > > > KIP-821:
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>> https://cwiki.apache.org/confluence/display/KAFKA/KIP-821%3A+Connect+Transforms+support+for+nested+structures
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > > This KIP is aimed to include
>> > > > support
>> > > > > > for
>> > > > > > > > > nested
>> > > > > > > > > > > > > > > structures
>> > > > > > > > > > > > > > > > on
>> > > > > > > > > > > > > > > > > > the
>> > > > > > > > > > > > > > > > > > > > > > > existing
>> > > > > > > > > > > > > > > > > > > > > > > > SMTs — where this make
>> sense.
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > > Looking forward to your
>> > feedback.
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > > > Regards,
>> > > > > > > > > > > > > > > > > > > > > > > > Jorge.
>> > > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > > >
>> > > > > > > > > > > > > > >
>> > > > > > > > > > > > > >
>> > > > > > > > > > > > >
>> > > > > > > > > > > >
>> > > > > > > > > > >
>> > > > > > > > > >
>> > > > > > > > >
>> > > > > > > >
>> > > > > > >
>> > > > > >
>> > > > >
>> > > >
>> > >
>> >
>>
>

Reply via email to