1. A method of distributing portions of a query over two or more execution engines, the method comprising: receiving an input query; identifying with a first analysis engine, a portion of the input query that can be processed by a first execution engine; compiling the identified portion of the input query forming a first compiled portion; rewriting the input query to form a first rewritten query wherein the identified portion of the input query is removed from the input query and replaced by a first placeholder; passing the first rewritten query to a second analysis engine; identifying with the second analysis engine, a portion of the first rewritten query that can be processed by a second execution engine; and compiling the identified portion of the first rewritten query generating a second compiled portion wherein the input query is distributed over the first execution engine and the second execution engine.