Presto和Spark语法差异

news/2024/4/28 16:37:32/文章来源:https://blog.csdn.net/qq_33588730/article/details/127624190

一、同类实现差异

1、Presto整数相除沿用了Java整数相除的特性,而Spark除法会得到小数。

示例:

select 5/2;

Presto返回2,Spark返回2.5。

2、Presto的substr()函数的子字符串索引从1开始,而spark从0开始。

示例:

select substr('123', 0, 2);

Spark会返回结果12,Presto会返回空,除非写select substr('123', 1, 2);

3、Presto的字符串类型是varchar,而Spark是string。

示例:

select cast (1 as string);

Spark会返回1,而Presto会报错。

4、对于双引号,Spark会当成普通字符串,而Presto会当成列名,要当成普通字符串需要用单引号表示。

示例:

select "col" -- Spark会当作字符串,Presto会当成列名
select 'col' -- 这样Presto才会当成字符串

5、正则表达式转义方式不同。

示例:

select RLIKE( '1 2', '\\S');      -- Spark写法
select regexp_like( '1 2', '\S')  -- Presto写法

6、如果SQL查询的过滤条件中包含tab等制表符特殊字符,Presto和Spark基于的判断方式不一致,因为Presto中小于十六进制的空格符都会过滤掉,而Spark只会判断是否是0x20,所以tab(0x09)等过滤不掉,这样会导致结果可能不一致。

示例:

select * from bili_main.dws_prty_arch_tag_es_a_d where log_date='20220221' and length(trim(tag)) =0;

该查询中tag列中包含特殊空格制表符,如下图所示:

 因此此时Presto能返回一条结果,而Spark不返回结果,如下图所示:

7、Presto在正则表达式中使用单反斜杠'\',而hive和spark使用双反斜杠'\\'。

示例:

select
regexp_extract('http://127.0.0.1:10052/upgcxcode/32/44/546274432/546274432-1-31101.m4s?xyip=127.0.0.1&xyport=10052&xy_usource=aa.com&xy_mark=bb.com&e=cc_dd_&uipk=5&nbs=1&deadline=1647178906&gen=playurlv2&os=rsc&oi=613971396&trid=ee&platform=android&upsig=ff&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&pcdnid=1000007227&mid=240681701&bvc=vod&nettype=1&orderid=0,2&bw=175588&logo=8','(\\-[0-9]+\\-)([0-9]+\\.(flv|m4s|mp4))',2)​

在Presto中,末尾处的正则表达式应该用单反斜杠才有结果,如下所示:

select
regexp_extract('http://127.0.0.1:10052/upgcxcode/32/44/546274432/546274432-1-31101.m4s?xyip=127.0.0.1&xyport=10052&xy_usource=aa.com&xy_mark=bb.com&e=cc_dd_&uipk=5&nbs=1&deadline=1647178906&gen=playurlv2&os=rsc&oi=613971396&trid=ff&platform=android&upsig=gg&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&pcdnid=1000007227&mid=240681701&bvc=vod&nettype=1&orderid=0,2&bw=175588&logo=8','(\-[0-9]+\-)([0-9]+\.(flv|m4s|mp4))',2)​

8、presto获取map格式数据的值时,如果有些行的map数据的指定key值缺失,就会报错"Key not present in map",而spark和hive返回null。

示例:

select m[3] from (select map(ARRAY[1,3], ARRAY[2,4]) as m

解决方法:使用element_at(map(K, V), key)获取值,不要用map[key]写法。参考: Presto与众不同的那些坑_while(True):的博客-CSDN博客_presto unnest写在前面:presto官方文档https://prestodb.io/docs/0.215/functions.html一、时间差presto 时间差:select date_diff('day',cast('2018-09-05' as date),cast('2018-09-07' as date));hive 时间差:select datediff('2018-0...https://blog.csdn.net/qq_37833410/article/details/103270386

9、timestamp类型列写入ORC文件时,presto默认会在stripe footer处同时写入UTC时区标志,而Spark2.3+默认采用native orc writer,会在stripe footer处写入jvm本地时区标志(如东八区),因此使用trino读取spark写入的文件时,trino会识别到stripe footer中的时区标志,进行本地时间偏移转换并展示,可能会和spark读取的utc timestamp列结果不同。

解决方法:(1)在spark-defaults.conf中设置如下参数,并重写orc文件:

spark.sql.hive.convertMetastoreOrc false
spark.sql.orc.impl hive

(2)使用presto sql语句中的at time zone语句查询,此时会将本地时间戳还原成utc时间戳展示:

select a at time zone 'UTC' from test_timestamp;

二、仅Presto支持

1、Presto支持Array index写法,而Spark不支持。

示例:

select array[1,2,3][1]

Presto会返回第一个元素即1,而Spark会报错。

三、仅Spark支持

1、&操作符。

示例:

select 1 & 3;

Spark会返回1,而Presto会报错。

2、rlike关键字。

示例:

select 1 rlike 3;

Spark会返回false,而Presto会报错。

3、int()函数。

示例:

select int(2.1)

Spark会返回2,而Presto会报错未注册。

4、concat_ws()函数,Presto会报错未注册。

5、lateral view关键字。

示例:

SELECT student, score FROM tests LATERAL VIEW explode(scores) t AS score

但Presto可通过如下语法实现类似逻辑:

SELECT student, score
FROM tests
CROSS JOIN UNNEST(scores) AS t (score);

6、cluster by与distribute by关键字。

示例:

SELECT student, score FROM tests distribute by student;
SELECT student, score FROM tests cluster by student;

7、sort by关键字,但Presto支持order by关键字。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用于一般光学系统的光栅元件

摘要 光栅是光学中最常用的衍射元件之一。如今,它们经常被用于复杂的系统中,并与其他元件一起工作。在这种情况下,非常需要将光栅不仅仅是作为孤立的元件来模拟,而是与系统的其余部分结合,以评估整个系统性能。Virt…

并发与多线程(4)单例设计模式共享数据分析 和call_once

一、单例模式 顾名思义就是一个项目中的某个类只有一个对象,不允许在外面new 出第二个对象 #if 1 //单例模式 :class MyClass { private:MyClass(){}static MyClass* m_instance; // public:static MyClass* getInstance(){if (m_instance NULL){m_instance …

推荐一个.Net Core轻量级插件架构

今天给大家推荐一个开源插件架构。在介绍项目之前,我们了解下什么是插件架构,它的用处。 现有的软件开发中,业务越来越复杂,一些大型的项目版本一直在迭代,代码规模越来越大,涉及的人员也越来越多&#xf…

电子江湖里,女攻城狮到底是一种怎样的存在?

关于电子工程师这一角色,女生真的不能胜任么?我觉得不然! 虽然说出身电子信息类的女生并不算多,去到职场中就职且能坚持下去的更是少之又少,毕竟理工科嘛,加上真实存在的行业歧视,想要靠近的女生…

学长教你学C-day5-C语言变量与数据类型

小韩是一个学习比较刻苦认真的学生,虽然老师上课进度刚讲到输入输出,但是小韩已经自学到C语言指针部分的内容了。但是进度太快的弊端就是有些东西很难消化吸收,这不就遇到了问题,来请教小刘:“学长,你说这个…

机器学习——聚类分析

文章目录聚类分析K-means算法K-中心算法DBSCAN算法聚类分析 K-means算法 算法简要步骤 随机选取K个样本点(不一定来自样本数据)作为初始的质心第一次迭代,将所有样本分配到这K个类中 对每个样本计算其到两个聚类中心的欧式距离(…

2022年12个最佳WordPress备份插件比较

您是否正在寻找可靠的WordPress备份插件来定期备份您的网站? 备份就像您网站的安全网。每当您的网站因任何原因崩溃时,您都可以快速恢复您的网站。但是您需要确保您的备份具有最新的更改,否则您可能会丢失重要数据。一个好的备份插件将确保您…

艾美捷藻红蛋白RPE化学性质文献参考

艾美捷藻红蛋白RPE背景: R-藻红蛋白是从海藻(甘紫菜或高氏肠枝藻)分离的藻胆蛋白家族成员。从红藻中分离得到 R- 藻红蛋白(PE)。其主吸收峰位于565nm,次吸收峰位于496nm 和545nm。次级峰的相对显著性在不同种的 R-PE 中差异显著。…

前端开发学习之【Vue】-下

文章目录Vuex1.概述2.使用3.四个 map 方法4.模块化命名空间Vue Router1.SPA2.路由3.基本使用4.多级路由5.路由传参query参数6.命名路由7.路由传参params参数8.路由的props配置9.路由跳转方式10.缓存路由11. activated deactivated生命周期钩子12.路由守卫13.路由器的两种工作模…

极限多标签算法: FastXML 的解析

文章目录前言1.关于极限多标签 (XML: eXtreme multi-label Classification)1.1 流派1.2 评价指标2.FastXML2.1 FastXML的特点2.2 FastXML的局部性2.3 FastXML的拟合目标2.4 通过代码分析FastXML的拟合细节2.4.1 r\mathbf{r}^{}r的优化与拟合2.4.2 δ\deltaδ的优化与拟合 ---- …

知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3

知识图谱-命名实体-关系-免费标注工具-快速打标签-Python3一、功能介绍1、代码文件夹结构2、运行环境3、自定义命名实体、关系模板4、导入文件5、选择自定义实体和关系文件6、文本标注7、撤销和取消标注8、导出和导出并退出系统9、导出文件后解析10、标注规范和KG规范11、系统提…

SQL学习二十、SQL高级特性

约束(constraint) 管理如何插入或处理数据库数据的规则。 DBMS 通过在数据库表上施加约束来实施引用完整性。 大多数约束是在 表定义中定义的,用 CREATE TABLE 或 ALTER TABLE 语句。 1、主键 (PRIMARY KEY) 主键是…

AMCL代码详解(六)amcl中的重采样

1.重采样判断 上一章讲述了amcl中如何根据激光观测更新粒子权重,当粒子更新完后amcl会需要根据程序判断是否需要进行重采样。这个判断在粒子观测更新权重后进行判断,代码在amcl_node.cpp中: if(!(resample_count_ % resample_interval_)){ p…

[GYCTF2020]Easyphp

尝试了一下万能密码不行,又到处翻了一下,扫目录结果又有www.zip 审计代码好久,序列化和sql结合的题还是第一次见,太菜了呀,花了很久时间才理解这个题 首先看到update.php,这个文件是最亮眼的,…

javascript 原生类 DOMParser 把 字符串格式的HTML文档源码 转换成 document DOM对象

文章目录IntroQADOMParser 在 console 的使用cheerio 在 node 项目中的使用Reference测试sumIntro 有一天我在写爬虫。 其实也说不上是爬虫,就是打开浏览器上网,觉得页面有些数据挺有意思,就打开开发者工具,在 Network/Console 中…

01.初识C语言1

一、前期准备 1.gitee网址(代码托管网站):工作台 - Gitee.com Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com) 用法: 1)新建仓库 2)随意勾选 3)网络仓库构建完成 2.所学知识:计算…

【期末大作业】基于HTML+CSS+JavaScript网上订餐系统(23个页面)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Jetson Orin 平台单进程采集四路独立video调试记录

1. 概述 现在有4个摄像头, 如何捕获4个摄像头(/dev/video0 - video3)在一个进程像这样: 现在只能捕捉一个相机使用gst-launch如下: gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1280,height=720 ! videoconvert ! video/x-raw,format=I420 ! xvimagesi…

《设计模式:可复用面向对象软件的基础》——行为模式(2)(笔记)

文章目录五、行为模式5.5 MEDIATOR(中介者)1.意图补充部分2.动机3.适用性4.结构5.参与者6.协作7.效果8.实现9.代码示例10.相关模式5.6 MEMENTO ( 备忘录)1.意图2.别名3.动机4.适用性5.结构6.参与者7.协作8.效果9.实现10.代码示例11.相关模式5.7 OBSERVER (观察者)1.意图2.别名3…

21.C++11

C11的官网:C11 - cppreference.com 1.C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于TC1主要是对C98标准中的漏洞进行修复,语言的核心部分则没有改动&am…