This is great. Thank you for sharing.
I've tried it in a similar case and it just works. Amazing.
PS. It is hard to understand how all those toRel/Enumerable/Project/Trait things cooperate when you face optiq for the first time.
When I've opened optiq-csv, I could not pass through all those stuff, and there was no solid picture why need so RelType/Scan/Rule/etc stuff.
However optiq-csv is usable as a starter for learning/trying optiq.
I believe, it makes sense to include some step-by-step description (e.g. sequence diagram).