No one's perfect, and there will certainly be errors in our Cascalog workflows. By default, Cascalog handles errors by stopping the processing. However, we may want to save the errors for later to allow the processing to continue. Cascalog (and Cascading) allows us to do that by defining a trap . This sends errors to a special sink tap and continues working.
Since we're extending the previous recipe, we'll use all the dependencies, imports, functions, and variables from there.
For this recipe, we'll extend the previous Composing Cascalog queries recipe. We'll define a custom operator that throws an error occasionally, and we'll call that operator in a query.
First, here's the new custom operator. If the value passed in is too low (less than 125), it causes an exception by dividing by zero.
(defmapop throw-error [value] (if (< value 125) (div value 0) 0))
Now we can define a query that calls the queries from the last recipe...