presto中split函数报错Array subscript out of bounds(下标越界)

1、数据示例:

id cat_info

1 服饰/上衣/衬衫

2 服饰/其他

2、实现

select split('服饰/其他', '/')[3] as three_cat

报错:Array subscript out of bounds

正确用法:

select if(size(split(cat_info, '/'))>=3,split(cat_info, '/')[2] ,'') as three_cat

3、详细说明

3.1 hive用法

复制代码
SELECT 
    id,
    cat_info,
    split(cat_info, '/')[0] one_cat,
    split(cat_info, '/')[1] two_cat,
    if(size(split(cat_info, '/'))>=3,split(cat_info, '/')[2] ,'')three_cat

3.2 presto用法

复制代码
SELECT 
    id,
    cat_info,
    split(cat_info, '/')[1] one_cat,
    split(cat_info, '/')[2] two_cat,
    if(cardinality(split(cat_info, '/'))>=3,split(cat_info, '/')[3] ,'')three_cat

3.3 比较

计算数组长度的时候,hive和presto的函数不同

hive的size函数默认数组的下标从0开始

presto的cardinality函数默认数组的下标从1开始

相关推荐
百川11 小时前
sqli-labs靶场Less24
sql·web安全
wuxuanok13 小时前
SQL理解——INNER JOIN
数据库·sql
天翼云开发者社区13 小时前
sql优化谓词下推在join场景中的应用
sql·关系数据库
染落林间色15 小时前
达梦数据库权限体系详解:系统权限与对象权限
数据库·后端·sql
Lx35216 小时前
子查询扁平化技巧:减少嵌套层级的查询重构
sql·mysql
Catfood_Eason18 小时前
MyBatis与Spring的整合
sql·spring·mybatis
青年夏日科技工作者19 小时前
从 MySQL 迁移到 TiDB:使用 SQL-Replay 工具进行真实线上流量回放测试 SOP
sql·mysql·tidb
麦兜*19 小时前
【HTTP】防XSS+SQL注入:自定义HttpMessageConverter过滤链深度解决方案
java·网络·spring boot·sql·spring·http·xss
瀚高PG实验室20 小时前
HighgoDB查询慢SQL和阻塞SQL
数据库·sql·瀚高数据库
帧栈1 天前
开发避坑短篇(12):达梦数据库TIMESTAMP字段日期区间查询实现方案
数据库·sql·oracle