【大数据】Presto(Trino)REST API 与执行计划介绍

news2024/9/29 13:24:06

文章目录

    • 一、概述
    • 二、环境准备
    • 三、常用 REST API
      • 1)worker 节点优雅退出
      • 2)提交SQL查询请求
      • 3)获取查询状态
      • 4)获取查询结果
      • 5)取消查询请求
      • 6)获取Presto 节点信息
      • 7)获取Presto服务器使用统计信息
      • 8)获取查询计划
    • 四、Presto(Trino)执行计划

一、概述

Presto(现在叫Trino)是一个分布式SQL查询引擎,它允许用户在多个数据源上执行查询。Presto本身是一个独立的Java程序,可以通过REST API与其他应用程序进行通信。

Presto的REST API是一组HTTP接口,可以用于与Presto服务器进行通信,并提交查询请求、获取查询结果等。以下是Presto REST API的一些常见用途:

  • 执行SQL查询:使用REST API,可以提交SQL查询请求,并从Presto服务器获取查询结果。

  • 获取查询进度:使用REST API,可以获取当前查询的进度和状态,例如查询已经执行的百分比、预计完成时间等。

  • 查询元数据:使用REST API,可以获取Presto服务器上的表和列的元数据信息,例如表的名称、列的数据类型等。

  • 管理Presto集群:使用REST API,可以管理Presto集群中的节点,例如添加或删除节点,重新启动节点等。

  • 获取集群状态:使用REST API,可以获取Presto集群的状态、版本号等信息。

Presto REST API使用JSON格式进行数据交互,并提供了许多API端点以满足不同的需求。除此之外,Presto REST API还提供了一些安全控制和权限管理功能,例如对访问API的用户进行身份验证、控制用户的操作权限等。

总之,Presto REST API提供了一种简单、快速、可靠地与Presto进行通信的方式,为Presto的用户提供了更多自由、灵活的操作空间。

在这里插入图片描述

二、环境准备

如已经有环境了,可以忽略,如想快熟部署Presto(Trino)环境可参考我这篇文章:【大数据】通过 docker-compose 快速部署 Presto(Trino)保姆级教程

docker exec -it trino-coordinator bash

# --catalog:数据源 --schema:数据库
${TRINO_HOME}/bin/trino-cli --server http://trino-coordinator:8080 --user=hadoop

三、常用 REST API

以下是一些常见的Presto REST API端点和用途:

  • /v1/catalog:从Presto服务器获取所有数据源的元数据信息,例如数据源名称、表名、列名、数据类型等。

  • /v1/query:提交一个SQL查询请求,Presto服务器会立即返回一个查询ID,并在后台执行查询。使用这个ID,可以获取查询的状态和结果。

  • /v1/query/{queryId}/status:获取查询的状态信息,例如查询是否已经完成、已经执行的百分比等。

  • /v1/query/{queryId}/results:获取查询的结果,以JSON格式返回。这个端点可以多次调用,以获取查询的不同结果部分。

  • /v1/query/{queryId}/cancel:取消正在执行的查询请求。

  • /v1/cluster:获取Presto集群的所有节点信息,包括节点IP地址、端口号、工作状态等。

  • /v1/info:获取Presto服务器的版本号、构建时间、运行时信息等。

  • /v1/stats:获取Presto服务器的使用统计信息,例如查询执行次数、查询响应时间、查询失败次数等。

通过使用这些REST API端点,可以方便地与Presto服务器进行交互,并对Presto进行控制和管理。同时,Presto REST API还提供了若干参数选项和高级功能,可以让用户对Presto服务器的行为进行更加精细的控制和优化。

1)worker 节点优雅退出

官方文档:https://trino.io/docs/current/admin/graceful-shutdown.html

Trino 有一个优雅的关闭 API,可以专门用于 以确保它们在不影响正在运行的查询的情况下终止,给定 足够的宽限期。

# 睡眠 shutdown.grace-period,默认为 2 分钟。如有任务直到所有活动任务完成。
# 关闭应用程序。
curl -v -X PUT -d '"SHUTTING_DOWN"' -H "Content-type: application/json" \
    http://worker:8080/v1/info/state

# 示例:
curl -v -X PUT -d '"SHUTTING_DOWN"' -H "Content-type: application/json" \
    http://docker-compose-presto-trino-worker-2:8080/v1/info/state

2)提交SQL查询请求

curl --request POST \
--url http://presto-server:8080/v1/query \
--header 'content-type: application/json' \
--data '{
    "query": "SELECT COUNT(*) FROM schema.table",
    "timezone": "Asia/Shanghai"
}'

此命令向Presto服务器提交一个SQL查询请求,查询的SQL语句是"SELECT COUNT(*) FROM schema.table",时区设置为"Asia/Shanghai"。执行成功后,Presto服务器会立即返回一个查询ID

3)获取查询状态

curl http://presto-server:8080/v1/query/query-id/status

这个命令使用查询ID查询查询的状态信息,"query-id"是需要替换为具体的查询ID。

4)获取查询结果

curl http://presto-server:8080/v1/query/query-id/results/1

这个命令使用查询ID获取查询结果,"1"表示结果是从第一条开始获取的。执行成功后,Presto服务器会以JSON格式返回查询结果。

5)取消查询请求

curl --request DELETE http://presto-server:8080/v1/query/query-id

这个命令会取消查询ID对应的查询请求,并且终止查询执行。

6)获取Presto 节点信息

curl http://presto-server:8080/v1/node

为检索集群中可用Trino节点的列表提供支持。

7)获取Presto服务器使用统计信息

curl http://presto-server:8080/v1/status

这个命令返回Presto服务器的使用统计信息,例如查询执行次数、查询响应时间、查询失败次数等。

8)获取查询计划

curl http://presto-server:8080/v1/query/query-id/plan

这个命令返回查询ID对应的查询计划,包括查询计划中使用的数据源、过滤器、连接方式等信息。

这里只是列举出部分的api,想了解更多,可参阅官方文档。

四、Presto(Trino)执行计划

Presto(Trino)执行计划的生成基于Presto(Trino)的分布式查询引擎。Presto(Trino)将一个查询分解成多个任务,并在多个节点上并行执行这些任务。执行计划记录每个任务的执行方式,以及每个任务中使用的算子和资源。

以下是Presto(Trino)执行计划的基本生成原理:

  1. 解析:Presto(Trino)将查询语句解析成一棵语法树。这个语法树包含了查询的各个组成部分,如选择器、联结条件、过滤条件等等。

  2. 逻辑优化:Presto(Trino)对语法树进行逻辑优化。例如,它可以通过重组联结条件来改善查询性能,或者消除不必要的过滤器。

  3. 物理优化:Presto(Trino)将逻辑计划转换为物理计划。这个过程中,Presto(Trino)选择合适的算子和连接方式,以在整个集群中共享计算负载。

  4. 任务划分:Presto(Trino)将物理计划分解成多个小任务,并在节点上并行执行这些任务。每个任务都包含一个或多个算子,并指定使用哪些资源和节点。

  5. **执行计划:**Presto(Trino)生成执行计划,描述所有任务的执行方式以及每个任务中使用的算子和资源。这个执行计划可以在查询期间进行动态更新,并且会根据查询的进度和节点负载进行调整。

在这里插入图片描述
总之,Presto(Trino)执行计划的生成基于一系列逻辑和物理优化,以及任务分解和分布式执行等技术。通过使用执行计划,您可以更好地了解查询的执行方式和性能瓶颈,从而对查询进行优化。


Presto(Trino)REST API 与执行计划介绍就先到这里了,有任何疑问欢迎私信或留言,也可关注我【大数据与云原生技术分享】加群或私信咨询问题~

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

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

相关文章

功率放大器电路中的三极管和MOS管,究竟有什么区别?

学习模拟电子技术基础,和电子技术相关领域的朋友,在学习构建功率放大器电路时最常见的电子元器件就是三极管和场效应管(MOS管)了。那么三极管和MOS管有哪些联系和区别呢?在构建功率放大器电路时我们要怎么选择呢&#…

干货 | 利用SPSS进行高级统计分析第一期

Hello,大家好! 这里是壹脑云科研圈,我是喵君姐姐~ 你是否还在为分析实验数据而感到头疼?你是否还在苦于自己不知道如何选择合适的模型来分析数据? 本期我们就来为大家带来了利用SPSS软件进行高级统计分析…

【学习日记】在不可联网电脑上安装Python和深度学习环境

测试环境 Hyer-V上开了个虚拟机,win7-64位企业版,全新未安装任何环境的最基本的操作系统。 因为不联网安装,而且是win7这种古老的操作系统,确实会遇到很多问题。做个记录。 安装Python 打开python-3.7.8.exe 安装程序 此时可能…

离岗识别 yolov5模型

离岗识别通过yolov5网络模型技术,离岗识别可以自动识别现场画面中人员离岗脱岗睡岗等行为,发现违规行为立即抓拍告警。YOLOv5在YOLOv4算法的基础上做了进一步的改进,检测性能得到进一步的提升。虽然YOLOv5算法并没有与YOLOv4算法进行性能比较…

Unity3d 开发Pico4程序闪退弹窗【版权保护】检测的解决方法

前言 最近在进行基于Pico4的应用开发,然后在部分设备上程序是无法正常进入的,而且总是弹出这个版权保护的窗口: 按理说正常的自己开发的测试的程序不应该有这种限制,查询后发现是 PICO 内置了版权保护机制。应用上架后&#xff0…

研发工程师玩转Kubernetes——通过文件创建Service

在《研发工程师玩转Kubernetes——部署应用》一文中,我们使用kubectl expose创建了一个Service,暴露了一个Pod上的nginx服务。这篇文章我们将使用文件的形式创建Service。 为了增加有趣性,我们采用《研发工程师玩转Kubernetes——构建、推送自…

与众不同的夜间开关交互效果

这个夜间模式切换开关效果是不是很炫酷,在短视频曾刷到过是一个国外的设计师看似是为了难为我们前端开发设计了一个元素超多且动画复杂的开关切换效果。 结果在逛 codepen 的时候发现真的被一个大佬给做出来了,效果真的很不错,而且还在原来的…

矩池云教程|体验 OpenAI 最近推出的 3D 生成模型 Shap-E!

Shap-E 是由 OpenAI 最近推出的3D生成模型,使用者可以通过简单的文字或图像进行三维模型的生成,OpenAI 认为相比于点云的生成模型Point-E,Shap-E的收敛更快。本文将展示如何在矩池云上体验3D模型生成。 Shap-E:https://github.co…

自动生成测试用例_接口测试用例自动生成工具

前言 写用例之前,我们应该熟悉API的详细信息。建议使用抓包工具Charles或AnyProxy进行抓包。 har2case 我们先来了解一下另一个项目har2case 他的工作原理就是将当前主流的抓包工具和浏览器都支持将抓取得到的数据包导出为标准通用的 HAR 格式(HTTP A…

软件测试需要学会写代码吗?

无论是刚入测试行业的萌新,还是已经在测试行业闯荡了两三年的小司机们,都会琢磨一个问题:如果要持续发展下去,我要不要懂代码? 在软件测试初级阶段,不需要编程能力。但是任何一个职业,都会追求…

【网络协议详解】——IPv6协议(学习笔记)

📖 前言:IPv6 协议是未来互联网的发展方向,它的推出为网络通信和互联带来了更大的便利性和更广阔的发展空间。相比于 IPv4,IPv6 支持更多的地址空间、更高效的路由和唯一的全球性地址等特点,可以更好地满足未来数字化时…

Mac电脑 Vscode : Flutter 开发环境搭建(最细节教程)

参考链接: MacVSCode安装flutter环境_mac vscode配置flutter_GalenWu的博客-CSDN博客 mac搭建Flutter环境以及初始化项目 - 简书 注意: *下载xcode 就包含git了, *苹果芯片和intel 芯片需要的环境不同,苹果芯片需要安装: Im…

攻防世界web新手区部分题解

前言:博主是个安全小白,正在努力学习中,会随着学习进度不定期更新完善本篇博客。 这里是目录 1.robots2.view_source3.backup4.disabled_button5.get_post6.cookie7.ics-068.PHP2 1.robots 题目描述: X老师上课讲了Robots协议,小宁…

SpringBoot+Redis完成数据缓存(内容丰富度一定超出你的想象)

SpringBootRedis完成数据缓存 去年今日此门中 人面桃花相映红 人面不知何处去 桃花依旧笑春风 感谢相遇!感谢自己,努力的样子很给力! 为了更多朋友看见,还是和大家说一声抱歉,限制为粉丝可见!有问题可以随时…

基于SSM+JSP的大学生社团管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

数字信号处理基础(二):FFT和IFFT的使用以及详细分析代码书写思路

目录 1. fft和ifft的原理1.1 fft1.2 ifft 2. 书写代码思路3. 完整代码4. 结果图 1. fft和ifft的原理 1.1 fft fft是快速傅里叶变换,是MATLAB中计算信号频谱的函数,使用方法是fft(x),直接对信号x进行fft计算。 由于fft函数计算信号的频谱是0…

国考省考行测:资料分析,两年复合增长率

国考省考行测:资料分析,两年复合增长率 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测,所以大家认真准备吧,我讲一起屡屡…

考研算法第十三天:二叉排序树 【二叉排序树的插入和遍历】

这道题很妙。题目给的二叉排序树好像没学过其实就是二叉查找树。然后这道题主要的就是思路 1.节点的初始化(记住) struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; 2.节点的插入 …

HTTPS 的加密流程

文章目录 前言一.HTTPS 是什么二."加密" 是什么四.HTTPS解决了哪些问题五.HTTPS 的工作过程对称加密非对称加密引入证书 前言 本文介绍了HTTPS的加密流程,以及HTTPS在保护用户数据安全和确保通信机密性方面的重要性。通过详细解释HTTPS的工作原理和加密流…