Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-4241

Cryptic expression parser exceptions

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.1.0
    • 1.2.0
    • Table SQL / API
    • None

    Description

      The exceptions thrown when giving wrong SQL syntax to Flink's SQL parser is very cryptic and should be improved. For example, the following code snippet:

      inputTable.filter("a == 0");
      

      gives the following exception:

      Exception in thread "main" org.apache.flink.api.table.ExpressionParserException: Could not parse expression: [1.4] failure: `-' expected but `=' found
      
      a == 0
         ^
      	at org.apache.flink.api.table.expressions.ExpressionParser$.parseExpression(ExpressionParser.scala:355)
      	at org.apache.flink.api.table.Table.filter(table.scala:161)
      	at com.dataartisans.streaming.SimpleTableAPIJob.main(SimpleTableAPIJob.java:32)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
      

      From this description it is very hard to understand that == is not a valid operator.

      Another example is:

      inputTable.select("*");
      

      which gives

      Exception in thread "main" org.apache.flink.api.table.ExpressionParserException: Could not parse expression: Base Failure
      	at org.apache.flink.api.table.expressions.ExpressionParser$.parseExpressionList(ExpressionParser.scala:342)
      	at org.apache.flink.api.table.Table.select(table.scala:103)
      	at com.dataartisans.streaming.SimpleTableAPIJob.main(SimpleTableAPIJob.java:33)
      	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      	at java.lang.reflect.Method.invoke(Method.java:497)
      	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
      

      I think it would considerably improve user experience if we print more helpful parsing exceptions.

      Attachments

        Issue Links

          Activity

            People

              twalthr Timo Walther
              trohrmann Till Rohrmann
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: