Hi, Abbas.

I think that this error cause by "rel#7:Subset#1.ENUMERABLE.[],
best=null, importance=0.5".
This rel was selected at Set#1 because this one is ENUMERABLE and "best=null".

I think that you should convert ENUMERABLE to NativeTeradataConvention
because enumerable convention is default.

https://github.com/apache/calcite/blob/9c6dc773e31a8b555350a75a6e9d9199b8244219/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java#L181

To convert ENUMERABLE to NativeTeradataConvention, you should create
ConverterRule and Converter.
In case of Cassandra it is as follows:

https://github.com/apache/calcite/blob/9c6dc773e31a8b555350a75a6e9d9199b8244219/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverterRule.java
https://github.com/apache/calcite/blob/9c6dc773e31a8b555350a75a6e9d9199b8244219/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraToEnumerableConverter.java

And register the ConverterRule.

https://github.com/apache/calcite/blob/9c6dc773e31a8b555350a75a6e9d9199b8244219/cassandra/src/main/java/org/apache/calcite/adapter/cassandra/CassandraTableScan.java#L66

thanks.


2018-03-13 18:23 GMT+09:00 Abbas Gadhia <ab_gad...@yahoo.com.invalid>:
> Hi,
>
> I'm having problems getting the Volcano Planner to implement my Rel tree. I 
> keep getting errors like "could not be implemented; planner state"
>
> My target tree has 2 conventions. The first is what i'm calling a "Native" 
> convention which is similar to the JdbcConvention in its semantics, but I 
> dont use the JdbcConvention because it forces me to create JdbcTableScans 
> that need an instance of a live jdbc Datasource. The second convention I have 
> is called Foo (for lack of a better name), using which I intend to physically 
> implement or execute my Rel tree.
>
> Here is my original rel, which i built using a 2 Relbuilders (1 Relbuilder 
> built using a custom TableScanFactory and the other Relbuilder built using an 
> empty Context i.e default TableScanFactory)
>
> LogicalProject
> --NativeTableScan
>
>
> To implement this tree, I have a few rules set up such as,
>
> NativeToFooConverterRule (similar to JdbcToEnumerableConverterRule)
> NativeProjectRule (similar to JdbcProjectRule)
>
>
> I register these rules inside of the NativeConvention in the register method 
> (similar to JdbcConvention). For now, i've hardcoded the cost (row count) of 
> the NativeTable object (which reside inside RelOptSchema) to be 100. The 
> planner state, after it fails is below. In case the full log with TRACE 
> levels is needed, i've attached it here. https://tinyurl.com/yct3hnle
>
> java.lang.RuntimeException: 
> org.apache.calcite.plan.RelOptPlanner$CannotPlanException: Node 
> [rel#4:Subset#1.NONE.[]] could not be implemented; planner state:
>
> Root: rel#4:Subset#1.NONE.[]
>
> Original rel:
> LogicalProject(subset=[rel#4:Subset#1.NONE.[]], id=[$0]): rowcount = 100.0, 
> cumulative cost = {100.0 rows, 100.0 cpu, 0.0 io}, id = 3
>   NativeTableScan(subset=[rel#2:Subset#0.NativeTeradataConvention.[]], 
> table=[[s1, emp]]): rowcount = 100.0, cumulative cost = {100.0 rows, 101.0 
> cpu, 0.0 io}, id = 0
>
> Sets:
> Set#0, type: RecordType(INTEGER id, VARCHAR name, INTEGER department)
>         rel#2:Subset#0.NativeTeradataConvention.[], best=rel#0, importance=0.9
>         rel#0:NativeTableScan.NativeTeradataConvention.[](table=[s1, emp]), 
> rowcount=100.0, cumulative cost={100.0 rows, 101.0 cpu, 0.0 io}
>     rel#5:Subset#0.ENUMERABLE.[], best=null, importance=0.45
>     rel#15:Subset#0.BeamConvention.[], best=rel#14, importance=0.45
>         
> rel#14:NativeToBeamConverterRel.BeamConvention.[](input=rel#2:Subset#0.NativeTeradataConvention.[]),
>  rowcount=100.0, cumulative cost={110.0 rows, 111.0 cpu, 0.0 io}
> Set#1, type: RecordType(INTEGER id)
>         rel#4:Subset#1.NONE.[], best=null, importance=1.0
>         
> rel#3:LogicalProject.NONE.[](input=rel#2:Subset#0.NativeTeradataConvention.[],id=$0),
>  rowcount=100.0, cumulative cost={inf}
>     rel#7:Subset#1.ENUMERABLE.[], best=null, importance=0.5
>         
> rel#6:EnumerableProject.ENUMERABLE.[](input=rel#5:Subset#0.ENUMERABLE.[],id=$0),
>  rowcount=100.0, cumulative cost={inf}
>     rel#9:Subset#1.NativeTeradataConvention.[], best=rel#8, importance=0.5
>         
> rel#8:NativeProject.NativeTeradataConvention.[](input=rel#2:Subset#0.NativeTeradataConvention.[],id=$0),
>  rowcount=100.0, cumulative cost={180.0 rows, 181.0 cpu, 0.0 io}
> rel#11:Subset#1.BeamConvention.[], best=rel#10, importance=0.5
>     
> rel#10:NativeToBeamConverterRel.BeamConvention.[](input=rel#9:Subset#1.NativeTeradataConvention.[]),
>  rowcount=100.0, cumulative cost={190.0 rows, 191.0 cpu, 0.0 io}
>
> I tried referring to this email on the mailing list, but so far no luck.
> https://mail-archives.apache.org/mod_mbox/calcite-dev/201606.mbox/%3ccfa8c0e7e88fc641b42fb1b7e70fc487b8bc8...@szxema508-mbx.china.huawei.com%3e
>
> Thanks
> Abbas



-- 
高橋 真之

Reply via email to