I agree with you @Flavio Pompermaier <pomperma...@okkam.it> , the exception
message definitely should be improved.
We created a similar issue a long time before
https://issues.apache.org/jira/browse/CALCITE-3038, but the fixing might be
complicated.

Best,
Jark

On Mon, 13 Jul 2020 at 19:59, Flavio Pompermaier <pomperma...@okkam.it>
wrote:

> You're right Jark..sorry I didn't see the typo. The backticks are also
> mandatory.
> Maybe the exception message could be more meaningful and specify the token
> that caused the error instead of a general "SQL parse failed. Non-query
> expression encountered in illegal context".
>
> Thanks a lot for the support,
> Flavio
>
> On Mon, Jul 13, 2020 at 1:41 PM Jark Wu <imj...@gmail.com> wrote:
>
>> A typo of "INSERTO"? Try this?
>>
>> tableEnv.executeSql("INSERT INTO `out` SELECT * FROM MySourceDataset");
>>
>> Best,
>> Jark
>>
>> On Mon, 13 Jul 2020 at 18:25, Flavio Pompermaier <pomperma...@okkam.it>
>> wrote:
>>
>>> Now I'm able to run my code but there's something I don't understand:
>>> what is the difference between the following two?
>>>
>>>      //common code
>>>      final CsvTableSink outSink = new CsvTableSink("file:/tmp/test.tsv",
>>> "\t", 1, WriteMode.OVERWRITE);
>>>      tableEnv.registerTableSink("out", dsFields,
>>> myInputformat.getFieldTypes(), outSink);
>>>
>>>    - tableEnv.from("MySourceDataset").executeInsert("out");
>>>                                  --> this works
>>>    - tableEnv.executeSql("INSERTO INTO out SELECT * FROM
>>>    MySourceDataset");   --> this does not work
>>>
>>> The second option fails with the following exception:
>>>
>>> Exception in thread "main"
>>> org.apache.flink.table.api.SqlParserException: SQL parse failed. Non-query
>>> expression encountered in illegal context
>>> at
>>> org.apache.flink.table.planner.calcite.CalciteParser.parse(CalciteParser.java:56)
>>> at
>>> org.apache.flink.table.planner.delegation.ParserImpl.parse(ParserImpl.java:76)
>>> at
>>> org.apache.flink.table.api.internal.TableEnvironmentImpl.executeSql(TableEnvironmentImpl.java:678)
>>>
>>> Best,
>>> Flavio
>>>
>>> On Sun, Jul 12, 2020 at 5:04 PM godfrey he <godfre...@gmail.com> wrote:
>>>
>>>> hi Flavio,
>>>>
>>>> `BatchTableSource` can only be used for old planner.
>>>> if you want to use Blink planner to run batch job,
>>>> your table source should implement `StreamTableSource`
>>>> and `isBounded` method return true.
>>>>
>>>> Best,
>>>> Godfrey
>>>>
>>>>
>>>>
>>>> Flavio Pompermaier <pomperma...@okkam.it> 于2020年7月10日周五 下午10:32写道:
>>>>
>>>>> Is it correct to do something like this?
>>>>>
>>>>> TableSource<Row> myTableSource = new BatchTableSource<Row>() {
>>>>>       @Override
>>>>>       public TableSchema getTableSchema() {
>>>>>         return new TableSchema(dsFields, ft);
>>>>>       }
>>>>>       @Override
>>>>>       public DataSet<Row> getDataSet(ExecutionEnvironment execEnv) {
>>>>>         return execEnv.createInput(myInputformat);
>>>>>       }
>>>>>     };
>>>>>
>>>>> On Fri, Jul 10, 2020 at 3:54 PM Flavio Pompermaier <
>>>>> pomperma...@okkam.it> wrote:
>>>>>
>>>>>> How can you reuse InputFormat to write a TableSource? I think that at
>>>>>> least initially this could be the simplest way to test the 
>>>>>> migration..then
>>>>>> I could try yo implement the new Table Source interface
>>>>>>
>>>>>> On Fri, Jul 10, 2020 at 3:38 PM godfrey he <godfre...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> hi Flavio,
>>>>>>> Only old planner supports BatchTableEnvironment (which can convert
>>>>>>> to/from DataSet),
>>>>>>> while Blink planner in batch mode only support TableEnvironment.
>>>>>>> Because Blink planner
>>>>>>> convert the batch queries to Transformation (corresponding to
>>>>>>> DataStream), instead of DataSet.
>>>>>>>
>>>>>>> one approach is you can migrate them to TableSource instead
>>>>>>> (InputFormat can be reused),
>>>>>>> but TableSource will be deprecated later. you can try new table
>>>>>>> source[1]
>>>>>>>
>>>>>>> [1]
>>>>>>> https://ci.apache.org/projects/flink/flink-docs-release-1.11/dev/table/sourceSinks.html
>>>>>>>
>>>>>>> Best,
>>>>>>> Godfrey
>>>>>>>
>>>>>>> Flavio Pompermaier <pomperma...@okkam.it> 于2020年7月10日周五 下午8:54写道:
>>>>>>>
>>>>>>>> Thanks but I still can't understand how to migrate my legacy code.
>>>>>>>> The main problem is that I can't create a BatchTableEnv anymore so I 
>>>>>>>> can't
>>>>>>>> call createInput.
>>>>>>>>
>>>>>>>> Is there a way to reuse InputFormats? Should I migrate them to
>>>>>>>> TableSource instead?
>>>>>>>>
>>>>>>>> public static void main(String[] args) throws Exception {
>>>>>>>>     ExecutionEnvironment env =
>>>>>>>> ExecutionEnvironment.getExecutionEnvironment();
>>>>>>>>     BatchTableEnvironment btEnv =
>>>>>>>> TableEnvironment.getTableEnvironment(env);
>>>>>>>>     MyInputFormat myInputformat =  new MyInputFormat(dsFields,
>>>>>>>> ft).finish();
>>>>>>>>     DataSet<Row> rows = env.createInput(myInputformat);
>>>>>>>>     Table table = btEnv.fromDataSet(rows, String.join(",",
>>>>>>>> dsFields));
>>>>>>>>     CsvTableSink outSink = new CsvTableSink("file:/tmp/test.tsv",
>>>>>>>> "\t", 1, WriteMode.OVERWRITE);
>>>>>>>>     btEnv.registerTableSink("out", dsFields, ft, outSink);
>>>>>>>>     btEnv.insertInto(table, "out", btEnv.queryConfig());
>>>>>>>>     env.execute();
>>>>>>>>   }
>>>>>>>>
>>>>>>>> On Fri, Jul 10, 2020 at 11:56 AM Dawid Wysakowicz <
>>>>>>>> dwysakow...@apache.org> wrote:
>>>>>>>>
>>>>>>>>> You should be good with using the TableEnvironment. The
>>>>>>>>> StreamTableEnvironment is needed only if you want to convert to
>>>>>>>>> DataStream. We do not support converting batch Table programs to
>>>>>>>>> DataStream yet.
>>>>>>>>>
>>>>>>>>> A following code should work:
>>>>>>>>>
>>>>>>>>> EnvironmentSettings settings =
>>>>>>>>> EnvironmentSettings.newInstance().inBatchMode().build();
>>>>>>>>>
>>>>>>>>> TableEnvironment.create(settings);
>>>>>>>>>
>>>>>>>>> Best,
>>>>>>>>>
>>>>>>>>> Dawid
>>>>>>>>>
>>>>>>>>> On 10/07/2020 11:48, Flavio Pompermaier wrote:
>>>>>>>>> > Hi to all,
>>>>>>>>> > I was trying to update my legacy code to Flink 1.11. Before I was
>>>>>>>>> > using a BatchTableEnv and now I've tried to use the following:
>>>>>>>>> >
>>>>>>>>> > EnvironmentSettings settings =
>>>>>>>>> > EnvironmentSettings.newInstance().inBatchMode().build();
>>>>>>>>> >
>>>>>>>>> > Unfortunately in the StreamTableEnvironmentImpl code there's :
>>>>>>>>> >
>>>>>>>>> > if (!settings.isStreamingMode()) {
>>>>>>>>> >     throw new TableException(
>>>>>>>>> > "StreamTableEnvironment can not run in batch mode for now,
>>>>>>>>> please use
>>>>>>>>> > TableEnvironment.");
>>>>>>>>> > }
>>>>>>>>> >
>>>>>>>>> > What should I do here?
>>>>>>>>> >
>>>>>>>>> > Thanks in advance,
>>>>>>>>> > Flavio
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>

Reply via email to