Technical requirementsTask 6 – Using an external service for data augmentationDefining the problemDiscussing the problem decompositionImplementing the solutionTesting our solutionDeploying our solutionIntroducing the primitive PTransform object – stateless ParDoTask 7 – Batching queries to an external RPC serviceDefining the problemDiscussing the problem decompositionImplementing the solutionTask 8 – Batching queries to an external RPC service with defined batch sizesDefining the problemDiscussing the problem decompositionImplementing the solutionIntroducing the primitive PTransform object – stateful ParDoDescribing the theoretical properties of the stateful ParDo objectApplying the theoretical properties of the stateful ParDo object to the API of DoFnUsing side outputsAs an example, let's imagine we are processing data coming in as JSON values. We need to parse these messages into an internal object. But what should we do with the values that cannot be parsed because they contain a syntax error? If we do not do any validation before we store them in the stream (topic), then it is certainly possible that we will encounter such a situation. We can silently drop those records, but that is obviously not a great idea, as that could cause hard-to-debug problems. A much better option would be to store these values on the side to be able to investigate and fix them. Therefore, we should aim to do the following:Defining droppable data in BeamTask 9 – Separating droppable data from the rest of the data processingDefining the problemDiscussing the problem decompositionImplementing the solutionTesting our solutionDeploying our solutionTask 10 – Separating droppable data from the rest of the data processing, part 2Defining the problemDiscussing the problem decompositionImplementing the solutionTesting our solutionDeploying our solutionUsing side inputsSummary