解析和校验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语句 的相关文章

  • 【大数据】Flink 详解(六):源码篇 Ⅰ

    本系列包含 大数据 Flink 详解 一 基础篇 大数据 Flink 详解 二 核心篇 大数据 Flink 详解 三 核心篇 大数据 Flink 详解 四 核心篇 大数据 Flink 详解 五 核心篇 大数据 Flink 详解 六 源码篇
  • 作为一个编程新手,我再也不怕Flink迷了我的眼!

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由kyledong 发表于云 社区专栏 使用 Flink 编写处理逻辑时 新手总是容易被林林总总的概念所混淆 为什么 Flink 有那么多的类型声明方式 BasicTypeInf
  • 车联网项目学习笔记

    学习目标 了解车联网大数据行业 了解车联网项目系统架构 理解车联网数据量计算方法 掌握json数据解析 掌握复杂json解析方法 能掌握的技能 1 车联网领域大数据系统设计与开发 2 车联网业务类型与指标设计 3 实时数据ETL开发 4 实
  • 大数据技术Flink详解

    一 有状态的流式处理 Apache Flink 是一个分布式流处理器 具有直观和富有表现力的API 可实现有状态的流处理应用程序 它以容错的方式有效地大规模运行这些应用程序 Flink 于2014 年4 月加入Apache 软件基金会作为孵
  • Apache Flink不止于计算,数仓架构或兴起新一轮变革

    2021 年初 在 InfoQ 编辑部策划的全年技术趋势展望中 我们提到大数据领域将加速拥抱 融合 或 一体化 演进的新方向 本质是为了降低大数据分析的技术复杂度和成本 同时满足对性能和易用性的更高要求 如今 我们看到流行的流处理引擎 Ap
  • 【Flink】Flink 消费kafka报错 AMRMClientAsyncImpl Interrupted while waiting for queue InterruptedException

    1 背景 一个flink etl程序 读取一个kafka集群的数据 到两外一个集群 然后报错 2020 06 06 15 56 00 PM Thread flink akka actor default dispatcher 20 Clas
  • Flink Web UI 介绍

    一 提交flink任务到yarn flink run m yarn cluster yn 1 p 2 yjm 1024 ytm 1024 ynm FlinkOnYarnSession MemberLogInfoProducer d c co
  • flink源码阅读---Flink intervalJoin 使用和原理分析

    1 前言 Flink中基于DataStream的join 只能实现在同一个窗口的两个数据流进行join 但是在实际中常常会存在数据乱序或者延时的情况 导致两个流的数据进度不一致 就会出现数据跨窗口的情况 那么数据就无法在同一个窗口内join
  • Flink-cdc 同步mysql数据

    下载地址 https github com ververica flink cdc connectors releases 这里下载2 2 0版本 https github com ververica flink cdc connector
  • 浅谈Hadoop体系和MPP体系

    浅谈Hadoop体系和MPP体系 引言 如题 在大数据发展至今 为了应对日益繁多的数据分析处理 和解决客户各种奇思妙 怪 想需求 形形色色的大数据处理的框架和对应的数据存储手段层出不穷 有老当益壮的Hadoop体系 依靠Hadoop巨大的社
  • Flink State 和 Fault Tolerance详解

    有状态操作或者操作算子在处理DataStream的元素或者事件的时候需要存储计算的中间状态 这就使得状态在整个Flink的精细化计算中有着非常重要的地位 记录数据从某一个过去时间点到当前时间的状态信息 以每分钟 小时 天汇总事件时 状态将保
  • Flink checkPoint和SavePoint

    savepoint和checkpoint都是flink为容错提供的强大功能特性 能够自动或手动保存job的运行状态 两者区别 checkpoint 应用定时触发 用户保存状态 会过期 内部应用失败重启的时候启用 但是手动cancel时 会删
  • Flink设置Source数据源使用kafka获取数据

    流处理说明 有边界的流bounded stream 批数据 无边界的流unbounded stream 真正的流数据 Source 基于集合 package com pzb source import org apache flink ap
  • flink 1.4版本flink table方式消费kafka写入hive方式踩坑

    最近在搞flink 搞了一个当前比较新的版本试了一下 当时运行了很长时间 hdfs里面查询有文件 但是hive里面查询这个表为空 后面用了很多种方式 一些是说自己去刷新hive表 如下 第一种方式刷新 alter table t kafka
  • flink学习44:基于行的操作分组和窗口的聚合

  • Flink on Zeppelin-2

    Flink Interpreter类型 首先介绍下Zeppelin中的Flink Interpreter类型 Zeppelin的Flink Interpreter支持Flink的所有API DataSet DataStream Table
  • flink大数据处理流式计算详解

    flink大数据处理 文章目录 flink大数据处理 二 WebUI可视化界面 测试用 三 Flink部署 3 1 JobManager 3 2 TaskManager 3 3 并行度的调整配置 3 4 区分 TaskSolt和parall
  • 流计算框架 Flink 与 Storm 的性能对比

    概述 将分布式实时计算框架 Flink 与 Storm 进行性能对比 为实时计算平台和业务提供数据参考 一 背景 Apache Flink 和 Apache Storm 是当前业界广泛使用的两个分布式实时计算框架 其中 Apache Sto
  • flink-addSource和addSink分别是kafka、自定义数据、mysql、hbase的java实现

    flink主程序 public class FinkTest public static void main String args throws Exception StreamExecutionEnvironment env Strea
  • Flink_05_状态(个人总结)

    声明 1 本文为我的个人复习总结 并非那种从零基础开始普及知识 内容详细全面 言辞官方的文章 2 由于是个人总结 所以用最精简的话语来写文章 3 若有错误不当之处 请指出 状态 状态就是一块内存 一个变量 如果要访问历史窗口 或批次 的数据

随机推荐

  • 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