千家信息网

怎么用flink 1.11使sql客户端支持执行sql文件

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"怎么用flink 1.11使sql客户端支持执行sql文件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用flink 1.11
千家信息网最后更新 2026年11月03日怎么用flink 1.11使sql客户端支持执行sql文件

这篇文章主要讲解了"怎么用flink 1.11使sql客户端支持执行sql文件",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用flink 1.11使sql客户端支持执行sql文件"吧!

背景

目前flink的sql客户端提供了一种交互式的sql查询服务,用户可以使用sql客户端执行一些sql的批任务或者流任务。但是当我想执行一些sql的定时任务时,flink却没有提供一个合适的方式,所以综合考虑了一下,我决定在sql的客户端基础上给加一个 '-filename (-f)' 参数,就像类似'hive -f abc.sql' 一样,可以执行一批sql任务。

源码修改

目前我只是想通过sql客户端执行一些批任务,再加上flink sql 客户端本身的一些设计,所以目前修改后的sql client 执行sql文件的时候支持 SET,DDL,INSERT INTO SELECT ...等语句,其他比如select暂不支持。

修改后执行的方式为:

/home/flink/bin/sql-client.sh embedded -f flink.sql

CliOptionsParser.java

在这个sql 客户端参数解析类里添加一个选项,用于解析-f参数。

 public static final Option OPTION_FILENAME = Option
.builder("f")
.required(false)
.longOpt("filename")
.numberOfArgs(1)
.argName("the path of the sql file")
.desc("SQL from files")
.build();

CliOptions.java

在这里添加一个变量filename

private final String filename;

SqlClient.java

在SqlClient里添加对于-filename的处理

  if (options.getUpdateStatement() != null){
// execute update statement
final boolean success = cli.submitUpdate(options.getUpdateStatement());
if (!success) {
throw new SqlClientException("Could not submit given SQL update statement to cluster.");
}
} else if (options.getFilename() != null){
final boolean success = cli.executeFile(options.getFilename());
if (!success) {
throw new SqlClientException("Could not submit given SQL file to cluster.");
}
} else {
cli.open();
}

SqlClient#executeFile

添加具体的执行sql文件的方法,sql文件里的所有sql以分号切分,然后分别判断是什么类型,调用不同的方法来执行。

 public boolean executeFile(String filename){
File file = new File(filename);
if (!file.exists()){
printError("the file do not exist");
return false;
} else {
String statement = null;
try {
statement = FileUtils.readFileToString(file);
} catch (IOException e){
printError("read the sql file error , " + e.getMessage());
return false;
}
String[] sqls = statement.split(";");
for (String sql : sqls){
if (sql == null || "".equals(sql.trim())){
continue;
}
final Optional parsedStatement = parseCommand(sql);
if (parsedStatement.isPresent()){
SqlCommandCall cmdCall = parsedStatement.get();
switch (cmdCall.command) {
case SET:
callSet(cmdCall);
break;
................
case INSERT_INTO:
case INSERT_OVERWRITE:
callInsert(cmdCall);
break;
case CREATE_TABLE:
callDdl(cmdCall.operands[0], CliStrings.MESSAGE_TABLE_CREATED);
break;
.....................
throw new SqlClientException("Unsupported command: " + cmdCall.command);
}
}

}
}
return true;
}

感谢各位的阅读,以上就是"怎么用flink 1.11使sql客户端支持执行sql文件"的内容了,经过本文的学习后,相信大家对怎么用flink 1.11使sql客户端支持执行sql文件这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

客户 客户端 文件 支持 任务 参数 学习 内容 方式 方法 不同 合适 交互式 分号 变量 只是 基础 就是 思路 情况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融监管科技数据 涨乐互联网科技 关于新基建和互联网科技 互联网的科技创新 广州宏创互联网科技 世界互联网领先科技成果 老年人脱离互联网科技的作文 中国的互联网科技企业的崛起 银川新华互联网科技职业技术培训学校图片 互联网为啥属于高科技 花神(南京)互联网科技有限公司 青岛科技大学互联网大赛研究生 链环科技传统企业怎么转型互联网 青海科技产业互联网发展 恒生互联网科技业指数调整周期 互联网科技创新创业项目 优雇互联网科技有限公司 知域互联网科技有限公司官网 每日互联网科技新闻 颐高云石互联网科技 科技互联网项目 互联网科技未来 互联网科技媒体 迪茉互联网科技 鑫亿盛互联网科技 互联网科技宣传片 中国科技互联网公司收入 金融科技与互联网金融相同和不同 互联网科技如何创业 卓翼科技产业互联网合作
0