Have you considered something like JOOQ [1] to generate SQL for you, then just use Drill’s SQL support? I’ve not used JOOQ, but I’ve used similar approaches in past projects.
- Paul [1] http://www.jooq.org > On Dec 2, 2016, at 7:20 AM, Aman Sinha <[email protected]> wrote: > > Unfortunately, the 'LogicalPlan' structure that is created by the > LogicalPlanBuilder does not go through the full Drill query optimization > process. You are better off starting with a Calcite Rel and then building > a Drill logical plan with 'Rels' (e.g DrillFilterRel, DrillProjectRel > etc.). > > On Fri, Dec 2, 2016 at 2:21 AM, Ted Dunning <[email protected]> wrote: > >> It might be easier to start by stealing a plan from a normal SQL query and >> then trying to build that. Not that this is a long-term solution, but it >> gets you going with the many unstated assumptions about a plan that might >> be present. >> >> That would give you something in JSON, however, rather than Java code. >> That still might be very useful. >> >> >> >> On Fri, Dec 2, 2016 at 1:59 AM, Chris Baynes <[email protected]> wrote: >> >>> Hi, >>> >>> We have a use case in which we want to construct queries programmatically >>> which Drill would then execute. >>> >>> So far I've been able to configure a Jdbc StorageEngine, and initialize a >>> LogicalPlan (using the builder) with that. I am having difficulty trying >> to >>> configure scan, project, and filters. I know I need to construct a >>> LogicalOperator, and these are implemented in >>> org.apache.drill.common.logical.data >>> >>> However to construct an operator instance I need one or more of: >>> JSONOptions, NamedExpression, LogicalExpression, FieldReference. >>> >>> So right now I have something like this, but don't know how to fill in >> the >>> missing pieces... >>> >>> // scan >>> JSONOptions opts = new JSONOptions(...); >>> builder.addLogicalOperator(Scan.builder().storageEngine(" >>> pg").selection(opts).build()); >>> >>> // project >>> NamedExpression nex = new NamedExpression(...); >>> builder.addLogicalOperator(Project.builder().addExpr(nex)); >>> >>> LogicalPlan plan = builder.build(); >>> >>> Is there any documentation yet, similar to what calcite has for the >>> RelBuilder (https://calcite.apache.org/docs/algebra.html)? >>> >>> I suppose I could also construct a RelNode and then try to convert that >> to >>> a LogicalPlan, would I be missing out on any drill features this way? >>> >>> Thanks in advance >>> >>
