Hi Felipe,

> what is the relation of RelFactories [1] when I use it to create the
INSTANCE of my rule?
The `RelFactories.LOGICAL_BUILDER` can be used during the rule
transformation, i.e., the `RelFactories.LOGICAL_BUILDER` is a
`RelBuilderFactory` which contains a `create` method can be used to create
a `RelBuilder`. The `RelBuilder`[1] is used to create relational
expressions.

Maybe we can also post the question in the Calcite mailing list. They may
give more details. :-)

Best,
Hequn

[1]
https://github.com/hequn8128/calcite/blob/master/core/src/main/java/org/apache/calcite/tools/RelBuilder.java


On Tue, Jul 9, 2019 at 4:06 PM Felipe Gutierrez <
felipe.o.gutier...@gmail.com> wrote:

> 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