hi flink users
众所周知,sql-client.sh的非交互模式下的-u是不支持ddl的,现在我们是用代码来调用sql-client.sh来做ddl, 这样在交互模式如何去做。 通过hack sql client代码可以实现,但是不改代码的情况下有没有什么最佳实践。谢谢! -- Best Regards, Harold Miao |
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 > |
谢谢 我暂时这样改了一下
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 |
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 > > > |
看下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 >> > >> |
Free forum by Nabble | Edit this page |