spark hive presto doris 对substr函数的差异

Spark、Hive、Presto(现更名为 Trino)和 Doris(原百度 Palo)的 substr 函数在功能上都是用于截取字符串的子串,但在起始索引规则参数含义上存在差异,这是导致结果不同的主要原因。以下是它们的具体区别:

1. Hive

  • 函数名substr 或 substring(两者完全等效)
  • 起始索引:1-based(从 1 开始计数,第一个字符位置为 1)
  • 参数格式
    • substr(str, start_pos):从 start_pos 位置截取到字符串末尾
    • substr(str, start_pos, length):从 start_pos 位置截取长度为 length 的子串
  • 负数索引:表示从字符串末尾开始计算(如 start_pos=-3 表示从倒数第 3 个字符开始)
  • 示例

    sql

    select substr('abcdef', 2, 3);  -- 结果:'bcd'(从第2位开始,取3个字符)
    select substr('abcdef', -3);     -- 结果:'def'(从倒数第3位取到末尾)
    

2. Spark

  • 函数名substr 和 substring 行为不同(注意区分)
    • substr:0-based(从 0 开始计数,第一个字符位置为 0)
    • substring:1-based(为兼容 Hive 设计,与 Hive 行为一致)
  • 参数格式:与 Hive 一致(支持 2 个或 3 个参数)
  • 负数索引:与 Hive 一致(从末尾计数)
  • 示例

    sql

    -- substr(0-based)
    select substr('abcdef', 2, 3);    -- 结果:'cde'(从第2位开始,取3个字符)-- substring(1-based,与 Hive 一致)
    select substring('abcdef', 2, 3); -- 结果:'bcd'(与 Hive 相同)
    

3. Presto(Trino)

  • 函数名substr 或 substring(两者等效)
  • 起始索引:1-based(与 Hive 一致)
  • 参数格式
    • substr(str, start_pos):从 start_pos 截取到末尾
    • substr(str, start_pos, length):从 start_pos 截取长度为 length 的子串
  • 负数索引:与 Hive/Spark 一致(从末尾计数)
  • 特殊点:如果 length 为负数,返回空字符串(部分版本行为)
  • 示例

    sql

    select substr('abcdef', 2, 3);  -- 结果:'bcd'(与 Hive 一致)
    select substr('abcdef', -3);     -- 结果:'def'(与 Hive 一致)
    

4. Doris

  • 函数名substr 或 substring(两者等效)
  • 起始索引:1-based(与 Hive、Presto 一致)
  • 参数格式
    • substr(str, start_pos):从 start_pos 截取到末尾
    • substr(str, start_pos, length):从 start_pos 截取长度为 length 的子串
  • 负数索引:支持(从末尾计数)
  • 特殊点:如果 start_pos 超出字符串长度,返回空字符串
  • 示例

    sql

    select substr('abcdef', 2, 3);  -- 结果:'bcd'(与 Hive、Presto 一致)
    select substr('abcdef', -3);     -- 结果:'def'(与 Hive、Presto 一致)
    

总结:关键差异对比表

系统函数名起始索引与 Hive 兼容性负数索引支持
Hivesubstr/substring1-based原生支持支持
Sparksubstr0-based不兼容支持
Sparksubstring1-based兼容支持
Presto/Trinosubstr/substring1-based兼容支持
Dorissubstr/substring1-based兼容支持

跨系统兼容建议

  1. 若需在多系统中保持一致结果,优先使用 substring 函数(Spark 的 substring 为 1-based,与其他系统一致)。
  2. 明确标注索引基准(1-based 还是 0-based),避免混淆。
  3. 对负数索引和边界情况(如起始位置超出字符串长度)进行单独测试,确保行为符合预期。

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

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

相关文章

开题报告之基于AI Agent智能问答的旅游网站

课题题目: 基于AI Agent智能问答的旅游网站 学生姓名: 学 号: 学 院: 专业年级: 指导教师: 开题报告word版: 开题报告word版 一、课题的研究目的和意义(本…

HTB打靶复个小盘

文章目录jerrySauGoodGamesdevvotexpaper最近打了不少靶场,虽然难度都不算高,但也学到不少东西,中间去打了一周的实网渗透,打完后联系了一家企业准备面试,感觉面试准备的差不多了,回来继续打靶,…

云手机的技术架构可分为哪些

一、基础设施层为其提供计算、存储和网络资源,高性能的服务器 CPU 是关键,它需具备多核多线程处理能力,以同时支持多个云手机实例的运行,比如英特尔至强系列处理器,能够有效处理复杂的运算任务;通过虚拟化技…

[创业之路-585]:初创公司的保密安全与信息公开的效率提升

初创公司处于快速发展与资源有限的双重约束下,平衡保密安全与信息公开效率是生存与发展的关键。保密安全可保护核心资产(如技术、客户数据、商业计划),避免被竞争对手模仿或恶意攻击;而信息公开的效率则直接影响团队协…

如何在Docker容器中为Stimulsoft BI Server配置HTTPS安全访问

在 Stimulsoft BI Server 2025.3.1 版本中,新增了在 Docker 容器中运行 BI Server 的能力。本文将为大家介绍如何在容器环境中为 BI Server 配置 HTTPS 协议的数据传输,从而实现安全、加密的访问。 为什么需要 HTTPS? **HTTPS(S…

PPT中将图片裁剪为爱心等形状

在WPS演示和PowerPoint中,使用裁剪功能,可以将插入的图片裁剪为各种形状,例如心形、五角形、云朵形等等。WPS演示还可以指定裁剪的位置,更加灵活。一、在PowerPoint中裁剪图片为爱心等形状将图片插入到幻灯片后,选中图…

深入理解Docker网络:实现容器间的内部访问

目录一、利用宿主机 IP 外部端口实现容器互访1.思路2.示例操作3.访问测试4.工作原理5.总结二、Docker 容器之间的网络通信(docker0 与自定义桥接网络)1. docker0 简介2. 通过容器 IP 访问3. 自定义桥接网络(推荐方式)创建自定义网…

ESD静电保护二极管焊接时需要区分方向和极性吗?-深圳阿赛姆

ESD静电保护二极管焊接时需要区分方向和极性吗?一、ESD二极管极性概述1.1 单向与双向ESD二极管的基本区别ESD静电保护二极管根据其内部结构和工作原理可分为两种主要类型:单向ESD二极管(Unidirectional):具有明确的阳极…

Qt QML Switch和SwitchDelegate的区别?

在 Qt QML 中,Switch和 SwitchDelegate主要区别体现在定位、使用场景和功能特性上。以下是具体分析:​1. 核心定位​​Switch​:是一个基础的独立交互控件​(继承自 ToggleButton),用于直接提供“开/关”&a…

no module name ‘kaolin‘

如果报错 no module named xxx 一般是没安装这个库,但是各种邪修安装了kaolin之后,还是报错,这个报错的核心信息是: ImportError: .../kaolin/_C.so: undefined symbol: _ZN3c104cuda20CUDACachingAllocator9allocatorE意思是 Ka…

OBS使用教程:OBS歌曲显示插件如何下载?如何安装使用?

OBS使用教程:OBS歌曲显示插件如何下载?如何安装使用? 第一步:下载OBS歌曲显示插件,并完成安装 OBS歌曲显示插件下载地址①: https://d.obscj.com/obs-Setup_BGM.exe OBS歌曲显示插件下载地址②&#xf…

基于 Java EE+MySQL+Dart 实现多平台应用的音乐共享社区

基于多平台应用的音乐共享社区 1 绪论 1.1 课题依据及意义 随着互联网娱乐项目的日益增多,内容也日渐丰富,加之网络便利性的增强,越来越多的用户喜欢在网上听音乐。但是各平台音乐资源残次不齐,也包含了许多假无损音乐&#xf…

贪心算法在物联网能耗优化中的应用

Java中的贪心算法在物联网能耗优化中的应用 贪心算法是一种在每一步选择中都采取当前状态下最优决策的算法策略,它在物联网(IoT)能耗优化问题中有着广泛的应用。下面我将全面详细地讲解如何使用Java实现贪心算法来解决物联网中的能耗优化问题。 一、物联网能耗优化问…

59.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--MinIO对象存储服务

在孢子记账中我们需要存储用户的头像、账单的图片等文件,这些文件的存储我们可以使用MinIO对象存储服务, MinIO提供了高性能、可扩展的对象存储解决方案,能够帮助我们轻松管理这些文件资源。通过MinIO,我们可以将用户上传的图片文…

ESP32三种主流的开发环境

ESP32三种主流的开发环境 1. ESP-IDF (Espressif IoT Development Framework) 这是乐鑫官方提供的专业开发框架,基于FreeRTOS实时操作系统。 特点: 功能最全面,性能最优支持所有ESP32硬件特性使用C/C编程专业级调试工具完整的组件库和API 适合…

HarmonyOS图形处理:Canvas绘制与动画开发实战

本文将全面介绍HarmonyOS 5中Canvas组件的使用方法和动画开发技巧,通过详细的代码示例和最佳实践,帮助您掌握图形绘制和动态效果实现的核心技能。 1. Canvas组件基础与核心API Canvas是HarmonyOS中用于2D图形绘制的重要组件,提供了丰富的绘图…

CCAFusion:用于红外与可见光图像融合的跨模态坐标注意力网络

CCAFusion:用于红外与可见光图像融合的跨模态坐标注意力网络 CCAFusion: Cross-Modal Coordinate Attention Network for Infrared and Visible Image Fusion 摘要 红外与可见光图像融合旨在生成一幅包含全面信息的图像,该图像既能保留丰富的纹理特征&a…

ESP32-P4小智编译历险记:从“编译失败“到“成功烧录“的奇幻之旅,xiaozhi智能聊天机器人编译避坑心得

🚀 ESP32-P4:AI小智编译历险记:从"编译失败"到"成功烧录"的奇幻之旅 要编译其他芯片esp32s3-s2-c3,遇到问题也可以在这里交流 “每一个编译错误都是成长的机会,每一次成功都是坚持的胜利!” —— 某位被编译器折磨的程序员 源码地址:https://githu…

DIFY 项目中通过 Makefile 调用 Dockerfile 并使用 sudo make build-web 命令构建 web 镜像的方法和注意事项

DIFY 项目中通过 Makefile 调用 Dockerfile 并使用 sudo make build-web 命令构建 web 镜像的场景,以下是具体方法和注意事项总结: 一、通过 sudo make build-web 构建 web 镜像的核心方法 1. 理解 Makefile 与 Dockerfile 的关联 Makefile 的作用:DIFY 的 Makefile 中定义…

重学前端015 --- 响应式网页设计 CSS变换

文章目录skew()transformcursortransition.arm .left {} 和 .arm.left {} 区别skew() skew 倾斜变换函数,该函数有两个参数。第一个是剪切x轴的角度,第二个是剪切y轴的角度。 transform: skew(0deg, 44deg);transform .arm.left {top: 35%;left: 5%;t…