Hi, Glad to see we have reached consensus on option #2. +1 to it.
Regarding the name, I'm fine with `table.dml-async`. But I wonder whether this config also applies to table API. E.g. if a user sets table.dml-async=false and calls TableEnvironment::executeSql to run a DML, will he get sync behavior? On Mon, Feb 8, 2021 at 11:28 PM Jark Wu <imj...@gmail.com> wrote: > Ah, I just forgot the option name. > > I'm also fine with `table.dml-async`. > > What do you think @Rui Li <lirui.fu...@gmail.com> @Shengkai Fang > <fskm...@gmail.com> ? > > Best, > Jark > > On Mon, 8 Feb 2021 at 23:06, Timo Walther <twal...@apache.org> wrote: > >> Great to hear that. Can someone update the FLIP a final time before we >> start a vote? >> >> We should quickly discuss how we would like to name the config option >> for the async/sync mode. I heared voices internally that are strongly >> against calling it "detach" due to historical reasons with a Flink job >> detach mode. How about `table.dml-async`? >> >> Thanks, >> Timo >> >> >> On 08.02.21 15:55, Jark Wu wrote: >> > Thanks Timo, >> > >> > I'm +1 for option#2 too. >> > >> > I think we have addressed all the concerns and can start a vote. >> > >> > Best, >> > Jark >> > >> > On Mon, 8 Feb 2021 at 22:19, Timo Walther <twal...@apache.org> wrote: >> > >> >> Hi Jark, >> >> >> >> you are right. Nesting STATEMENT SET and ASYNC might be too verbose. >> >> >> >> So let's stick to the config option approach. >> >> >> >> However, I strongly believe that we should not use the batch/streaming >> >> mode for deriving semantics. This discussion is similar to time >> function >> >> discussion. We should not derive sync/async submission behavior from a >> >> flag that should only influence runtime operators and the incremental >> >> computation. Statements for bounded streams should have the same >> >> semantics in batch mode. >> >> >> >> I think your proposed option 2) is a good tradeoff. For the following >> >> reasons: >> >> >> >> pros: >> >> - by default, batch and streaming behave exactly the same >> >> - SQL Client CLI behavior does not change compared to 1.12 and remains >> >> async for batch and streaming >> >> - consistent with the async Table API behavior >> >> >> >> con: >> >> - batch files are not 100% SQL compliant by default >> >> >> >> The last item might not be an issue since we can expect that users have >> >> long-running jobs and prefer async execution in most cases. >> >> >> >> Regards, >> >> Timo >> >> >> >> >> >> On 08.02.21 14:15, Jark Wu wrote: >> >>> Hi Timo, >> >>> >> >>> Actually, I'm not in favor of explicit syntax `BEGIN ASYNC;... END;`. >> >>> Because it makes submitting streaming jobs very verbose, every INSERT >> >> INTO >> >>> and STATEMENT SET must be wrapped in the ASYNC clause which is >> >>> not user-friendly and not backward-compatible. >> >>> >> >>> I agree we will have unified behavior but this is at the cost of >> hurting >> >>> our main users. >> >>> I'm worried that end users can't understand the technical decision, >> and >> >>> they would >> >>> feel streaming is harder to use. >> >>> >> >>> If we want to have an unified behavior, and let users decide what's >> the >> >>> desirable behavior, I prefer to have a config option. A Flink cluster >> can >> >>> be set to async, then >> >>> users don't need to wrap every DML in an ASYNC clause. This is the >> least >> >>> intrusive >> >>> way to the users. >> >>> >> >>> >> >>> Personally, I'm fine with following options in priority: >> >>> >> >>> 1) sync for batch DML and async for streaming DML >> >>> ==> only breaks batch behavior, but makes both happy >> >>> >> >>> 2) async for both batch and streaming DML, and can be set to sync via >> a >> >>> configuration. >> >>> ==> compatible, and provides flexible configurable behavior >> >>> >> >>> 3) sync for both batch and streaming DML, and can be >> >>> set to async via a configuration. >> >>> ==> +0 for this, because it breaks all the compatibility, esp. our >> main >> >>> users. >> >>> >> >>> Best, >> >>> Jark >> >>> >> >>> On Mon, 8 Feb 2021 at 17:34, Timo Walther <twal...@apache.org> wrote: >> >>> >> >>>> Hi Jark, Hi Rui, >> >>>> >> >>>> 1) How should we execute statements in CLI and in file? Should there >> be >> >>>> a difference? >> >>>> So it seems we have consensus here with unified bahavior. Even though >> >>>> this means we are breaking existing batch INSERT INTOs that were >> >>>> asynchronous before. >> >>>> >> >>>> 2) Should we have different behavior for batch and streaming? >> >>>> I think also batch users prefer async behavior because usually even >> >>>> those pipelines take some time to execute. But we need should stick >> to >> >>>> standard SQL blocking semantics. >> >>>> >> >>>> What are your opinions on making async explicit in SQL via `BEGIN >> ASYNC; >> >>>> ... END;`? This would allow us to really have unified semantics >> because >> >>>> batch and streaming would behave the same? >> >>>> >> >>>> Regards, >> >>>> Timo >> >>>> >> >>>> >> >>>> On 07.02.21 04:46, Rui Li wrote: >> >>>>> Hi Timo, >> >>>>> >> >>>>> I agree with Jark that we should provide consistent experience >> >> regarding >> >>>>> SQL CLI and files. Some systems even allow users to execute SQL >> files >> >> in >> >>>>> the CLI, e.g. the "SOURCE" command in MySQL. If we want to support >> that >> >>>> in >> >>>>> the future, it's a little tricky to decide whether that should be >> >> treated >> >>>>> as CLI or file. >> >>>>> >> >>>>> I actually prefer a config option and let users decide what's the >> >>>>> desirable behavior. But if we have agreed not to use options, I'm >> also >> >>>> fine >> >>>>> with Alternative #1. >> >>>>> >> >>>>> On Sun, Feb 7, 2021 at 11:01 AM Jark Wu <imj...@gmail.com> wrote: >> >>>>> >> >>>>>> Hi Timo, >> >>>>>> >> >>>>>> 1) How should we execute statements in CLI and in file? Should >> there >> >> be >> >>>> a >> >>>>>> difference? >> >>>>>> I do think we should unify the behavior of CLI and SQL files. SQL >> >> files >> >>>> can >> >>>>>> be thought of as a shortcut of >> >>>>>> "start CLI" => "copy content of SQL files" => "past content in >> CLI". >> >>>>>> Actually, we already did this in kafka_e2e.sql [1]. >> >>>>>> I think it's hard for users to understand why SQL files behave >> >>>> differently >> >>>>>> from CLI, all the other systems don't have such a difference. >> >>>>>> >> >>>>>> If we distinguish SQL files and CLI, should there be a difference >> in >> >>>> JDBC >> >>>>>> driver and UI platform? >> >>>>>> Personally, they all should have consistent behavior. >> >>>>>> >> >>>>>> 2) Should we have different behavior for batch and streaming? >> >>>>>> I think we all agree streaming users prefer async execution, >> otherwise >> >>>> it's >> >>>>>> weird and difficult to use if the >> >>>>>> submit script or CLI never exists. On the other hand, batch SQL >> users >> >>>> are >> >>>>>> used to SQL statements being >> >>>>>> executed blockly. >> >>>>>> >> >>>>>> Either unified async execution or unified sync execution, will hurt >> >> one >> >>>>>> side of the streaming >> >>>>>> batch users. In order to make both sides happy, I think we can have >> >>>>>> different behavior for batch and streaming. >> >>>>>> There are many essential differences between batch and stream >> >> systems, I >> >>>>>> think it's normal to have some >> >>>>>> different behaviors, and the behavior doesn't break the unified >> batch >> >>>>>> stream semantics. >> >>>>>> >> >>>>>> >> >>>>>> Thus, I'm +1 to Alternative 1: >> >>>>>> We consider batch/streaming mode and block for batch INSERT INTO >> and >> >>>> async >> >>>>>> for streaming INSERT INTO/STATEMENT SET. >> >>>>>> And this behavior is consistent across CLI and files. >> >>>>>> >> >>>>>> Best, >> >>>>>> Jark >> >>>>>> >> >>>>>> [1]: >> >>>>>> >> >>>>>> >> >>>> >> >> >> https://github.com/apache/flink/blob/master/flink-end-to-end-tests/flink-end-to-end-tests-common-kafka/src/test/resources/kafka_e2e.sql >> >>>>>> >> >>>>>> On Fri, 5 Feb 2021 at 21:49, Timo Walther <twal...@apache.org> >> wrote: >> >>>>>> >> >>>>>>> Hi Jark, >> >>>>>>> >> >>>>>>> thanks for the summary. I hope we can also find a good long-term >> >>>>>>> solution on the async/sync execution behavior topic. >> >>>>>>> >> >>>>>>> It should be discussed in a bigger round because it is (similar to >> >> the >> >>>>>>> time function discussion) related to batch-streaming unification >> >> where >> >>>>>>> we should stick to the SQL standard to some degree but also need >> to >> >>>> come >> >>>>>>> up with good streaming semantics. >> >>>>>>> >> >>>>>>> Let me summarize the problem again to hear opinions: >> >>>>>>> >> >>>>>>> - Batch SQL users are used to execute SQL files sequentially (from >> >> top >> >>>>>>> to bottom). >> >>>>>>> - Batch SQL users are used to SQL statements being executed >> blocking. >> >>>>>>> One after the other. Esp. when moving around data with INSERT >> INTO. >> >>>>>>> - Streaming users prefer async execution because unbounded stream >> are >> >>>>>>> more frequent than bounded streams. >> >>>>>>> - We decided to make Flink Table API is async because in a >> >> programming >> >>>>>>> language it is easy to call `.await()` on the result to make it >> >>>> blocking. >> >>>>>>> - INSERT INTO statements in the current SQL Client implementation >> are >> >>>>>>> always submitted asynchrounous. >> >>>>>>> - Other client's such as Ververica platform allow only one INSERT >> >> INTO >> >>>>>>> or a STATEMENT SET at the end of a file that will run >> >> asynchrounously. >> >>>>>>> >> >>>>>>> Questions: >> >>>>>>> >> >>>>>>> - How should we execute statements in CLI and in file? Should >> there >> >> be >> >>>> a >> >>>>>>> difference? >> >>>>>>> - Should we have different behavior for batch and streaming? >> >>>>>>> - Shall we solve parts with a config option or is it better to >> make >> >> it >> >>>>>>> explicit in the SQL job definition because it influences the >> >> semantics >> >>>>>>> of multiple INSERT INTOs? >> >>>>>>> >> >>>>>>> Let me summarize my opinion at the moment: >> >>>>>>> >> >>>>>>> - SQL files should always be executed blocking by default. Because >> >> they >> >>>>>>> could potentially contain a long list of INSERT INTO statements. >> This >> >>>>>>> would be SQL standard compliant. >> >>>>>>> - If we allow async execution, we should make this explicit in the >> >> SQL >> >>>>>>> file via `BEGIN ASYNC; ... END;`. >> >>>>>>> - In the CLI, we always execute async to maintain the old >> behavior. >> >> We >> >>>>>>> can also assume that people are only using the CLI to fire >> statements >> >>>>>>> and close the CLI afterwards. >> >>>>>>> >> >>>>>>> Alternative 1: >> >>>>>>> - We consider batch/streaming mode and block for batch INSERT INTO >> >> and >> >>>>>>> async for streaming INSERT INTO/STATEMENT SET >> >>>>>>> >> >>>>>>> What do others think? >> >>>>>>> >> >>>>>>> Regards, >> >>>>>>> Timo >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> >> >>>>>>> On 05.02.21 04:03, Jark Wu wrote: >> >>>>>>>> Hi all, >> >>>>>>>> >> >>>>>>>> After an offline discussion with Timo and Kurt, we have reached >> some >> >>>>>>>> consensus. >> >>>>>>>> Please correct me if I am wrong or missed anything. >> >>>>>>>> >> >>>>>>>> 1) We will introduce "table.planner" and "table.execution-mode" >> >>>> instead >> >>>>>>> of >> >>>>>>>> "sql-client" prefix, >> >>>>>>>> and add `TableEnvironment.create(Configuration)` interface. >> These 2 >> >>>>>>> options >> >>>>>>>> can only be used >> >>>>>>>> for tableEnv initialization. If used after initialization, Flink >> >>>> should >> >>>>>>>> throw an exception. We may can >> >>>>>>>> support dynamic switch the planner in the future. >> >>>>>>>> >> >>>>>>>> 2) We will have only one parser, >> >>>>>>>> i.e. org.apache.flink.table.delegation.Parser. It accepts a >> string >> >>>>>>>> statement, and returns a list of Operation. It will first use >> regex >> >> to >> >>>>>>>> match some special statement, >> >>>>>>>> e.g. SET, ADD JAR, others will be delegated to the >> underlying >> >>>> Calcite >> >>>>>>>> parser. The Parser can >> >>>>>>>> have different implementations, e.g. HiveParser. >> >>>>>>>> >> >>>>>>>> 3) We only support ADD JAR, REMOVE JAR, SHOW JAR for Flink >> dialect. >> >>>> But >> >>>>>>> we >> >>>>>>>> can allow >> >>>>>>>> DELETE JAR, LIST JAR in Hive dialect through HiveParser. >> >>>>>>>> >> >>>>>>>> 4) We don't have a conclusion for async/sync execution behavior >> yet. >> >>>>>>>> >> >>>>>>>> Best, >> >>>>>>>> Jark >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> On Thu, 4 Feb 2021 at 17:50, Jark Wu <imj...@gmail.com> wrote: >> >>>>>>>> >> >>>>>>>>> Hi Ingo, >> >>>>>>>>> >> >>>>>>>>> Since we have supported the WITH syntax and SET command since >> v1.9 >> >>>>>>> [1][2], >> >>>>>>>>> and >> >>>>>>>>> we have never received such complaints, I think it's fine for >> such >> >>>>>>>>> differences. >> >>>>>>>>> >> >>>>>>>>> Besides, the TBLPROPERTIES clause of CREATE TABLE in Hive also >> >>>>>> requires >> >>>>>>>>> string literal keys[3], >> >>>>>>>>> and the SET <key>=<value> doesn't allow quoted keys [4]. >> >>>>>>>>> >> >>>>>>>>> Best, >> >>>>>>>>> Jark >> >>>>>>>>> >> >>>>>>>>> [1]: >> >>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/connect.html >> >>>>>>>>> [2]: >> >>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/table/sqlClient.html#running-sql-queries >> >>>>>>>>> [3]: >> >>>>>>> >> https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL >> >>>>>>>>> [4]: >> >>>>>>> >> https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli >> >>>>>>>>> (search "set mapred.reduce.tasks=32") >> >>>>>>>>> >> >>>>>>>>> On Thu, 4 Feb 2021 at 17:09, Ingo Bürk <i...@ververica.com> >> wrote: >> >>>>>>>>> >> >>>>>>>>>> Hi, >> >>>>>>>>>> >> >>>>>>>>>> regarding the (un-)quoted question, compatibility is of course >> an >> >>>>>>>>>> important >> >>>>>>>>>> argument, but in terms of consistency I'd find it a bit >> surprising >> >>>>>> that >> >>>>>>>>>> WITH handles it differently than SET, and I wonder if that >> could >> >>>>>> cause >> >>>>>>>>>> friction for developers when writing their SQL. >> >>>>>>>>>> >> >>>>>>>>>> >> >>>>>>>>>> Regards >> >>>>>>>>>> Ingo >> >>>>>>>>>> >> >>>>>>>>>> On Thu, Feb 4, 2021 at 9:38 AM Jark Wu <imj...@gmail.com> >> wrote: >> >>>>>>>>>> >> >>>>>>>>>>> Hi all, >> >>>>>>>>>>> >> >>>>>>>>>>> Regarding "One Parser", I think it's not possible for now >> because >> >>>>>>>>>> Calcite >> >>>>>>>>>>> parser can't parse >> >>>>>>>>>>> special characters (e.g. "-") unless quoting them as string >> >>>>>> literals. >> >>>>>>>>>>> That's why the WITH option >> >>>>>>>>>>> key are string literals not identifiers. >> >>>>>>>>>>> >> >>>>>>>>>>> SET table.exec.mini-batch.enabled = true and ADD JAR >> >>>>>>>>>>> /local/my-home/test.jar >> >>>>>>>>>>> have the same >> >>>>>>>>>>> problems. That's why we propose two parser, one splits lines >> into >> >>>>>>>>>> multiple >> >>>>>>>>>>> statements and match special >> >>>>>>>>>>> command through regex which is light-weight, and delegate >> other >> >>>>>>>>>> statements >> >>>>>>>>>>> to the other parser which is Calcite parser. >> >>>>>>>>>>> >> >>>>>>>>>>> Note: we should stick on the unquoted SET >> >>>>>>> table.exec.mini-batch.enabled >> >>>>>>>>>> = >> >>>>>>>>>>> true syntax, >> >>>>>>>>>>> both for backward-compatibility and easy-to-use, and all the >> >> other >> >>>>>>>>>> systems >> >>>>>>>>>>> don't have quotes on the key. >> >>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>>> Regarding "table.planner" vs "sql-client.planner", >> >>>>>>>>>>> if we want to use "table.planner", I think we should explain >> >>>> clearly >> >>>>>>>>>> what's >> >>>>>>>>>>> the scope it can be used in documentation. >> >>>>>>>>>>> Otherwise, there will be users complaining why the planner >> >> doesn't >> >>>>>>>>>> change >> >>>>>>>>>>> when setting the configuration on TableEnv. >> >>>>>>>>>>> Would be better throwing an exception to indicate users it's >> now >> >>>>>>>>>> allowed to >> >>>>>>>>>>> change planner after TableEnv is initialized. >> >>>>>>>>>>> However, it seems not easy to implement. >> >>>>>>>>>>> >> >>>>>>>>>>> Best, >> >>>>>>>>>>> Jark >> >>>>>>>>>>> >> >>>>>>>>>>> On Thu, 4 Feb 2021 at 15:49, godfrey he <godfre...@gmail.com> >> >>>>>> wrote: >> >>>>>>>>>>> >> >>>>>>>>>>>> Hi everyone, >> >>>>>>>>>>>> >> >>>>>>>>>>>> Regarding "table.planner" and "table.execution-mode" >> >>>>>>>>>>>> If we define that those two options are just used to >> initialize >> >>>> the >> >>>>>>>>>>>> TableEnvironment, +1 for introducing table options instead of >> >>>>>>>>>> sql-client >> >>>>>>>>>>>> options. >> >>>>>>>>>>>> >> >>>>>>>>>>>> Regarding "the sql client, we will maintain two parsers", I >> want >> >>>> to >> >>>>>>>>>> give >> >>>>>>>>>>>> more inputs: >> >>>>>>>>>>>> We want to introduce sql-gateway into the Flink project (see >> >>>>>> FLIP-24 >> >>>>>>> & >> >>>>>>>>>>>> FLIP-91 for more info [1] [2]). In the "gateway" mode, the >> CLI >> >>>>>> client >> >>>>>>>>>> and >> >>>>>>>>>>>> the gateway service will communicate through Rest API. The " >> ADD >> >>>>>> JAR >> >>>>>>>>>>>> /local/path/jar " will be executed in the CLI client >> machine. So >> >>>>>> when >> >>>>>>>>>> we >> >>>>>>>>>>>> submit a sql file which contains multiple statements, the CLI >> >>>>>> client >> >>>>>>>>>>> needs >> >>>>>>>>>>>> to pick out the "ADD JAR" line, and also statements need to >> be >> >>>>>>>>>> submitted >> >>>>>>>>>>> or >> >>>>>>>>>>>> executed one by one to make sure the result is correct. The >> sql >> >>>>>> file >> >>>>>>>>>> may >> >>>>>>>>>>> be >> >>>>>>>>>>>> look like: >> >>>>>>>>>>>> >> >>>>>>>>>>>> SET xxx=yyy; >> >>>>>>>>>>>> create table my_table ...; >> >>>>>>>>>>>> create table my_sink ...; >> >>>>>>>>>>>> ADD JAR /local/path/jar1; >> >>>>>>>>>>>> create function my_udf as com....MyUdf; >> >>>>>>>>>>>> insert into my_sink select ..., my_udf(xx) from ...; >> >>>>>>>>>>>> REMOVE JAR /local/path/jar1; >> >>>>>>>>>>>> drop function my_udf; >> >>>>>>>>>>>> ADD JAR /local/path/jar2; >> >>>>>>>>>>>> create function my_udf as com....MyUdf2; >> >>>>>>>>>>>> insert into my_sink select ..., my_udf(xx) from ...; >> >>>>>>>>>>>> >> >>>>>>>>>>>> The lines need to be splitted into multiple statements first >> in >> >>>> the >> >>>>>>>>>> CLI >> >>>>>>>>>>>> client, there are two approaches: >> >>>>>>>>>>>> 1. The CLI client depends on the sql-parser: the sql-parser >> >> splits >> >>>>>>> the >> >>>>>>>>>>>> lines and tells which lines are "ADD JAR". >> >>>>>>>>>>>> pro: there is only one parser >> >>>>>>>>>>>> cons: It's a little heavy that the CLI client depends on the >> >>>>>>>>>> sql-parser, >> >>>>>>>>>>>> because the CLI client is just a simple tool which receives >> the >> >>>>>> user >> >>>>>>>>>>>> commands and displays the result. The non "ADD JAR" command >> will >> >>>> be >> >>>>>>>>>>> parsed >> >>>>>>>>>>>> twice. >> >>>>>>>>>>>> >> >>>>>>>>>>>> 2. The CLI client splits the lines into multiple statements >> and >> >>>>>> finds >> >>>>>>>>>> the >> >>>>>>>>>>>> ADD JAR command through regex matching. >> >>>>>>>>>>>> pro: The CLI client is very light-weight. >> >>>>>>>>>>>> cons: there are two parsers. >> >>>>>>>>>>>> >> >>>>>>>>>>>> (personally, I prefer the second option) >> >>>>>>>>>>>> >> >>>>>>>>>>>> Regarding "SHOW or LIST JARS", I think we can support them >> both. >> >>>>>>>>>>>> For default dialect, we support SHOW JARS, but if we switch >> to >> >>>> hive >> >>>>>>>>>>>> dialect, LIST JARS is also supported. >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>>> [1] >> >>>>>>>>>>> >> >>>>>>> >> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-24+-+SQL+Client >> >>>>>>>>>>>> [2] >> >>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-91%3A+Support+SQL+Client+Gateway >> >>>>>>>>>>>> >> >>>>>>>>>>>> Best, >> >>>>>>>>>>>> Godfrey >> >>>>>>>>>>>> >> >>>>>>>>>>>> Rui Li <lirui.fu...@gmail.com> 于2021年2月4日周四 上午10:40写道: >> >>>>>>>>>>>> >> >>>>>>>>>>>>> Hi guys, >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> Regarding #3 and #4, I agree SHOW JARS is more consistent >> with >> >>>>>> other >> >>>>>>>>>>>>> commands than LIST JARS. I don't have a strong opinion about >> >>>>>> REMOVE >> >>>>>>>>>> vs >> >>>>>>>>>>>>> DELETE though. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> While flink doesn't need to follow hive syntax, as far as I >> >> know, >> >>>>>>>>>> most >> >>>>>>>>>>>>> users who are requesting these features are previously hive >> >>>> users. >> >>>>>>>>>> So I >> >>>>>>>>>>>>> wonder whether we can support both LIST/SHOW JARS and >> >>>>>> REMOVE/DELETE >> >>>>>>>>>>> JARS >> >>>>>>>>>>>>> as synonyms? It's just like lots of systems accept both EXIT >> >> and >> >>>>>>>>>> QUIT >> >>>>>>>>>>> as >> >>>>>>>>>>>>> the command to terminate the program. So if that's not hard >> to >> >>>>>>>>>> achieve, >> >>>>>>>>>>>> and >> >>>>>>>>>>>>> will make users happier, I don't see a reason why we must >> >> choose >> >>>>>> one >> >>>>>>>>>>> over >> >>>>>>>>>>>>> the other. >> >>>>>>>>>>>>> >> >>>>>>>>>>>>> On Wed, Feb 3, 2021 at 10:33 PM Timo Walther < >> >> twal...@apache.org >> >>>>> >> >>>>>>>>>>> wrote: >> >>>>>>>>>>>>> >> >>>>>>>>>>>>>> Hi everyone, >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> some feedback regarding the open questions. Maybe we can >> >> discuss >> >>>>>>>>>> the >> >>>>>>>>>>>>>> `TableEnvironment.executeMultiSql` story offline to >> determine >> >>>> how >> >>>>>>>>>> we >> >>>>>>>>>>>>>> proceed with this in the near future. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> 1) "whether the table environment has the ability to update >> >>>>>>>>>> itself" >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> Maybe there was some misunderstanding. I don't think that >> we >> >>>>>>>>>> should >> >>>>>>>>>>>>>> support >> >>>>>>>>>> `tEnv.getConfig.getConfiguration.setString("table.planner", >> >>>>>>>>>>>>>> "old")`. Instead I'm proposing to support >> >>>>>>>>>>>>>> `TableEnvironment.create(Configuration)` where planner and >> >>>>>>>>>> execution >> >>>>>>>>>>>>>> mode are read immediately and a subsequent changes to these >> >>>>>>>>>> options >> >>>>>>>>>>>> will >> >>>>>>>>>>>>>> have no effect. We are doing it similar in `new >> >>>>>>>>>>>>>> StreamExecutionEnvironment(Configuration)`. These two >> >>>>>>>>>> ConfigOption's >> >>>>>>>>>>>>>> must not be SQL Client specific but can be part of the core >> >>>> table >> >>>>>>>>>>> code >> >>>>>>>>>>>>>> base. Many users would like to get a 100% preconfigured >> >>>>>>>>>> environment >> >>>>>>>>>>>> from >> >>>>>>>>>>>>>> just Configuration. And this is not possible right now. We >> can >> >>>>>>>>>> solve >> >>>>>>>>>>>>>> both use cases in one change. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> 2) "the sql client, we will maintain two parsers" >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> I remember we had some discussion about this and decided >> that >> >> we >> >>>>>>>>>>> would >> >>>>>>>>>>>>>> like to maintain only one parser. In the end it is "One >> Flink >> >>>>>> SQL" >> >>>>>>>>>>>> where >> >>>>>>>>>>>>>> commands influence each other also with respect to >> keywords. >> >> It >> >>>>>>>>>>> should >> >>>>>>>>>>>>>> be fine to include the SQL Client commands in the Flink >> >> parser. >> >>>>>> Of >> >>>>>>>>>>>>>> cource the table environment would not be able to handle >> the >> >>>>>>>>>>>> `Operation` >> >>>>>>>>>>>>>> instance that would be the result but we can introduce >> hooks >> >> to >> >>>>>>>>>>> handle >> >>>>>>>>>>>>>> those `Operation`s. Or we introduce parser extensions. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> Can we skip `table.job.async` in the first version? We >> should >> >>>>>>>>>> further >> >>>>>>>>>>>>>> discuss whether we introduce a special SQL clause for >> wrapping >> >>>>>>>>>> async >> >>>>>>>>>>>>>> behavior or if we use a config option? Esp. for streaming >> >>>> queries >> >>>>>>>>>> we >> >>>>>>>>>>>>>> need to be careful and should force users to either "one >> >> INSERT >> >>>>>>>>>> INTO" >> >>>>>>>>>>>> or >> >>>>>>>>>>>>>> "one STATEMENT SET". >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> 3) 4) "HIVE also uses these commands" >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> In general, Hive is not a good reference. Aligning the >> >> commands >> >>>>>>>>>> more >> >>>>>>>>>>>>>> with the remaining commands should be our goal. We just >> had a >> >>>>>>>>>> MODULE >> >>>>>>>>>>>>>> discussion where we selected SHOW instead of LIST. But it >> is >> >>>> true >> >>>>>>>>>>> that >> >>>>>>>>>>>>>> JARs are not part of the catalog which is why I would not >> use >> >>>>>>>>>>>>>> CREATE/DROP. ADD/REMOVE are commonly siblings in the >> English >> >>>>>>>>>>> language. >> >>>>>>>>>>>>>> Take a look at the Java collection API as another example. >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> 6) "Most of the commands should belong to the table >> >> environment" >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> Thanks for updating the FLIP this makes things easier to >> >>>>>>>>>> understand. >> >>>>>>>>>>> It >> >>>>>>>>>>>>>> is good to see that most commends will be available in >> >>>>>>>>>>>> TableEnvironment. >> >>>>>>>>>>>>>> However, I would also support SET and RESET for >> consistency. >> >>>>>>>>>> Again, >> >>>>>>>>>>>> from >> >>>>>>>>>>>>>> an architectural point of view, if we would allow some >> kind of >> >>>>>>>>>>>>>> `Operation` hook in table environment, we could check for >> SQL >> >>>>>>>>>> Client >> >>>>>>>>>>>>>> specific options and forward to regular >> >>>>>>>>>>> `TableConfig.getConfiguration` >> >>>>>>>>>>>>>> otherwise. What do you think? >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> Regards, >> >>>>>>>>>>>>>> Timo >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>> On 03.02.21 08:58, Jark Wu wrote: >> >>>>>>>>>>>>>>> Hi Timo, >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> I will respond some of the questions: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> 1) SQL client specific options >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Whether it starts with "table" or "sql-client" depends on >> >> where >> >>>>>>>>>> the >> >>>>>>>>>>>>>>> configuration takes effect. >> >>>>>>>>>>>>>>> If it is a table configuration, we should make clear >> what's >> >> the >> >>>>>>>>>>>>> behavior >> >>>>>>>>>>>>>>> when users change >> >>>>>>>>>>>>>>> the configuration in the lifecycle of TableEnvironment. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> I agree with Shengkai `sql-client.planner` and >> >>>>>>>>>>>>>> `sql-client.execution.mode` >> >>>>>>>>>>>>>>> are something special >> >>>>>>>>>>>>>>> that can't be changed after TableEnvironment has been >> >>>>>>>>>> initialized. >> >>>>>>>>>>>> You >> >>>>>>>>>>>>>> can >> >>>>>>>>>>>>>>> see >> >>>>>>>>>>>>>>> `StreamExecutionEnvironment` provides `configure()` >> method >> >> to >> >>>>>>>>>>>> override >> >>>>>>>>>>>>>>> configuration after >> >>>>>>>>>>>>>>> StreamExecutionEnvironment has been initialized. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Therefore, I think it would be better to still use >> >>>>>>>>>>>>> `sql-client.planner` >> >>>>>>>>>>>>>>> and `sql-client.execution.mode`. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> 2) Execution file >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >From my point of view, there is a big difference between >> >>>>>>>>>>>>>>> `sql-client.job.detach` and >> >>>>>>>>>>>>>>> `TableEnvironment.executeMultiSql()` that >> >>>>>>>>>> `sql-client.job.detach` >> >>>>>>>>>>>> will >> >>>>>>>>>>>>>>> affect every single DML statement >> >>>>>>>>>>>>>>> in the terminal, not only the statements in SQL files. I >> >> think >> >>>>>>>>>> the >> >>>>>>>>>>>>> single >> >>>>>>>>>>>>>>> DML statement in the interactive >> >>>>>>>>>>>>>>> terminal is something like tEnv#executeSql() instead of >> >>>>>>>>>>>>>>> tEnv#executeMultiSql. >> >>>>>>>>>>>>>>> So I don't like the "multi" and "sql" keyword in >> >>>>>>>>>>>>> `table.multi-sql-async`. >> >>>>>>>>>>>>>>> I just find that runtime provides a configuration called >> >>>>>>>>>>>>>>> "execution.attached" [1] which is false by default >> >>>>>>>>>>>>>>> which specifies if the pipeline is submitted in attached >> or >> >>>>>>>>>>> detached >> >>>>>>>>>>>>>> mode. >> >>>>>>>>>>>>>>> It provides exactly the same >> >>>>>>>>>>>>>>> functionality of `sql-client.job.detach`. What do you >> think >> >>>>>>>>>> about >> >>>>>>>>>>>> using >> >>>>>>>>>>>>>>> this option? >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> If we also want to support this config in >> TableEnvironment, I >> >>>>>>>>>> think >> >>>>>>>>>>>> it >> >>>>>>>>>>>>>>> should also affect the DML execution >> >>>>>>>>>>>>>>> of `tEnv#executeSql()`, not only DMLs in >> >>>>>>>>>>> `tEnv#executeMultiSql()`. >> >>>>>>>>>>>>>>> Therefore, the behavior may look like this: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> val tableResult = tEnv.executeSql("INSERT INTO ...") ==> >> >> async >> >>>>>>>>>> by >> >>>>>>>>>>>>>> default >> >>>>>>>>>>>>>>> tableResult.await() ==> manually block until finish >> >>>>>>>>>>>>>>> >> >>>>>>>>>> >> >> tEnv.getConfig().getConfiguration().setString("execution.attached", >> >>>>>>>>>>>>>> "true") >> >>>>>>>>>>>>>>> val tableResult2 = tEnv.executeSql("INSERT INTO ...") ==> >> >>>> sync, >> >>>>>>>>>>>> don't >> >>>>>>>>>>>>>> need >> >>>>>>>>>>>>>>> to wait on the TableResult >> >>>>>>>>>>>>>>> tEnv.executeMultiSql( >> >>>>>>>>>>>>>>> """ >> >>>>>>>>>>>>>>> CREATE TABLE .... ==> always sync >> >>>>>>>>>>>>>>> INSERT INTO ... => sync, because we set configuration >> above >> >>>>>>>>>>>>>>> SET execution.attached = false; >> >>>>>>>>>>>>>>> INSERT INTO ... => async >> >>>>>>>>>>>>>>> """) >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> On the other hand, I think `sql-client.job.detach` >> >>>>>>>>>>>>>>> and `TableEnvironment.executeMultiSql()` should be two >> >> separate >> >>>>>>>>>>>> topics, >> >>>>>>>>>>>>>>> as Shengkai mentioned above, SQL CLI only depends on >> >>>>>>>>>>>>>>> `TableEnvironment#executeSql()` to support multi-line >> >>>>>>>>>> statements. >> >>>>>>>>>>>>>>> I'm fine with making `executeMultiSql()` clear but don't >> want >> >>>>>>>>>> it to >> >>>>>>>>>>>>> block >> >>>>>>>>>>>>>>> this FLIP, maybe we can discuss this in another thread. >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>> Jark >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> [1]: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://ci.apache.org/projects/flink/flink-docs-master/deployment/config.html#execution-attached >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>> On Wed, 3 Feb 2021 at 15:33, Shengkai Fang < >> >> fskm...@gmail.com> >> >>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> Hi, Timo. >> >>>>>>>>>>>>>>>> Thanks for your detailed feedback. I have some thoughts >> >> about >> >>>>>>>>>> your >> >>>>>>>>>>>>>>>> feedback. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> *Regarding #1*: I think the main problem is whether the >> >> table >> >>>>>>>>>>>>>> environment >> >>>>>>>>>>>>>>>> has the ability to update itself. Let's take a simple >> >> program >> >>>>>>>>>> as >> >>>>>>>>>>> an >> >>>>>>>>>>>>>>>> example. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> ``` >> >>>>>>>>>>>>>>>> TableEnvironment tEnv = TableEnvironment.create(...); >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> tEnv.getConfig.getConfiguration.setString("table.planner", >> >>>>>>>>>> "old"); >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> tEnv.executeSql("..."); >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> ``` >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> If we regard this option as a table option, users don't >> have >> >>>> to >> >>>>>>>>>>>> create >> >>>>>>>>>>>>>>>> another table environment manually. In that case, tEnv >> needs >> >>>> to >> >>>>>>>>>>>> check >> >>>>>>>>>>>>>>>> whether the current mode and planner are the same as >> before >> >>>>>>>>>> when >> >>>>>>>>>>>>>> executeSql >> >>>>>>>>>>>>>>>> or explainSql. I don't think it's easy work for the table >> >>>>>>>>>>>> environment, >> >>>>>>>>>>>>>>>> especially if users have a StreamExecutionEnvironment but >> >> set >> >>>>>>>>>> old >> >>>>>>>>>>>>>> planner >> >>>>>>>>>>>>>>>> and batch mode. But when we make this option as a sql >> client >> >>>>>>>>>>> option, >> >>>>>>>>>>>>>> users >> >>>>>>>>>>>>>>>> only use the SET command to change the setting. We can >> >> rebuild >> >>>>>>>>>> a >> >>>>>>>>>>> new >> >>>>>>>>>>>>>> table >> >>>>>>>>>>>>>>>> environment when set successes. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> *Regarding #2*: I think we need to discuss the >> >> implementation >> >>>>>>>>>>> before >> >>>>>>>>>>>>>>>> continuing this topic. In the sql client, we will >> maintain >> >> two >> >>>>>>>>>>>>> parsers. >> >>>>>>>>>>>>>> The >> >>>>>>>>>>>>>>>> first parser(client parser) will only match the sql >> client >> >>>>>>>>>>> commands. >> >>>>>>>>>>>>> If >> >>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>> client parser can't parse the statement, we will leverage >> >> the >> >>>>>>>>>>> power >> >>>>>>>>>>>> of >> >>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>> table environment to execute. According to our blueprint, >> >>>>>>>>>>>>>>>> TableEnvironment#executeSql is enough for the sql client. >> >>>>>>>>>>> Therefore, >> >>>>>>>>>>>>>>>> TableEnvironment#executeMultiSql is out-of-scope for this >> >>>> FLIP. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> But if we need to introduce the >> >>>>>>>>>> `TableEnvironment.executeMultiSql` >> >>>>>>>>>>>> in >> >>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>> future, I think it's OK to use the option >> >>>>>>>>>> `table.multi-sql-async` >> >>>>>>>>>>>>> rather >> >>>>>>>>>>>>>>>> than option `sql-client.job.detach`. But we think the >> name >> >> is >> >>>>>>>>>> not >> >>>>>>>>>>>>>> suitable >> >>>>>>>>>>>>>>>> because the name is confusing for others. When setting >> the >> >>>>>>>>>> option >> >>>>>>>>>>>>>> false, we >> >>>>>>>>>>>>>>>> just mean it will block the execution of the INSERT INTO >> >>>>>>>>>>> statement, >> >>>>>>>>>>>>> not >> >>>>>>>>>>>>>> DDL >> >>>>>>>>>>>>>>>> or others(other sql statements are always executed >> >>>>>>>>>> synchronously). >> >>>>>>>>>>>> So >> >>>>>>>>>>>>>> how >> >>>>>>>>>>>>>>>> about `table.job.async`? It only works for the sql-client >> >> and >> >>>>>>>>>> the >> >>>>>>>>>>>>>>>> executeMultiSql. If we set this value false, the table >> >>>>>>>>>> environment >> >>>>>>>>>>>>> will >> >>>>>>>>>>>>>>>> return the result until the job finishes. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> *Regarding #3, #4*: I still think we should use DELETE >> JAR >> >> and >> >>>>>>>>>>> LIST >> >>>>>>>>>>>>> JAR >> >>>>>>>>>>>>>>>> because HIVE also uses these commands to add the jar into >> >> the >> >>>>>>>>>>>>> classpath >> >>>>>>>>>>>>>> or >> >>>>>>>>>>>>>>>> delete the jar. If we use such commands, it can reduce >> our >> >>>>>>>>>> work >> >>>>>>>>>>> for >> >>>>>>>>>>>>>> hive >> >>>>>>>>>>>>>>>> compatibility. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> For SHOW JAR, I think the main concern is the jars are >> not >> >>>>>>>>>>>> maintained >> >>>>>>>>>>>>> by >> >>>>>>>>>>>>>>>> the Catalog. If we really needs to keep consistent with >> SQL >> >>>>>>>>>>> grammar, >> >>>>>>>>>>>>>> maybe >> >>>>>>>>>>>>>>>> we should use >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> `ADD JAR` -> `CREATE JAR`, >> >>>>>>>>>>>>>>>> `DELETE JAR` -> `DROP JAR`, >> >>>>>>>>>>>>>>>> `LIST JAR` -> `SHOW JAR`. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> *Regarding #5*: I agree with you that we'd better keep >> >>>>>>>>>> consistent. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> *Regarding #6*: Yes. Most of the commands should belong >> to >> >> the >> >>>>>>>>>>> table >> >>>>>>>>>>>>>>>> environment. In the Summary section, I use the <NOTE> >> tag to >> >>>>>>>>>>>> identify >> >>>>>>>>>>>>>> which >> >>>>>>>>>>>>>>>> commands should belong to the sql client and which >> commands >> >>>>>>>>>> should >> >>>>>>>>>>>>>> belong >> >>>>>>>>>>>>>>>> to the table environment. I also add a new section about >> >>>>>>>>>>>>> implementation >> >>>>>>>>>>>>>>>> details in the FLIP. >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>> Shengkai >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> Timo Walther <twal...@apache.org> 于2021年2月2日周二 下午6:43写道: >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Thanks for this great proposal Shengkai. This will give >> the >> >>>>>>>>>> SQL >> >>>>>>>>>>>>> Client >> >>>>>>>>>>>>>> a >> >>>>>>>>>>>>>>>>> very good update and make it production ready. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Here is some feedback from my side: >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 1) SQL client specific options >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> I don't think that `sql-client.planner` and >> >>>>>>>>>>>>> `sql-client.execution.mode` >> >>>>>>>>>>>>>>>>> are SQL Client specific. Similar to >> >>>>>>>>>> `StreamExecutionEnvironment` >> >>>>>>>>>>>> and >> >>>>>>>>>>>>>>>>> `ExecutionConfig#configure` that have been added >> recently, >> >> we >> >>>>>>>>>>>> should >> >>>>>>>>>>>>>>>>> offer a possibility for TableEnvironment. How about we >> >> offer >> >>>>>>>>>>>>>>>>> `TableEnvironment.create(ReadableConfig)` and add a >> >>>>>>>>>>> `table.planner` >> >>>>>>>>>>>>> and >> >>>>>>>>>>>>>>>>> `table.execution-mode` to >> >>>>>>>>>>>>>>>>> `org.apache.flink.table.api.config.TableConfigOptions`? >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 2) Execution file >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Did you have a look at the Appendix of FLIP-84 [1] >> >> including >> >>>>>>>>>> the >> >>>>>>>>>>>>>> mailing >> >>>>>>>>>>>>>>>>> list thread at that time? Could you further elaborate >> how >> >> the >> >>>>>>>>>>>>>>>>> multi-statement execution should work for a unified >> >>>>>>>>>>> batch/streaming >> >>>>>>>>>>>>>>>>> story? According to our past discussions, each line in >> an >> >>>>>>>>>>> execution >> >>>>>>>>>>>>>> file >> >>>>>>>>>>>>>>>>> should be executed blocking which means a streaming >> query >> >>>>>>>>>> needs a >> >>>>>>>>>>>>>>>>> statement set to execute multiple INSERT INTO statement, >> >>>>>>>>>> correct? >> >>>>>>>>>>>> We >> >>>>>>>>>>>>>>>>> should also offer this functionality in >> >>>>>>>>>>>>>>>>> `TableEnvironment.executeMultiSql()`. Whether >> >>>>>>>>>>>> `sql-client.job.detach` >> >>>>>>>>>>>>>> is >> >>>>>>>>>>>>>>>>> SQL Client specific needs to be determined, it could >> also >> >> be >> >>>> a >> >>>>>>>>>>>>> general >> >>>>>>>>>>>>>>>>> `table.multi-sql-async` option? >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 3) DELETE JAR >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Shouldn't the opposite of "ADD" be "REMOVE"? "DELETE" >> >> sounds >> >>>>>>>>>> like >> >>>>>>>>>>>> one >> >>>>>>>>>>>>>> is >> >>>>>>>>>>>>>>>>> actively deleting the JAR in the corresponding path. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 4) LIST JAR >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> This should be `SHOW JARS` according to other SQL >> commands >> >>>>>>>>>> such >> >>>>>>>>>>> as >> >>>>>>>>>>>>>> `SHOW >> >>>>>>>>>>>>>>>>> CATALOGS`, `SHOW TABLES`, etc. [2]. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 5) EXPLAIN [ExplainDetail[, ExplainDetail]*] >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> We should keep the details in sync with >> >>>>>>>>>>>>>>>>> `org.apache.flink.table.api.ExplainDetail` and avoid >> >>>> confusion >> >>>>>>>>>>>> about >> >>>>>>>>>>>>>>>>> differently named ExplainDetails. I would vote for >> >>>>>>>>>>> `ESTIMATED_COST` >> >>>>>>>>>>>>>>>>> instead of `COST`. I'm sure the original author had a >> >> reason >> >>>>>>>>>> why >> >>>>>>>>>>> to >> >>>>>>>>>>>>>> call >> >>>>>>>>>>>>>>>>> it that way. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> 6) Implementation details >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> It would be nice to understand how we plan to implement >> the >> >>>>>>>>>> given >> >>>>>>>>>>>>>>>>> features. Most of the commands and config options >> should go >> >>>>>>>>>> into >> >>>>>>>>>>>>>>>>> TableEnvironment and SqlParser directly, correct? This >> way >> >>>>>>>>>> users >> >>>>>>>>>>>>> have a >> >>>>>>>>>>>>>>>>> unified way of using Flink SQL. TableEnvironment would >> >>>>>>>>>> provide a >> >>>>>>>>>>>>>> similar >> >>>>>>>>>>>>>>>>> user experience in notebooks or interactive programs >> than >> >> the >> >>>>>>>>>> SQL >> >>>>>>>>>>>>>> Client. >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> [1] >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=134745878 >> >>>>>>>>>>>>>>>>> [2] >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://ci.apache.org/projects/flink/flink-docs-master/dev/table/sql/show.html >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> Regards, >> >>>>>>>>>>>>>>>>> Timo >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> On 02.02.21 10:13, Shengkai Fang wrote: >> >>>>>>>>>>>>>>>>>> Sorry for the typo. I mean `RESET` is much better >> rather >> >>>> than >> >>>>>>>>>>>>> `UNSET`. >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>> Shengkai Fang <fskm...@gmail.com> 于2021年2月2日周二 >> 下午4:44写道: >> >>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> Hi, Jingsong. >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> Thanks for your reply. I think `UNSET` is much better. >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> 1. We don't need to introduce another command `UNSET`. >> >>>>>>>>>> `RESET` >> >>>>>>>>>>> is >> >>>>>>>>>>>>>>>>>>> supported in the current sql client now. Our proposal >> >> just >> >>>>>>>>>>>> extends >> >>>>>>>>>>>>>> its >> >>>>>>>>>>>>>>>>>>> grammar and allow users to reset the specified keys. >> >>>>>>>>>>>>>>>>>>> 2. Hive beeline also uses `RESET` to set the key to >> the >> >>>>>>>>>> default >> >>>>>>>>>>>>>>>>> value[1]. >> >>>>>>>>>>>>>>>>>>> I think it is more friendly for batch users. >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>>>>> Shengkai >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> [1] >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>> >> https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>> Jingsong Li <jingsongl...@gmail.com> 于2021年2月2日周二 >> >>>> 下午1:56写道: >> >>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>> Thanks for the proposal, yes, sql-client is too >> >> outdated. >> >>>>>>>>>> +1 >> >>>>>>>>>>> for >> >>>>>>>>>>>>>>>>>>>> improving it. >> >>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>> About "SET" and "RESET", Why not be "SET" and >> "UNSET"? >> >>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>>>>>> Jingsong >> >>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>> On Mon, Feb 1, 2021 at 2:46 PM Rui Li < >> >>>>>>>>>> lirui.fu...@gmail.com> >> >>>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>> Thanks Shengkai for the update! The proposed changes >> >> look >> >>>>>>>>>>> good >> >>>>>>>>>>>> to >> >>>>>>>>>>>>>>>> me. >> >>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>> On Fri, Jan 29, 2021 at 8:26 PM Shengkai Fang < >> >>>>>>>>>>>> fskm...@gmail.com >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> Hi, Rui. >> >>>>>>>>>>>>>>>>>>>>>> You are right. I have already modified the FLIP. >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> The main changes: >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> # -f parameter has no restriction about the >> statement >> >>>>>>>>>> type. >> >>>>>>>>>>>>>>>>>>>>>> Sometimes, users use the pipe to redirect the >> result >> >> of >> >>>>>>>>>>>> queries >> >>>>>>>>>>>>> to >> >>>>>>>>>>>>>>>>>>>>> debug >> >>>>>>>>>>>>>>>>>>>>>> when submitting job by -f parameter. It's much >> >>>> convenient >> >>>>>>>>>>>>>> comparing >> >>>>>>>>>>>>>>>>> to >> >>>>>>>>>>>>>>>>>>>>>> writing INSERT INTO statements. >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> # Add a new sql client option >> `sql-client.job.detach` >> >> . >> >>>>>>>>>>>>>>>>>>>>>> Users prefer to execute jobs one by one in the >> batch >> >>>>>>>>>> mode. >> >>>>>>>>>>>> Users >> >>>>>>>>>>>>>>>> can >> >>>>>>>>>>>>>>>>>>>>> set >> >>>>>>>>>>>>>>>>>>>>>> this option false and the client will process the >> next >> >>>>>>>>>> job >> >>>>>>>>>>>> until >> >>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>> current job finishes. The default value of this >> option >> >>>> is >> >>>>>>>>>>>> false, >> >>>>>>>>>>>>>>>>> which >> >>>>>>>>>>>>>>>>>>>>>> means the client will execute the next job when the >> >>>>>>>>>> current >> >>>>>>>>>>>> job >> >>>>>>>>>>>>> is >> >>>>>>>>>>>>>>>>>>>>>> submitted. >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>>>>>>>> Shengkai >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>> Rui Li <lirui.fu...@gmail.com> 于2021年1月29日周五 >> >> 下午4:52写道: >> >>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>> Hi Shengkai, >> >>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>> Regarding #2, maybe the -f options in flink and >> hive >> >>>>>>>>>> have >> >>>>>>>>>>>>>>>> different >> >>>>>>>>>>>>>>>>>>>>>>> implications, and we should clarify the behavior. >> For >> >>>>>>>>>>>> example, >> >>>>>>>>>>>>> if >> >>>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>>> client just submits the job and exits, what >> happens >> >> if >> >>>>>>>>>> the >> >>>>>>>>>>>> file >> >>>>>>>>>>>>>>>>>>>>> contains >> >>>>>>>>>>>>>>>>>>>>>>> two INSERT statements? I don't think we should >> treat >> >>>>>>>>>> them >> >>>>>>>>>>> as >> >>>>>>>>>>>> a >> >>>>>>>>>>>>>>>>>>>>> statement >> >>>>>>>>>>>>>>>>>>>>>>> set, because users should explicitly write BEGIN >> >>>>>>>>>> STATEMENT >> >>>>>>>>>>>> SET >> >>>>>>>>>>>>> in >> >>>>>>>>>>>>>>>>> that >> >>>>>>>>>>>>>>>>>>>>>>> case. And the client shouldn't asynchronously >> submit >> >>>> the >> >>>>>>>>>>> two >> >>>>>>>>>>>>>> jobs, >> >>>>>>>>>>>>>>>>>>>>> because >> >>>>>>>>>>>>>>>>>>>>>>> the 2nd may depend on the 1st, right? >> >>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>> On Fri, Jan 29, 2021 at 4:30 PM Shengkai Fang < >> >>>>>>>>>>>>> fskm...@gmail.com >> >>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>> Hi Rui, >> >>>>>>>>>>>>>>>>>>>>>>>> Thanks for your feedback. I agree with your >> >>>>>>>>>> suggestions. >> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>> For the suggestion 1: Yes. we are plan to >> strengthen >> >>>>>>>>>> the >> >>>>>>>>>>> set >> >>>>>>>>>>>>>>>>>>>>> command. In >> >>>>>>>>>>>>>>>>>>>>>>>> the implementation, it will just put the >> key-value >> >>>> into >> >>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>>>> `Configuration`, which will be used to generate >> the >> >>>>>>>>>> table >> >>>>>>>>>>>>>> config. >> >>>>>>>>>>>>>>>>> If >> >>>>>>>>>>>>>>>>>>>>> hive >> >>>>>>>>>>>>>>>>>>>>>>>> supports to read the setting from the table >> config, >> >>>>>>>>>> users >> >>>>>>>>>>>> are >> >>>>>>>>>>>>>>>> able >> >>>>>>>>>>>>>>>>>>>>> to set >> >>>>>>>>>>>>>>>>>>>>>>>> the hive-related settings. >> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>> For the suggestion 2: The -f parameter will >> submit >> >> the >> >>>>>>>>>> job >> >>>>>>>>>>>> and >> >>>>>>>>>>>>>>>>> exit. >> >>>>>>>>>>>>>>>>>>>>> If >> >>>>>>>>>>>>>>>>>>>>>>>> the queries never end, users have to cancel the >> job >> >> by >> >>>>>>>>>>>>>>>> themselves, >> >>>>>>>>>>>>>>>>>>>>> which is >> >>>>>>>>>>>>>>>>>>>>>>>> not reliable(people may forget their jobs). In >> most >> >>>>>>>>>> case, >> >>>>>>>>>>>>>> queries >> >>>>>>>>>>>>>>>>>>>>> are used >> >>>>>>>>>>>>>>>>>>>>>>>> to analyze the data. Users should use queries in >> the >> >>>>>>>>>>>>> interactive >> >>>>>>>>>>>>>>>>>>>>> mode. >> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>>>>>>>>>> Shengkai >> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>> Rui Li <lirui.fu...@gmail.com> 于2021年1月29日周五 >> >>>> 下午3:18写道: >> >>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> Thanks Shengkai for bringing up this >> discussion. I >> >>>>>>>>>> think >> >>>>>>>>>>> it >> >>>>>>>>>>>>>>>>> covers a >> >>>>>>>>>>>>>>>>>>>>>>>>> lot of useful features which will dramatically >> >>>> improve >> >>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>> usability of our >> >>>>>>>>>>>>>>>>>>>>>>>>> SQL Client. I have two questions regarding the >> >> FLIP. >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> 1. Do you think we can let users set arbitrary >> >>>>>>>>>>>> configurations >> >>>>>>>>>>>>>>>> via >> >>>>>>>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>>>>> SET command? A connector may have its own >> >>>>>>>>>> configurations >> >>>>>>>>>>>> and >> >>>>>>>>>>>>> we >> >>>>>>>>>>>>>>>>>>>>> don't have >> >>>>>>>>>>>>>>>>>>>>>>>>> a way to dynamically change such configurations >> in >> >>>> SQL >> >>>>>>>>>>>>> Client. >> >>>>>>>>>>>>>>>> For >> >>>>>>>>>>>>>>>>>>>>> example, >> >>>>>>>>>>>>>>>>>>>>>>>>> users may want to be able to change hive conf >> when >> >>>>>>>>>> using >> >>>>>>>>>>>> hive >> >>>>>>>>>>>>>>>>>>>>> connector [1]. >> >>>>>>>>>>>>>>>>>>>>>>>>> 2. Any reason why we have to forbid queries in >> SQL >> >>>>>>>>>> files >> >>>>>>>>>>>>>>>> specified >> >>>>>>>>>>>>>>>>>>>>> with >> >>>>>>>>>>>>>>>>>>>>>>>>> the -f option? Hive supports a similar -f option >> >> but >> >>>>>>>>>>> allows >> >>>>>>>>>>>>>>>>> queries >> >>>>>>>>>>>>>>>>>>>>> in the >> >>>>>>>>>>>>>>>>>>>>>>>>> file. And a common use case is to run some query >> >> and >> >>>>>>>>>>>> redirect >> >>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>> results >> >>>>>>>>>>>>>>>>>>>>>>>>> to a file. So I think maybe flink users would >> like >> >> to >> >>>>>>>>>> do >> >>>>>>>>>>>> the >> >>>>>>>>>>>>>>>> same, >> >>>>>>>>>>>>>>>>>>>>>>>>> especially in batch scenarios. >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> [1] >> >>>> https://issues.apache.org/jira/browse/FLINK-20590 >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> On Fri, Jan 29, 2021 at 10:46 AM Sebastian Liu < >> >>>>>>>>>>>>>>>>>>>>> liuyang0...@gmail.com> >> >>>>>>>>>>>>>>>>>>>>>>>>> wrote: >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> Hi Shengkai, >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> Glad to see this improvement. And I have some >> >>>>>>>>>> additional >> >>>>>>>>>>>>>>>>>>>>> suggestions: >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> #1. Unify the TableEnvironment in >> ExecutionContext >> >>>> to >> >>>>>>>>>>>>>>>>>>>>>>>>>> StreamTableEnvironment for both streaming and >> >> batch >> >>>>>>>>>> sql. >> >>>>>>>>>>>>>>>>>>>>>>>>>> #2. Improve the way of results retrieval: sql >> >> client >> >>>>>>>>>>>> collect >> >>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>>>>>> results >> >>>>>>>>>>>>>>>>>>>>>>>>>> locally all at once using accumulators at >> present, >> >>>>>>>>>>>>>>>>>>>>>>>>>> which may have memory issues in JM >> or >> >>>> Local >> >>>>>>>>>> for >> >>>>>>>>>>>> the >> >>>>>>>>>>>>>> big >> >>>>>>>>>>>>>>>>> query >> >>>>>>>>>>>>>>>>>>>>>>>>>> result. >> >>>>>>>>>>>>>>>>>>>>>>>>>> Accumulator is only suitable for testing >> purpose. >> >>>>>>>>>>>>>>>>>>>>>>>>>> We may change to use >> SelectTableSink, >> >>>> which >> >>>>>>>>>> is >> >>>>>>>>>>>> based >> >>>>>>>>>>>>>>>>>>>>>>>>>> on CollectSinkOperatorCoordinator. >> >>>>>>>>>>>>>>>>>>>>>>>>>> #3. Do we need to consider Flink SQL gateway >> which >> >>>>>>>>>> is in >> >>>>>>>>>>>>>>>> FLIP-91. >> >>>>>>>>>>>>>>>>>>>>> Seems >> >>>>>>>>>>>>>>>>>>>>>>>>>> that this FLIP has not moved forward for a long >> >>>> time. >> >>>>>>>>>>>>>>>>>>>>>>>>>> Provide a long running service out >> of >> >> the >> >>>>>>>>>> box to >> >>>>>>>>>>>>>>>>> facilitate >> >>>>>>>>>>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>>>>>>> sql >> >>>>>>>>>>>>>>>>>>>>>>>>>> submission is necessary. >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> What do you think of these? >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> [1] >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-91%3A+Support+SQL+Client+Gateway >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> Shengkai Fang <fskm...@gmail.com> >> 于2021年1月28日周四 >> >>>>>>>>>>> 下午8:54写道: >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Hi devs, >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Jark and I want to start a discussion about >> >>>>>>>>>>> FLIP-163:SQL >> >>>>>>>>>>>>>>>> Client >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Improvements. >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Many users have complained about the problems >> of >> >>>> the >> >>>>>>>>>>> sql >> >>>>>>>>>>>>>>>> client. >> >>>>>>>>>>>>>>>>>>>>> For >> >>>>>>>>>>>>>>>>>>>>>>>>>>> example, users can not register the table >> >> proposed >> >>>>>>>>>> by >> >>>>>>>>>>>>>> FLIP-95. >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> The main changes in this FLIP: >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> - use -i parameter to specify the sql file to >> >>>>>>>>>>> initialize >> >>>>>>>>>>>>> the >> >>>>>>>>>>>>>>>>>>>>> table >> >>>>>>>>>>>>>>>>>>>>>>>>>>> environment and deprecated YAML file; >> >>>>>>>>>>>>>>>>>>>>>>>>>>> - add -f to submit sql file and deprecated >> '-u' >> >>>>>>>>>>>> parameter; >> >>>>>>>>>>>>>>>>>>>>>>>>>>> - add more interactive commands, e.g ADD JAR; >> >>>>>>>>>>>>>>>>>>>>>>>>>>> - support statement set syntax; >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> For more detailed changes, please refer to >> >>>>>>>>>> FLIP-163[1]. >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Look forward to your feedback. >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Best, >> >>>>>>>>>>>>>>>>>>>>>>>>>>> Shengkai >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> [1] >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>> >> >>>>>>>>>>>>> >> >>>>>>>>>>>> >> >>>>>>>>>>> >> >>>>>>>>>> >> >>>>>>> >> >>>>>> >> >>>> >> >> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-163%3A+SQL+Client+Improvements >> >>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> *With kind regards >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>> ------------------------------------------------------------ >> >>>>>>>>>>>>>>>>>>>>>>>>>> Sebastian Liu 刘洋 >> >>>>>>>>>>>>>>>>>>>>>>>>>> Institute of Computing Technology, Chinese >> Academy >> >>>> of >> >>>>>>>>>>>>> Science >> >>>>>>>>>>>>>>>>>>>>>>>>>> Mobile\WeChat: +86—15201613655 >> >>>>>>>>>>>>>>>>>>>>>>>>>> E-mail: liuyang0...@gmail.com < >> >>>> liuyang0...@gmail.com >> >>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>> QQ: 3239559* >> >>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>>>>>>>>>>>>> Best regards! >> >>>>>>>>>>>>>>>>>>>>>>>>> Rui Li >> >>>>>>>>>>> >> > >> >> -- Best regards! Rui Li