[sql-client] 如何绕过交互式模式去做ddl

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

[sql-client] 如何绕过交互式模式去做ddl

Harold.Miao
hi flink users

众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl,
这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢!


--

Best Regards,
Harold Miao
Reply | Threaded
Open this post in threaded view
|

Re: [sql-client] 如何绕过交互式模式去做ddl

Jark
Administrator
Hi,

你想要的是类似于 sql-client.sh -u 的功能,直接通过命令行去执行 ddl 是么?非常抱歉,目前这是不支持的。
社区的e2e测试目前也是通过 Java 代码来调用 sql-client.sh 来实现执行 ddl 的。
不过社区是有计划支持 sql-client.sh 执行一个 sql 文件的,可以关注下FLINK-12828.

Best,
Jark

On Thu, 16 Jul 2020 at 19:43, Harold.Miao <[hidden email]> wrote:

> hi flink users
>
> 众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl,
> 这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢!
>
>
> --
>
> Best Regards,
> Harold Miao
>
Reply | Threaded
Open this post in threaded view
|

Re: [sql-client] 如何绕过交互式模式去做ddl

Harold.Miao
谢谢  我暂时这样改了一下

public boolean submitUpdate(String statement) {
   terminal.writer().println(CliStrings.messageInfo(CliStrings.MESSAGE_WILL_EXECUTE).toAnsi());
   terminal.writer().println(new AttributedString(statement).toString());
   terminal.flush();

   final Optional<SqlCommandCall> parsedStatement = parseCommand(statement);
   // only support INSERT INTO/OVERWRITE
   return parsedStatement.map(cmdCall -> {
      switch (cmdCall.command) {
         case INSERT_INTO:
         case INSERT_OVERWRITE:
            return callInsert(cmdCall);




*         case CREATE_TABLE:            callDdl(cmdCall.operands[0],
CliStrings.MESSAGE_TABLE_CREATED);            return true;*
default:
            printError(CliStrings.MESSAGE_UNSUPPORTED_SQL);
            return false;
      }
   }).orElse(false);
}


Jark Wu <[hidden email]> 于2020年7月21日周二 下午6:41写道:

> Hi,
>
> 你想要的是类似于 sql-client.sh -u 的功能,直接通过命令行去执行 ddl 是么?非常抱歉,目前这是不支持的。
> 社区的e2e测试目前也是通过 Java 代码来调用 sql-client.sh 来实现执行 ddl 的。
> 不过社区是有计划支持 sql-client.sh 执行一个 sql 文件的,可以关注下FLINK-12828.
>
> Best,
> Jark
>
> On Thu, 16 Jul 2020 at 19:43, Harold.Miao <[hidden email]> wrote:
>
> > hi flink users
> >
> > 众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl,
> > 这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢!
> >
> >
> > --
> >
> > Best Regards,
> > Harold Miao
> >
>


--

Best Regards,
Harold Miao
Reply | Threaded
Open this post in threaded view
|

Re: [sql-client] 如何绕过交互式模式去做ddl

godfrey he
In reply to this post by Jark
sql-client.sh的-u是指update语句,目前只支持insert。

Jark Wu <[hidden email]> 于2020年7月21日周二 下午6:47写道:

> Hi,
>
> 你想要的是类似于 sql-client.sh -u 的功能,直接通过命令行去执行 ddl 是么?非常抱歉,目前这是不支持的。
> 社区的e2e测试目前也是通过 Java 代码来调用 sql-client.sh 来实现执行 ddl 的。
> 不过社区是有计划支持 sql-client.sh 执行一个 sql 文件的,可以关注下FLINK-12828.
>
> Best,
> Jark
>
> On Thu, 16 Jul 2020 at 19:43, Harold.Miao <[hidden email]> wrote:
>
> > hi flink users
> >
> > 众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl,
> > 这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢!
> >
> >
> > --
> >
> > Best Regards,
> > Harold Miao
> >
>
Reply | Threaded
Open this post in threaded view
|

Re:Re: [sql-client] 如何绕过交互式模式去做ddl

zhanglianzhg
看下CliClient.java源码 open接口,
final Optional<SqlCommandCall> cmdCall = parseCommand(line);
cmdCall.ifPresent(this::callCommand);
可以看出解析字符串后执行响应命令。
目前我们这边一个项目也在做相似的,可以界面写好slq,以分号作为分隔符表示ddl或则DMl作为分隔符。
然后以文件方式保存(可以作为日志等用作)。
然后自己实现一个excutor类包装了tableEnvironment,主要功能用作string命令解析以及命令执行,可以简单的把flink的解析以及
callCommand拿过来,然后加以改造,内部支持ddl、dml、函数注册等。

这样不管做什么table操作,创建表或者注册函数、执行操作命令一个接口搞定。
其主要改动是:扩展callCommand以及SqlCommandCall
















在 2020-07-21 20:35:01,"godfrey he" <[hidden email]> 写道:

>sql-client.sh的-u是指update语句,目前只支持insert。
>
>Jark Wu <[hidden email]> 于2020年7月21日周二 下午6:47写道:
>
>> Hi,
>>
>> 你想要的是类似于 sql-client.sh -u 的功能,直接通过命令行去执行 ddl 是么?非常抱歉,目前这是不支持的。
>> 社区的e2e测试目前也是通过 Java 代码来调用 sql-client.sh 来实现执行 ddl 的。
>> 不过社区是有计划支持 sql-client.sh 执行一个 sql 文件的,可以关注下FLINK-12828.
>>
>> Best,
>> Jark
>>
>> On Thu, 16 Jul 2020 at 19:43, Harold.Miao <[hidden email]> wrote:
>>
>> > hi flink users
>> >
>> > 众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl,
>> > 这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢!
>> >
>> >
>> > --
>> >
>> > Best Regards,
>> > Harold Miao
>> >
>>