I had a look at SQL-2016 that Martijn mentioned, and found that maybe we could follow the transaction savepoint syntax. SAVEPOINT <savepoint specifier> RELEASE SAVEPOINT <savepoint specifier> These savepoint statements are supported in lots of databases, like Oracle[1], PG[2], MariaDB[3].
They’re usually used in the middle of a SQL transaction, so the target would be the current transaction. But if used in Flink SQL session, we need to add a JOB/QUERY id when create a savepoint, thus the syntax would be: SAVEPOINT <job/query id> <savepoint path> RELEASE SAVEPOINT <savepoint path> I’m adding it as an alternative in the FLIP. [1] https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10001.htm <https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_10001.htm> [2] https://www.postgresql.org/docs/current/sql-savepoint.html [3] https://mariadb.com/kb/en/savepoint/ Best, Paul Lam > 2022年5月4日 16:42,Paul Lam <paullin3...@gmail.com> 写道: > > Hi Shengkai, > > Thanks a lot for your input! > > > I just wonder how the users can get the web ui in the application mode. > Therefore, it's better we can list the Web UI using the SHOW statement. > WDYT? > > I think it's a valid approach. I'm adding it to the FLIP. > > > After the investigation, I am fine with the QUERY but the keyword JOB is > also okay to me. > > In addition, CockroachDB has both SHOW QUERIES [1] and SHOW JOBS [2], > while the former shows the active running queries and the latter shows the > background tasks like schema changes. FYI. > > WRT the questions: > > > 1. Could you add some details about the behaviour with the different > execution.target, e.g. session, application mode? > > IMHO, the difference between different `execution.target` is mostly about > cluster startup, which has little relation with the proposed statements. > These statements rely on the current ClusterClient/JobClient API, > which is deployment mode agnostic. Canceling a job in an application > cluster is the same as in a session cluster. > > BTW, application mode is still in the development progress ATM [3]. > > > 2. Considering the SQL Client/Gateway is not limited to submitting the job > to the specified cluster, is it able to list jobs in the other clusters? > > I think multi-cluster support in SQL Client/Gateway should be aligned with > CLI, at least at the early phase. We may use SET to set a cluster id for a > session, then we have access to the cluster. However, every SHOW > statement would only involve one cluster. > > Best, > Paul Lam > > [1] https://www.cockroachlabs.com/docs/stable/show-statements.html > <https://www.cockroachlabs.com/docs/stable/show-statements.html> > [2] https://www.cockroachlabs.com/docs/v21.2/show-jobs > <https://www.cockroachlabs.com/docs/v21.2/show-jobs> > [3] https://issues.apache.org/jira/browse/FLINK-26541 > <https://issues.apache.org/jira/browse/FLINK-26541> > Shengkai Fang <fskm...@gmail.com <mailto:fskm...@gmail.com>> 于2022年4月29日周五 > 15:36写道: > Hi. > > Thanks for Paul's update. > > > It's better we can also get the infos about the cluster where the job is > > running through the DESCRIBE statement. > > I just wonder how the users can get the web ui in the application mode. > Therefore, it's better we can list the Web UI using the SHOW statement. > WDYT? > > > > QUERY or other keywords. > > I list the statement to manage the lifecycle of the query/dml in other > systems: > > Mysql[1] allows users to SHOW [FULL] PROCESSLIST and use the KILL command > to kill the query. > > ``` > mysql> SHOW PROCESSLIST; > > mysql> KILL 27; > ``` > > > Postgres use the following statements to kill the queries. > > ``` > SELECT pg_cancel_backend(<pid of the process>) > > SELECT pg_terminate_backend(<pid of the process>) > ``` > > KSQL uses the following commands to control the query lifecycle[4]. > > ``` > SHOW QUERIES; > > TERMINATE <query id>; > > ``` > > [1] https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html > <https://dev.mysql.com/doc/refman/8.0/en/show-processlist.html> > [2] https://scaledynamix.com/blog/how-to-kill-mysql-queries/ > <https://scaledynamix.com/blog/how-to-kill-mysql-queries/> > [3] > https://stackoverflow.com/questions/35319597/how-to-stop-kill-a-query-in-postgresql > > <https://stackoverflow.com/questions/35319597/how-to-stop-kill-a-query-in-postgresql> > [4] > https://docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/show-queries/ > > <https://docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/show-queries/> > [5] > https://docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/terminate/ > <https://docs.ksqldb.io/en/latest/developer-guide/ksqldb-reference/terminate/> > > After the investigation, I am fine with the QUERY but the keyword JOB is > also okay to me. > > We also have two questions here. > > 1. Could you add some details about the behaviour with the different > execution.target, e.g. session, application mode? > > 2. Considering the SQL Client/Gateway is not limited to submitting the job > to the specified cluster, is it able to list jobs in the other clusters? > > > Best, > Shengkai > > Paul Lam <paullin3...@gmail.com <mailto:paullin3...@gmail.com>> 于2022年4月28日周四 > 17:17写道: > > > Hi Martjin, > > > > Thanks a lot for your reply! I agree that the scope may be a bit confusing, > > please let me clarify. > > > > The FLIP aims to add new SQL statements that are supported only in > > sql-client, similar to > > jar statements [1]. Jar statements can be parsed into jar operations, which > > are used only in > > CliClient in sql-client module and cannot be executed by TableEnvironment > > (not available in > > Table API program that contains SQL that you mentioned). > > > > WRT the unchanged CLI client, I mean CliClient instead of the sql-client > > module, which > > currently contains the gateway codes (e.g. Executor). The FLIP mainly > > extends > > the gateway part, and barely touches CliClient and REST server (REST > > endpoint in FLIP-91). > > > > WRT the syntax, I don't have much experience with SQL standards, and I'd > > like to hear > > more opinions from the community. I prefer Hive-style syntax because I > > think many users > > are familiar with Hive, and there're on-going efforts to improve Flink-Hive > > integration [2][3]. > > But my preference is not strong, I'm okay with other options too. Do you > > think JOB/Task is > > a good choice, or do you have other preferred keywords? > > > > [1] > > > > https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/jar/ > > > > <https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/table/sql/jar/> > > [2] > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-152%3A+Hive+Query+Syntax+Compatibility > > > > <https://cwiki.apache.org/confluence/display/FLINK/FLIP-152%3A+Hive+Query+Syntax+Compatibility> > > [3] > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-223%3A+Support+HiveServer2+Endpoint > > > > <https://cwiki.apache.org/confluence/display/FLINK/FLIP-223%3A+Support+HiveServer2+Endpoint> > > > > Best, > > Paul Lam > > > > Martijn Visser <martijnvis...@apache.org <mailto:martijnvis...@apache.org>> > > 于2022年4月26日周二 20:14写道: > > > > > Hi Paul, > > > > > > Thanks for creating the FLIP and opening the discussion. I did get a bit > > > confused about the title, being "query lifecycle statements in SQL > > client". > > > This sounds like you want to adopt the SQL client, but you want to expand > > > the SQL syntax with lifecycle statements, which could be used from the > > SQL > > > client, but of course also in a Table API program that contains SQL. > > GIven > > > that you're highlighting the CLI client as unchanged, this adds to more > > > confusion. > > > > > > I am interested if there's anything listed in the SQL 2016 standard on > > > these types of lifecycle statements. I did a quick scan for "SHOW > > QUERIES" > > > but couldn't find it. It would be great if we could stay as close as > > > possible to such syntax. Overall I'm not in favour of using QUERIES as a > > > keyword. I think Flink applications are not queries, but short- or long > > > running applications. Why should we follow Hive's setup and indeed not > > > others such as Snowflake, but also Postgres or MySQL? > > > > > > Best regards, > > > > > > Martijn Visser > > > https://twitter.com/MartijnVisser82 <https://twitter.com/MartijnVisser82> > > > https://github.com/MartijnVisser <https://github.com/MartijnVisser> > > > > > > > > > On Fri, 22 Apr 2022 at 12:06, Paul Lam <paullin3...@gmail.com > > > <mailto:paullin3...@gmail.com>> wrote: > > > > > > > Hi Shengkai, > > > > > > > > Thanks a lot for your opinions! > > > > > > > > > 1. I think the keyword QUERY may confuse users because the statement > > > also > > > > > works for the DML statement. > > > > > > > > I slightly lean to QUERY, because: > > > > > > > > Hive calls DMLs queries. We could be better aligned with Hive using > > > QUERY, > > > > especially given that we plan to introduce Hive endpoint. > > > > QUERY is a more SQL-like concept and friendly to SQL users. > > > > > > > > In general, my preference: QUERY > JOB > TASK. I’m okay with JOB, but > > not > > > > very good with TASK, as it conflicts with the task concept in Flink > > > runtime. > > > > > > > > We could wait for more feedbacks from the community. > > > > > > > > > 2. STOP/CANCEL is not very straightforward for the SQL users to > > > terminate > > > > > their jobs. > > > > > > > > Agreed. I’m okay with DROP. And if we want to align with Hive, KILL > > might > > > > an alternative. > > > > > > > > > 3. I think CREATE/DROP SAVEPOINTS statement is more SQL-like. > > > > > > > > Agreed. It’s more SQL-like and intuitive. I’m updating the syntax on > > the > > > > FLIP. > > > > > > > > > 4. SHOW TASKS can just list the job id and use the DESCRIPE to get > > more > > > > > detailed job infos. > > > > > > > > That is a more SQL-like approach I think. But considering the > > > > ClusterClient APIs, we can fetch the names and the status along in one > > > > request, > > > > thus it may be more user friendly to return them all in the SHOW > > > > statement? > > > > > > > > > It's better we can also get the infos about the cluster where the job > > > is > > > > > running on through the DESCRIBE statement. > > > > > > > > I think cluster info could be part of session properties instead. WDYT? > > > > > > > > Best, > > > > Paul Lam > > > > > > > > > 2022年4月22日 11:14,Shengkai Fang <fskm...@gmail.com > > > > > <mailto:fskm...@gmail.com>> 写道: > > > > > > > > > > Hi Paul > > > > > > > > > > Sorry for the late response. I propose my thoughts here. > > > > > > > > > > 1. I think the keyword QUERY may confuse users because the statement > > > also > > > > > works for the DML statement. I find the Snowflakes[1] supports > > > > > > > > > > - CREATE TASK > > > > > - DROP TASK > > > > > - ALTER TASK > > > > > - SHOW TASKS > > > > > - DESCRIPE TASK > > > > > > > > > > I think we can follow snowflake to use `TASK` as the keyword or use > > the > > > > > keyword `JOB`? > > > > > > > > > > 2. STOP/CANCEL is not very straightforward for the SQL users to > > > terminate > > > > > their jobs. > > > > > > > > > > ``` > > > > > DROP TASK [IF EXISTS] <job id> PURGE; -- Forcely stop the job with > > > drain > > > > > > > > > > DROP TASK [IF EXISTS] <job id>; -- Stop the task with savepoints > > > > > ``` > > > > > > > > > > Oracle[2] uses the PURGE to clean up the table and users can't not > > > > recover. > > > > > I think it also works for us to terminate the job permanently. > > > > > > > > > > 3. I think CREATE/DROP SAVEPOINTS statement is more SQL-like. Users > > can > > > > use > > > > > the > > > > > > > > > > ``` > > > > > SET 'state.savepoints.dir' = '<path_to_savepoint>'; > > > > > SET 'state.savepoints.fomat' = 'native'; > > > > > CREATE SAVEPOINT <job id>; > > > > > > > > > > DROP SAVEPOINT <path_to_savepoint>; > > > > > ``` > > > > > > > > > > 4. SHOW TASKS can just list the job id and use the DESCRIPE to get > > more > > > > > detailed job infos. > > > > > > > > > > ``` > > > > > > > > > > SHOW TASKS; > > > > > > > > > > > > > > > +----------------------------------+ > > > > > | job_id | > > > > > +----------------------------------+ > > > > > | 0f6413c33757fbe0277897dd94485f04 | > > > > > +----------------------------------+ > > > > > > > > > > DESCRIPE TASK <job id>; > > > > > > > > > > +------------------------ > > > > > | job name | status | > > > > > +------------------------ > > > > > | insert-sink | running | > > > > > +------------------------ > > > > > > > > > > ``` > > > > > It's better we can also get the infos about the cluster where the job > > > is > > > > > running on through the DESCRIBE statement. > > > > > > > > > > > > > > > [1] > > > > > > > > > > > > > > https://docs.snowflake.com/en/sql-reference/ddl-pipeline.html#task-management > > > > <https://docs.snowflake.com/en/sql-reference/ddl-pipeline.html#task-management> > > > > < > > > > > > > > > https://docs.snowflake.com/en/sql-reference/ddl-pipeline.html#task-management > > > > <https://docs.snowflake.com/en/sql-reference/ddl-pipeline.html#task-management> > > > > > > > > > > [2] > > > > > > > > > > > > > > https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9003.htm#SQLRF01806 > > > > <https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9003.htm#SQLRF01806> > > > > < > > > > > > > > > https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9003.htm#SQLRF01806 > > > > <https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_9003.htm#SQLRF01806> > > > > > > > > > > > > > > > Paul Lam <paullin3...@gmail.com <mailto:paullin3...@gmail.com> > > > > > <mailto:paullin3...@gmail.com <mailto:paullin3...@gmail.com>>> > > > > 于2022年4月21日周四 10:36写道: > > > > > > > > > >> ping @Timo @Jark @Shengkai > > > > >> > > > > >> Best, > > > > >> Paul Lam > > > > >> > > > > >>> 2022年4月18日 17:12,Paul Lam <paullin3...@gmail.com > > > > >>> <mailto:paullin3...@gmail.com>> 写道: > > > > >>> > > > > >>> Hi team, > > > > >>> > > > > >>> I’d like to start a discussion about FLIP-222 [1], which adds query > > > > >> lifecycle > > > > >>> statements to SQL client. > > > > >>> > > > > >>> Currently, SQL client supports submitting queries (queries in a > > broad > > > > >> sense, > > > > >>> including DQLs and DMLs) but no further lifecycle statements, like > > > > >> canceling > > > > >>> a query or triggering a savepoint. That makes SQL users have to > > rely > > > on > > > > >>> CLI or REST API to manage theirs queries. > > > > >>> > > > > >>> Thus, I propose to introduce the following statements to fill the > > > gap. > > > > >>> SHOW QUERIES > > > > >>> STOP QUERY <query_id> > > > > >>> CANCEL QUERY <query_id> > > > > >>> TRIGGER SAVEPOINT <savepoint_path> > > > > >>> DISPOSE SAVEPOINT <savepoint_path> > > > > >>> These statement would align SQL client with CLI, providing the full > > > > >> lifecycle > > > > >>> management for queries/jobs. > > > > >>> > > > > >>> Please see the FLIP page[1] for more details. Thanks a lot! > > > > >>> (For reference, the previous discussion thread see [2].) > > > > >>> > > > > >>> [1] > > > > >> > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-222%3A+Support+full+query+lifecycle+statements+in+SQL+client > > > > <https://cwiki.apache.org/confluence/display/FLINK/FLIP-222%3A+Support+full+query+lifecycle+statements+in+SQL+client> > > > > >> < > > > > >> > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-222:+Support+full+query+lifecycle+statements+in+SQL+client > > > > <https://cwiki.apache.org/confluence/display/FLINK/FLIP-222:+Support+full+query+lifecycle+statements+in+SQL+client> > > > > < > > > > > > > > > https://cwiki.apache.org/confluence/display/FLINK/FLIP-222:+Support+full+query+lifecycle+statements+in+SQL+client > > > > <https://cwiki.apache.org/confluence/display/FLINK/FLIP-222:+Support+full+query+lifecycle+statements+in+SQL+client> > > > > > > > > > >>> > > > > >>> [2] > > https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb > > <https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb> > > > < > > > > https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb > > > > <https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb>> < > > > > >> https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb > > > > >> <https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb> < > > > > https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb > > > > <https://lists.apache.org/thread/wr47ng0m2hdybjkrwjlk9ftwg403odqb>>> > > > > >>> > > > > >>> Best, > > > > >>> Paul Lam > > > > > > > > > > > > >