flink sql gateway初探

news2024/9/22 23:24:35

文章目录

  • 前言
  • 1.启动SQL gateway
  • 2.打开session
  • 3.执行flink SQL
  • 4.查看执行结果
  • 5.获取operationHandle的status
  • 6.注意事项
  • 7.官方链接


前言

flink 1.16版本中发布了一个新功能–SQL gateway,本篇文章就来实践测试下该功能。


1.启动SQL gateway

./bin/sql-gateway.sh start -Dsql-gateway.endpoint.rest.address=localhost

2.打开session

curl --request POST http://localhost:8083/v1/sessions
{"sessionHandle":"94588a47-3509-42b7-98f9-0ff89cc6dbd5"}
//Trigger heartbeat to tell the server that the client is active, and to keep the session alive as long as configured timeout value.
curl --request POST http://localhost:8083/v1/sessions/${sessionHandle}/heartbeat

3.执行flink SQL

curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data '{"statement": "SET execution.checkpointing.interval = 3s"}'
{"operationHandle":"24ae4332-1f9c-4bd7-9684-b9150dae4108"}

curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data "{\"statement\": \"CREATE TABLE products (id INT,name STRING,description STRING,PRIMARY KEY (id) NOT ENFORCED) WITH ( 'connector'='mysql-cdc','hostname'='localhost','port'='3306','username'='root','password'='123456','database-name'='mydb','table-name'='products' ,'server-time-zone' = 'Asia/Shanghai')\"}"
{"operationHandle":"63fa431d-632e-4b52-82fd-666d575c26b1"}

curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data "{\"statement\": \"CREATE TABLE orders (order_id INT,order_date TIMESTAMP(0),customer_name STRING,price DECIMAL(10, 5),product_id INT,order_status BOOLEAN,PRIMARY KEY (order_id) NOT ENFORCED) WITH ('connector' = 'mysql-cdc','hostname' = 'localhost','port' = '3306','username' = 'root','password' = '123456', 'database-name' = 'mydb','table-name' = 'orders','server-time-zone' = 'Asia/Shanghai')\"}"
{"operationHandle":"b32dd3c3-2c28-442a-8f96-ea5a160f2144"}%  

curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data "{\"statement\": \"CREATE TABLE shipments (shipment_id INT,order_id INT,origin STRING,destination STRING,is_arrived BOOLEAN,PRIMARY KEY (shipment_id) NOT ENFORCED) WITH ('connector' = 'postgres-cdc','hostname' = 'localhost','port' = '5432','username' = 'postgres','password' = 'postgres','database-name' = 'postgres','schema-name' = 'public','table-name' = 'shipments')\"}"
{"operationHandle":"c0802732-04ea-424a-a154-43e6ff69f00f"}%  

 curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data "{\"statement\": \"CREATE TABLE enriched_orders (order_id INT,order_date TIMESTAMP(0),customer_name STRING,price DECIMAL(10, 5),product_id INT,order_status BOOLEAN,product_name STRING,product_description STRING,shipment_id INT,origin STRING,destination STRING,is_arrived BOOLEAN,PRIMARY KEY (order_id) NOT ENFORCED) WITH ('connector' = 'elasticsearch-7','hosts' = 'http://localhost:9200','index' = 'enriched_orders' )\"}"                                                                                     
{"operationHandle":"299a1096-710f-4c6b-a3da-3d9f2beed178"}%  

 curl --request POST http://localhost:8083/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/statements/ --data "{\"statement\": \"INSERT INTO enriched_orders SELECT o.*, p.name, p.description, s.shipment_id, s.origin, s.destination, s.is_arrived FROM orders AS o LEFT JOIN products AS p ON o.product_id = p.id LEFT JOIN shipments AS s ON o.order_id = s.order_id\"}"
{"operationHandle":"398cf8c4-87df-4306-963e-3b54e7779af7"}%  

4.查看执行结果

curl --request GET http://localhost:8083/v1/sessions/${sessionHandle}/operations/${operationHandle}/result/0

5.获取operationHandle的status

curl --request GET http://localhost:8083/v1/sessions/${sessionHandle}/operations/${operationHandle}/status
{"status":"FINISHED"}

6.注意事项

  • SQL语句只能单句执行,复杂SQL按照以下修改:
curl --request POST http://localhost:8083/v1/sessions/${sessionHandle}/statements/ --data "{\"statement\": \"XXXXXX\"}"
  • 在根据operationHandle获取其执行结果时需要注意:返回的结果中nextResultUri如果不为空,可以继续获取,具体如下:
//第一次获取执行结果
{
    "results": {
        "columns": [
            {
                "name": "result",
                "logicalType": {
                    "type": "VARCHAR",
                    "nullable": true,
                    "length": 2147483647
                },
                "comment": null
            }
        ],
        "data": [
            {
                "kind": "INSERT",
                "fields": [
                    "OK"
                ]
            }
        ]
    },
    "resultType": "PAYLOAD",
    "nextResultUri": "/v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/operations/ba3c15b0-3ed4-4505-9d32-74942536b557/result/1"
}
//nextResultUri不为空再次获取的结果
//curl --request GET http://localhost:8083//v1/sessions/046f8ffc-1ec6-4126-ab4a-667c9725554f/operations/ba3c15b0-3ed4-4505-9d32-74942536b557/result/1
{
    "results": {
        "columns": [
            {
                "name": "result",
                "logicalType": {
                    "type": "VARCHAR",
                    "nullable": true,
                    "length": 2147483647
                },
                "comment": null
            }
        ],
        "data": []
    },
    "resultType": "EOS",
    "nextResultUri": null
}
  • SQL gateway在启动是可以修改以下配置
    在这里插入图片描述
  • 配置中最重要的就是session时间设置,如果使用curl则需要将时间设置长一些,session的默认时间是1分钟
  • 通过接口查看SQL执行结果时,如果返回结果包含错误信息,那么返回的结果是没有经过格式化的报错,看起来费劲,此时可以直接查看SQL gateway的日志
  • 1.16版本中在执行flink sql时只能单句执行
  • 使用curl命令传参数时需要注意单、双引号问题

7.官方链接

flink confluence
flink官方文档
flink cdc链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

让企业报表化繁为简,Smartbi实现报表统一管理

报表作为大家日常工作的关键和必不可少的内容,往往需要定期进行维护和更新。处在工作的不同时间、不同岗位、不同职责,要做的报表也各不相同。随着时间的推移,手上的报表也会越来越多,而这还只是从个人的角度出发来理解&#xff0…

[附源码]Python计算机毕业设计Django学生在线考试系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

java计算机毕业设计ssm洗浴管理系统l9omz(附源码、数据库)

java计算机毕业设计ssm洗浴管理系统l9omz(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

脉冲波形的产生和整形

一个周期性的脉冲信号,我们希望可以提供0和1的电平值 边沿的好坏,跳转时间长,效果就不好,特性就不好,所以描述周期性的脉冲信号的时候,有相应的参数,高低电平我们一般画成等宽的,尽…

深度学习入门篇 | 常用的经典神经网络模型

**神经网络,是模拟生物神经网络进行信息处理的一种数学模型。**它以对大脑的生理研究成果为基础,其目的在于模拟大脑的某些机理与机制,实现一些特定的功能。神经网络是目前最火的研究方向深度学习的基础,本文将神经网络分成三个主…

【Java面试】谈一谈你对ThreadLocal的理解

文章目录ThreadLocal原理大致设计底层理解【Java面试】说说你对ThreadLocal内存泄漏问题的理解hash冲突的解决get/set/remove方法的一些细节在多线程情况下,对于一个共享变量或者资源对象进行读或者写操作时,就必须考虑线程安全问题。而ThreadLocal采用的…

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三)

Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(三) 本篇目录: 六、完整构建整个[旋转的精灵女孩]实例 (1)、新建、启动webGL工程空间 (2)、构建项目的目录层次结构 (2.1…

EVE-NG安装问题记录 重置root密码

目录EVE-NG安装问题记录 重置root密码一、下载iso安装虚拟机二、碰巧没安装成功EVE-NG组件,开启EVE-NG机后 root/eve默认密码不对。进不去系统。1、进入单用户模式重置root密码三、重新安装eve-ng组件EVE-NG安装问题记录 重置root密码 一、下载iso安装虚拟机 从官…

ssm+mysql实现进销存系统|仓库计算机专业毕业论文java毕业设计开题报告

💖💖更多项目资源,最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 《ssmmysql实现进销存系统》该项目采用技术:jsp springmvcspringmybatis cssjs等相关技术,项目含有源码、文档、配套开发软…

嵌入式软件开发知识点总结(二)中断Linux内核

【好文推荐】 路由选择协议——RIP协议 轻松学会linux下查看内存频率,内核函数,cpu频率 纯干货,linux内存管理——内存管理架构(建议收藏) 概述Linux内核驱动之GPIO子系统API接口 一篇长文叙述Linux内核虚拟地址空间的基本概括 中断 硬中断 …

应用开发这样做更节约成本!

现在app已逐渐取代网页端,成为一众手机用户的心头好。要想轻松拿下更多目标用户,开发一个属于自己的app显得尤为重要。那么,在应用开发方面,我们有什么妙招可以降低开发成本呢? 1、明确开发需求 做好我们的app定位&am…

【NumPy 数组索引、裁切,数据类型】

🤵‍♂️ 个人主页老虎也淘气 个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏…

6年测开经验,从功能测试到测试开发,我的每一步都经过了深思熟虑...

蓦然回首,软件测试风风雨雨的这几年,起初每天的工作只是鼠标点点点,我还真不知道怎么办,闲的时候真的怀疑自己的存在价值,每天拿着7000的工资,飘荡在繁华的深圳,吃不饱也饿不死,未来…

阿里 p8 私藏 MyBatis 笔记,从入门到精通,纵享源码细节

前言 越来越多的企业已经将 MyBatis 使用到了正式的生产环境,我认为流行的原因就在于绝大部分项目都是面向表结构编程的,把 Java 对象仅当成数据容器,查询和模型变更都设计在一张表上,所谓业务逻辑就是一堆增删改查的 sql 集合&a…

Cadence Allegro PCB设计88问解析(二十一) 之 Allegro中更新器件封装(Footprint)

一个学习信号完整性仿真的layout工程师 今天和大家简单介绍Allegro中如何更新PCB封装,在我们导入原理图网表,PCB的封装是必不可少的,但是可能有些为了前期布局评审,有的封装是临时的,那么就需要后续更新正确的封装。下…

02 Java起步

目录 第一章:注释 1.1 概述 1.2 Java 中的注释 第二章:关键字 2.1 概述 2.2 Java 中的关键字 第三章:标识符 3.1 概述 3.2 标识符的命名规则(必须遵守) 3.3 标识符的命名规范 第四章:数据类型以…

第十四届蓝桥杯集训——JavaC组首篇——环境搭建(win10)

还有9天就截止报名了,我们也算正式开始培训了,今年希望能取得更好的成绩。 今年的蓝桥杯从环境开始——本博客为win10电脑的Java_JDK环境搭建: 学生机环境-Java编程环境(第十四届大赛) 链接: https://pan.baidu.com…

软件测试行业真的饱和了吗?一线大厂年薪100W的测开岗位还很缺人!

在一线大厂,没有测试这个岗位,只有测开这个岗位。这几年,各互联网大厂技术高速更新迭代,软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰,各种新的测试技术层出不穷,测试人员的薪资也水涨船高。与…

【Docker】基础

文章目录Docker什么是Docker虚拟机和容器Docker 底层原理Docker 优点关键技术Docker 推荐视频课程配套食用:https://www.bilibili.com/video/BV1gr4y1U7CY/?vd_source6d95a05fa9867baaa8ea7c5c52faf4e6 什么是Docker Docker,容器虚拟化技术&#xff…

从浪潮登顶NuScenes榜首解读自动驾驶AI感知技术的发展

导读: “自动驾驶是集感知、决策、交互于一体的技术 环境感知能力作为自动驾驶的第一个环节,是车辆与环境交互的纽带 通过“摄像头、毫米波雷达、超声波雷达、激光雷达”等各类传感器设备,感知环境的手段日趋多元化 同时,在平…