Thanks for the detailed explanation! It's all very clear now.
I agree that when doing a typical enrichment (weather, geo location data, etc) you don't wanna mess with your original entity, it's just a bad practice.
I'm more interested in a process which is denormalizing data (e.g transferring code fields to strings) or decoding, also in some of the cases to copy few fields from another object. They can of course be represented in a separate context / table but it's not the natural way to represent the data, especially since the extra field aren't really grouped into a single context.
Those extra fields are unknown during (or hidden from) the event tracking stage, it's related to the source tracking the event.
I guess a more correct design for my case would be some kind of a pipeline which collects the event into a staging stream, then transferring as needed and storing them into the stream processed by the enrichment part.
But since the collector is and the enricher are using the thrift event format I found and are easily connectable I found the
the enrichment process as the best / simplest place to fetch and use them, also in terms of performance and throughput.
Best,
Gil.