Hi Hequn,

what is the relation of RelFactories [1] when I use it to create the
INSTANCE of my rule? For example:

public static final MyFilterRule INSTANCE = new MyFilterRule(Filter.class,
RelFactories.LOGICAL_BUILDER);

then I create a CalciteCOnfigBuilder using "new
CalciteConfigBuilder().addLogicalOptRuleSet(), .addNormRuleSet(),
.addPhysicalOptRuleSet()".

[1]
https://calcite.apache.org/apidocs/org/apache/calcite/rel/core/RelFactories.html#LOGICAL_BUILDER
*--*
*-- Felipe Gutierrez*

*-- skype: felipe.o.gutierrez*
*--* *https://felipeogutierrez.blogspot.com
<https://felipeogutierrez.blogspot.com>*


On Tue, Jul 9, 2019 at 5:06 AM Hequn Cheng <chenghe...@gmail.com> wrote:

> Hi Felipe,
>
> > I would like to create a logical filter if there is no filter set on the
> logical query. How should I implement it?
> Do you mean you want to add a LogicalFilter node if the query even doesn't
> contain filter? Logically, this can be done through a rule. However, it
> sounds a little hack and you have to pay attention to semantic problems.
> One thing you have to notice is that you can't change the RowType when you
> perform your rules, i.e., for NodeA -> rule -> NodeB, NodeB should contain
> the same row type with NodeA.
> There are a lot of rules in Flink which I think is a good example for you.
> You can find these rules in the class of `FlinkRuleSets`.
>
> > I see my LogicalFilter been created when I call "tableEnv.explain()"
> method. I suppose that I can add some logical filters on the plan.
> The `LogicalFilter` and `DataStreamCalc` is not created by your Filter
> rule. If you remove your filter rule, there is nothing change for the plan.
>
> Best, Hequn
>
> On Mon, Jul 8, 2019 at 11:13 PM Felipe Gutierrez <
> felipe.o.gutier...@gmail.com> wrote:
>
>> Hi,
>>
>> I am a newbie in Apache Calcite. I am trying to use it with Apache Flink.
>> To start I am trying to create a HelloWorld which just add a logical filter
>> on my query.
>> 1 - I have my Flink app using Table API [1].
>> 2 - I have created my Calcite filter rule which is applied to my FLink
>> query if I use CalciteConfig cc = new
>> CalciteConfigBuilder().addLogicalOptRuleSet(RuleSets.ofList(MyFilterRule.INSTANCE)).build()
>> [2];
>> 3 - The debug thread only goes to my rule if there is a filter on my
>> query.
>>
>> I would like to create a logical filter if there is no filter set on the
>> logical query. How should I implement it?
>> I see my LogicalFilter been created when I call "tableEnv.explain()"
>> method. I suppose that I can add some logical filters on the plan.
>>
>> == Abstract Syntax Tree ==
>> LogicalFilter(condition=[>=($6, 50)])
>>   LogicalTableScan(table=[[TicketsStation01Plat01]])
>>
>> == Optimized Logical Plan ==
>> DataStreamCalc(select=[sensorId, sensorType, platformId, platformType,
>> stationId, timestamp, value, trip, eventTime], where=[>=(value, 50)])
>>   StreamTableSourceScan(table=[[TicketsStation01Plat01]],
>> fields=[sensorId, sensorType, platformId, platformType, stationId,
>> timestamp, value, trip, eventTime], source=[SensorTuples])
>>
>> == Physical Execution Plan ==
>> ....
>>
>> Thanks,
>> Felipe
>>
>> [1]
>> https://github.com/felipegutierrez/explore-flink/blob/master/src/main/java/org/sense/flink/examples/stream/table/HelloWorldCalcitePlanTableAPI.java#L62
>> [2]
>> https://github.com/felipegutierrez/explore-flink/blob/master/src/main/java/org/sense/calcite/rules/MyFilterRule.java#L14
>> *--*
>> *-- Felipe Gutierrez*
>>
>> *-- skype: felipe.o.gutierrez*
>> *--* *https://felipeogutierrez.blogspot.com
>> <https://felipeogutierrez.blogspot.com>*
>>
>

Reply via email to