当前位置: 首页 > news >正文

hive和presto的求数组长度函数区别及注意事项

1、任务

获取邮箱字符串’@'后字符串 ,求长度

2、hive & spark-sql 求数组长度的函数 size


hive & spark-sql 求数组长度的函数 size


select size(split(email, '@')),split(email, '@'),split(email, '@')[0],split(email, '@')[1]
FROM 
(select "jack@126.com" as email union select "tom@126.com.cn" as email) tb_mid;

select size(split(email, '@')),split(email, '@'),split(email, '@')[0],split(email, '@')[1]
FROM 
(select 'jack@126.com' as email union select 'tom@126.com.cn' as email) tb_mid;


2	["tom","126.com.cn"]	tom	126.com.cn
2	["jack","126.com"]	jack	126.com
Time taken: 0.723 seconds, Fetched 2 row(s)

3、presto  求数组长度的函数 cardinality

presto  求数组长度的函数 cardinality

select cardinality(split(email, '@')),split(email, '@'),split(email, '@')[1],split(email, '@')[2]
FROM 
(select 'jack@126.com' as email union select 'tom@126.com.cn' as email) tb_mid;

_col0 |       _col1       | _col2 |   _col3    
-------+-------------------+-------+------------
     2 | [tom, 126.com.cn] | tom   | 126.com.cn 
     2 | [jack, 126.com]   | jack  | 126.com    
(2 rows)


select cardinality(split(email, '@')),split(email, '@'),split(email, '@')[1],split(email, '@')[2]
FROM 
(select "jack@126.com" as email union select "tom@126.com.cn" as email) tb_mid;


Query 20231019_070945_20009_n9u2s failed: line 3:9: Column 'jack@126.com' cannot be resolved
select cardinality(split(email, '@')),split(email, '@'),split(email, '@')[1],split(email, '@')[2]
FROM
(select "jack@126.com" as email union select "tom@126.com.cn" as email) tb_mid

4、注意事项

1)、在计算数组长度的时候,hive和presto的函数不同
  其中hive的size函数默认数组的下标从0开始
  presto的cardinality函数默认数组的下标从1开始

2)、presto 不支持双引号 ,而hive 既支持单引号,也支持双引号

presto> SELECT 
     -> email,
     -> (case when cardinality(split(email, '@')) = 2 then split(email, '@')[1] else '' end ) as email_suffix
     -> FROM 
     -> (select "jack@126.com" as email union select "tom@126.com.cn" as email) tb_mid;
Query 20231016_070153_17958_p9f2s failed: line 5:9: Column 'jack@126.com' cannot be resolved
SELECT
email,
(case when cardinality(split(email, '@')) = 2 then split(email, '@')[1] else '' end ) as email_suffix
FROM
(select "jack@126.com" as email union select "tom@126.com.cn" as email) tb_mid

相关文章:

  • 作业来了~~~
  • Linux的权限管理操作
  • RabbitMQ中的核心概念和交换机类型
  • Windows 的 PowerShell 提供了哪些命令
  • ios safari 正则兼容问题
  • vim常用命令
  • k8s 实战 常见异常事件 event 及解决方案分享
  • 059:mapboxGL监听键盘事件,通过eastTo控制左右旋转
  • 解决方法:从客户端(---<A href=“http://l...“)中检测到有潜在危险的 Request.Form 值。
  • 前端--性能优化【上篇】--网络优化与页面渲染优化
  • Android之播放本地视频和Url视频方法
  • Kotlin中的选择结构语句
  • BC v1.2充电规范
  • 缩短cin时间
  • 【Linux】进程概念与进程状态
  • C进阶-语言文件操作
  • 购药不烦恼:线上购药小程序的快捷方式
  • uniapp(uncloud) 使用生态开发接口详情2(使用 schema创建数据, schema2code创建页面, iconfont 引入项目)
  • 百度OCR识别图片文本字符串——物联网上位机软件
  • Hadoop3教程(十六):MapReduce中的OutputFormat
  • 湖北鄂州通报4所小学学生呕吐腹泻:供餐企业负责人被采取强制措施
  • 民营经济促进法出台,自今年5月20日起施行
  • 释新闻|西葡大停电为何规模大、恢复慢?可再生能源是罪魁祸首?
  • 买新房可申领学位,广州南沙出台购房入学政策
  • “五一”假期倒计时,节前错峰出游机票降价四成
  • 四川省社科联期刊:不建议在读硕士、博士将导师挂名为第一作者