So the reason the Splits column here turns into Any is that the expression length(_.Splits) > 0 ? split(_.Splits, ',') : 1. can return either an array of SubString, or a Float64 value. So we need to make the column type one that can handle both of these cases, which is Any. We call this type of situation a type instability, because that expression returns a value of a different type depending on the values of the inputs.
That the X1 column then also turns into Any is at the end of the day a bug in Query.jl that is just cumbersome to fix for me
But, that is no good excuse, of course. That bug is triggered by the type instability in the other column.