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开始