解析和校验Flink SQL语句

2023-10-29

Flink对SQL的支持是基于Apache Calcite实现的,且Flink包中集成了Apache Calcite,所以我们可以直接调用Flink包中的SQL解析类,来解析和校验我们的Flink SQL语句。

import org.apache.calcite.avatica.util.Casing;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.parser.SqlParser;
import org.apache.flink.sql.parser.impl.FlinkSqlParserImpl;
import org.apache.flink.sql.parser.validate.FlinkSqlConformance;

/**
 * 解析&校验 Flink SQL语句
 *
 * @param sql 一整段字符串sql
 * @return sql语句list
 */
public static List<String> parseFlinkSql(String sql) {
    List<String> sqlList = new ArrayList<>();
    if (sql != null && !sql.isEmpty()) {
        try {
            SqlParser parser = SqlParser.create(sql, SqlParser.configBuilder()
                    .setParserFactory(FlinkSqlParserImpl.FACTORY)
                    .setQuoting(BACK_TICK)
                    .setUnquotedCasing(Casing.TO_LOWER)   //字段名统一转化为小写
                    .setQuotedCasing(Casing.UNCHANGED)
                    .setConformance(FlinkSqlConformance.DEFAULT)
                    .build()
            );
            List<SqlNode> sqlNodeList = parser.parseStmtList().getList();
            if (sqlNodeList != null && !sqlNodeList.isEmpty()) {
                for (SqlNode sqlNode : sqlNodeList) {
                    sqlList.add(sqlNode.toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    return sqlList;
}

如果只进行Flink SQL的解析和校验,可以引入下面的包

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-sql-parser</artifactId>
    <version>1.12.0</version>
</dependency>
<dependency>
    <groupId>org.apache.calcite</groupId>
    <artifactId>calcite-linq4j</artifactId>
    <version>1.26.0</version>
</dependency>

如果是Flink项目,则flink-table-planner-blink这个包自带SQL解析功能,无需额外引入其他包

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-table-planner-blink_2.11</artifactId>
    <version>1.12.0</version>
</dependency>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析和校验Flink SQL语句 的相关文章

随机推荐

  • C语言文件读入---跳过第一行和最后一行

    include
  • 【FreeRtos学习笔记】STM32 CubeMx——Timers(定时器)

    目录 1 软件定时器 2 示例程序 2 1 例程功能 2 2 步骤 2 3 实验结果 2 4 函数讲解 1 软件定时器 定时器是MCU常用的外设 我们在学习各种单片机时必然会学习它的硬件定时器 但是 MCU自带的硬件定时器资源是有限的 而且
  • Android Fragment 生命周期图

    http www cnblogs com purediy p 3276545 html
  • 开发技术--浅谈python数据类型

    开发 浅谈python数据类型 在回顾Python基础的时候 遇到最大的问题就是内容很多 而我的目的是回顾自己之前学习的内容 进行相应的总结 所以我就不玩基础了 很多在我实际生活中使用的东西 我会在文章中提一下 并且我自己会根据这些内容进行
  • C++从入门到放弃之:Hello.cpp

    C 从入门到放弃 Hello cpp 1 创建c 程序源代码 2 C 程序的编译 3 C 扩展名 4 C 头文件 5 C 输入输出流 Hello cpp 1 创建c 程序源代码 vim hello cpp include
  • Unity3D+EasyAR实现AR效果的案例

    1 下载EasyAR的压缩包以及下面我要用到的霸王龙模型 链接 https pan baidu com s 12q4Jp11BMxnIW1DB48yy0Q 密码 1y3y 2 新建一个Unity3D的项目 然后双击下载好的EasyAR 将其
  • 分支-07. 比较大小(10)

    本题要求将输入的任意3个整数从小到大输出 输入格式 输入在一行中给出3个整数 其间以空格分隔 输出格式 在一行中将3个整数从小到大输出 其间以 gt 相连 输入样例 4 2 8 输出样例 2 gt 4 gt 8 程序 include int
  • 吃透Chisel语言.15.Chisel模块详解(二)——Chisel模块嵌套和ALU实现

    Chisel模块详解 二 Chisel模块嵌套和ALU实现 稍微复杂点的硬件设计就需要用嵌套的模块层级来构建了 上一篇文章中实现的计数器其实就是个例子 计数器内部嵌套了一个寄存器 一个Mux和一个加法器 这一篇文章就仔细讲解模块之间是怎么连
  • 结构体注入VS setter 注入

    结构体注入 setter注入是比较常用的依赖注入方式 都有各自的优缺点 setter注入是Spring推荐的依赖注入方式 首先结构体注入有什么问题 1 不能重新配置和重新注入 在Spring参考文档 中基于结构体注入和setter注入有以下
  • 利用visual studio 2017创建mfc程序,来输出hello world。

    1 点击文件 选择新建 再点击项目 2 选择visual C 选择MFC应用 位置和名称根据需要可适当更改 再点击创建 如果没有MFC应用 需要在工具那里点击获取工具和功能 3 在单个组件里面添加关于MFC的组件 4 进入以下视图 5 点击
  • 深度学习笔记 —— 批量归一化

    梯度在上面 损失处 的时候比较大 越到下面越容易变小 因为很多时候都是n个很小的数相乘 乘到最后梯度就比较小了 所以就导致上面参数更新快 而下面参数更新慢 下面参数在小范围内变化时 抽取的底层特征变化不大 此时上层的参数是针对这些底层特征进
  • pyaudio安装过程中出现Error: failed building wheel for pyaudio(其实正常安装portaudio就能解决)

    pyaudio安装过程中出现Error failed building wheel for pyaudio 问题发生与解决过程 发现问题 安装pyudio 寻找解决问题的方法 定位依赖包 解决问题 安装portaudio19 dev 新问题
  • CGSS2015问卷数据STATA重编码命令(部分)

    今天在写论文时处理的CGSS数据 保存下来以待以后用 选取城市样本 drop if s1 2 选取18 45岁的样本 drop if a301 gt 1997 drop if a301 lt 1970 计算年龄 gen nianling 2
  • Qt Creator下载和安装(详细教程)

    简介 Qt是跨平台的图形开发库 目前由Digia全资子公司 Qt Company 独立运营 官方网址 http www qt io 也可以访问Qt项目域名 http qt project org Qt本身支持众多操作系统 从通用操作系统Li
  • 为什么下载pytorch时,总是下载cpu版本,而不是gpu版本?

    首先 查看一下自己cuda与cudnn版本 创建的虚拟环境python版本 我的python3 10 cuda 11 2 cudnn8 0 因为我们下载都是通过清华源下载的 所以 当清华源里面 没有我们指定python3 10 cuda 1
  • video 标签设置样式

    设置video标签的默认样式 在这里插入图片描述 全屏按钮 video webkit media controls fullscreen button display none 播放按钮 video webkit media control
  • 算法导论

    好像在豆瓣上看到一句话 算法导论之所以经典 是因为它选取的算法每个都是常用的 是精中选精 于是我就有了重读算法导论的冲动 自己非计算机科班出身 所以对于算法这个基础真的比较薄弱 虽然学过算法 但是基础真的太差了 再说学习算法完全是为了锻炼思
  • Java卸载删除(2023最强版)

    Java卸载删除 2023最强版 卸载程序 删除相关环境变量 删除编辑注册表相关 检查C盘相关文件是否删除 收尾 看了网上很多教程 结果还是提示没卸载干净 做了以下整理 希望对大家有所帮助 卸载程序 在应用和功能中 或控制面板的卸载程序中卸
  • Openssl-AES加密

    AES加密算法 此次介绍AES两种加密算法 其他的暂不使用 1 ECB模式 按照块密码的块大小被分为数个块 并对每个块进行独立加密 优点 1 简单 2 有利于并行计算 3 误差不会被传送 缺点 1 不能隐藏明文的模式 2 可能对明文进行主动
  • 解析和校验Flink SQL语句

    Flink对SQL的支持是基于Apache Calcite实现的 且Flink包中集成了Apache Calcite 所以我们可以直接调用Flink包中的SQL解析类 来解析和校验我们的Flink SQL语句 import org apac