Hive数据清洗中常见的几个函数

这篇具有很好参考价值的文章主要介绍了Hive数据清洗中常见的几个函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在Hive中,数据清洗是一个重要的任务之一,通常涉及到对数据进行过滤、修改和转换等操作,以使其更易于使用和分析。常用的数据清洗技术包括:数据去重、空值填充、数据格式化、数据类型转换、数据分区等。这里简单记录几个常用的数据清洗函数,后期会继续增加。


1.空格处理 trim()

trim() 函数是一种字符串处理函数,用于删除字符串左右两侧的空格它的语法如下:

trim(string1)

其中 string1 是要处理的字符串

例如,下面这个 SELECT 语句会删除字符串 ’ Hello, World! ’ 两侧侧的空格:

SELECT trim('   Hello, World!   ') AS new_string;

查询结果会返回新的字符串 ‘Hello, World!’,两侧的空格已经被删除了。

2.字符串分割 split()

在 Hive 中,split() 函数用于将一个字符串按照给定的分隔符拆分成一个数组或多个字段。它的语法如下:

split(str, pattern)

其中,str 表示要拆分的字符串,pattern 表示分隔符,可以是正则表达式。

例如,下面这个查询会将字符串按照逗号分隔成一个数组:

SELECT split('foo,bar,baz', ',') AS result;

查询结果为 [“foo”,“bar”,“baz”]

如果希望将字符串拆分成多个字段,可以使用 LATERAL VIEWexplode() 函数进行处理:

SELECT 
 	id, value
FROM my_table
LATERAL VIEW explode(split(my_column, ',')) my_table_expanded AS value;

这个查询会将 my_table 表中 my_column 列的值按照逗号分隔成多个值,并将每个值作为一行输出,每一行包含一个 id 和一个 value。

注意:split() 函数在处理中文字符时可能存在问题,因为中文字符在 Hive 内部是以 UTF-8 编码进行处理的。如果需要处理中文字符,请确认数据的编码格式,或者使用其他适合中文字符处理的函数。

3.无用符处理 regexp_replace()

regexp_replace() 函数是一种字符串处理函数,可以替换符合正则表达式的字符串为新的字符串。

在使用 regexp_replace() 函数时,需要指定三个参数:原字符串、正则表达式和替换后的字符串。示例代码如下:

SELECT regexp_replace('I dodged the rain , of the secular world.', '[.]', '!') AS new_name;

这个查询将会把 “I dodged the rain of the secular world.” 中的逗号和句号替换为感叹号,输出结果为 “I dodged the rain ! of the secular world!”。

正则表达式 “[,.]” 匹配逗号和句号,这个正则表达式中的方括号表示一个字符集。它的含义是和方括号里的任意一个字符匹配,也就是说,逗号或者句号都可以被匹配。

另外,还可以使用 regexp_replace() 函数来删除某些字符串。比如下面这个例子,将会删除表 fccont 中的 contno 字段中所有的数字和中划线:

UPDATE fccont SET contno = regexp_replace(contno, '[0-9-]', '');

需要注意的是,使用正则表达式时应该仔细检查,确保不会误匹配或漏匹配字符串,避免产生不必要的错误。

4.字符串拼接

concat()

在Hive中,concat() 是一个字符串函数,用于将两个或多个字符串连接在一起。

函数的语法如下:

concat(string1, string2, ..., stringN)

其中,string1到stringN是要连接的字符串,可以是实际的字符串值或表示列名的变量。

下面是一个使用concat()函数的示例,将first_name和last_name列连接成一个字符串:

SELECT concat('Hello', ' ', 'World!') AS new_name 

结果如下所示:

+---------------+
| new_name      |
+---------------+
| Hello World!  |
+---------------+

concat_ws()

在Hive中,还有一个concat的进阶函数 concat_ws(),用于合并多个列,将它们连接成一个单独的字符串,并使用分隔符将它们分隔开来。

函数的语法如下:

concat_ws(separator, [string1, string2, ..., stringN])

其中,separator是用于连接列的分隔符,可以是任何字符串,如逗号、空格、短划线等。string1到stringN是要连接的字符串,可以是实际的字符串值或表示列名的变量。

下面是一个使用concat_ws()函数的示例,将first_name、last_name和email列连接成一个逗号分隔的字符串:

SELECT concat_ws(',', 'Hello', 'World', '!') AS new_info

这将产生一个结果集,如下所示:

+-------------------+
| new_info          |
+-------------------+
| Hello,World,! 	|
+-------------------+

通过将列连接成一个字符串,可以更轻松地进行数据清理、转换和导出到外部系统等操作。

5.获取json字段里的字符 get_json_object()

**get_json_object()**是一种在JSON格式字符串中获取指定字段值的函数,主要用于处理JSON数据。在Hive和Spark SQL中都支持使用该函数来处理JSON数据。

get_json_object() 的语法通常为:get_json_object(json_string, json_path)
其中:
json_string参数为待解析的JSON格式字符串。
json_path参数为JSON字段的路径。

例子:

SELECT get_json_object('{"name":"我躲过世俗的雨", "age":18, "city":"Hang Zhou"}', '$.name') AS `结果`;

Hive数据清洗中常见的几个函数
在这个例子中,我们获取JSON字符串中名为name的字段值,即返回字符串John。

注意 :如果待解析的JSON格式字符串无法解析,或者指定的JSON路径无效,则会返回NULL值。

6.字符串搜索函数 regexp_extract()

regexp_extract() 是一种在字符串中搜索模式并返回匹配文本的函数。在SQL和多种编程语言中都支持使用正则表达式做字符串匹配。

regexp_extract()的语法通常为:regexp_extract(string, regex_pattern, index)

其中:

  • string 参数为待搜索的字符串。
  • regex_pattern 参数为匹配模式的正则表达式。
  • index 参数表示从模式匹配结果中返回哪个捕获组的结果。捕获组指的是在正则表达式中使用括号的部分。
    如果待搜索的字符串与模式不匹配,或者没有指定的捕获组,regexp_extract()函数则会返回NULL值。

这里先举一个例子:
例如 我想在一堆字符串中(‘参数,WechatEventStateContext(wedd,1234):(mobile=17899998877, userId=null),s13456sssf{}’)找出 17899998877 这一手机号可以这么写:

SELECT regexp_extract('参数,WechatEventStateContext(wedd,1234):(mobile=17899998877, userId=null),s13456sssf{}', '[^0-9](1[0-9]{10})[^0-9]', 1) AS `结果`;

Hive数据清洗中常见的几个函数
这里解释一下正则表达式

[^0-9](1[0-9]{10})[^0-9]

[^0-9]:匹配任何一个非数字字符。
(1[0-9]{10}):匹配以数字1开头,后面跟着10个数字0-9的字符串组合,即一个11位的手机号码。
[^0-9]:匹配一个非数字字符,以确保手机号前后不会有额外的数字字符或汉字等字符混入。

这里提到了正则表达式,也顺便记一下吧,也不用完全背下来,到时候照着码就行。

正则表达式(Regular Expression) 是一种用于描述字符串规律的表达式,它在文本处理、计算机语言分析等领域都有广泛的应用。正则表达式通常由一系列字符及字符组成的模式或表达式组成,用来匹配特定的字符串。

在正则表达式中常用的有以下几种元字符及其含义:

 .  匹配任意单个字符。
 *  匹配前面的零个或多个字符。
 +  匹配前面的至少一个或多个字符。
 ?  匹配前面的零个或一个字符。
 ^  匹配字符串的开头。
 $  匹配字符串的结尾。
 [] 匹配字符集中的任意一个字符。
 [a-z] 匹配小写字母a到z中的任意一个字符。
 [A-Z] 匹配大写字母A到Z中的任意一个字符。
 \d 匹配任何一个数字字符。
 \w 匹配任何一个字母、数字或下划线字符。
 \s 匹配任何一个空格字符。

除了上述常用的元字符之外,正则表达式还支持很多其它的特殊字符和组合方式,用于描述更复杂的字符串规律。在实际应用中,需要结合具体场景和需求,选择合适的正则表达式来实现对字符串的处理和匹配。


以上为本次分享的几个函数,后续会继续增加。文章来源地址https://www.toymoban.com/news/detail-458725.html

到了这里,关于Hive数据清洗中常见的几个函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 背会了常见的几个线程池用法,结果被问翻了

    分享是最有效的学习方式。 这是张小帅失业之后的第三场面试。 面试官:“实际开发中用过多线程吧,那聊聊线程池吧”。 “有CachedThreadPool:可缓存线程池,FixedThreadPool:定长线程池.......balabala”。小帅暗暗窃喜,还好把这几种线程池背下来了,看来这次可以上岸了。 面试官

    2024年02月02日
    浏览(63)
  • Java避免死锁的几个常见方法(有测试代码和分析过程)

    目录 Java避免死锁的几个常见方法 死锁产生的条件 上死锁代码 然后 :jstack 14320 jstack.text Java避免死锁的几个常见方法 Java避免死锁的几个常见方法 避免一个线程同时获取多个锁。 避免一个线程在锁内同时占用多个资源,尽量保证每个锁只占用一个资源。 尝试使用定时锁,使

    2023年04月16日
    浏览(74)
  • 连接贝尔金无线路由器时需要注意的几个常见问题

        一、随着使用无线设备连接无线网的情况越来越多,同时涌现出越来越多的无线网络问题,针对个人设备的网络访问控制、为移动访问建立限制和政策、外界干扰对无线网络的影响、无线网络安全以及移动设备数据监督等。 二、不过好在还可以支持客户部署新的无线网络

    2024年02月05日
    浏览(56)
  • php中常用的几个安全函数

    1. mysql_real_escape_string()        这个函数对于在PHP中防止SQL注入攻击很有帮助,它对特殊的字符,像单引号和双引号,加上了“反斜杠”,确保用户的输入在用它去查询以前已经是安全的了。但你要注意你是在连接着数据库的情况下使用这个函数。        但现在mysql_re

    2024年02月02日
    浏览(51)
  • 最近常用的几个【行操作】的Pandas函数

    最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记。 shift 函数在策略回测代码中经常出现,计算 交易信号 , 持仓信号 以及 资金曲线 时都有涉及。 这个函数的主要作用是将某列的值上下移动。 默认情况下, shift 函数是向

    2024年04月28日
    浏览(29)
  • 关于AMC8模拟考试延长到1月19日14点,以及常见的几个新问题

    相信过去的周末两天,很多参加今年AMC8美国数学思维竞赛活动的孩子们都参加了AMC8模拟考试。昨天有家长问六分成长,周末两天因故没能参加要不要紧?如果还想参加怎么办? 不用担心!官方已经把AMC8模拟考试的时间延长到1月19日(星期五)14点了,也就是正式比赛当天下

    2024年01月19日
    浏览(75)
  • c++ 计算心率数据的几个算法

    其他可参考我写的go语言的算法计算,包含了http服务 go语言计算心率算法 //hrv 5 min RR 间期 平均值标准差 sdann // 24h 正常的RR间期总体标准差 sdnn // 24h 每5分钟时段 标准差的平均值 sdnn index // 两个相邻RR间期 差值的均方根RMSSD // 24h 相邻两个正常RR 间期差值 大于50ms 的个数百分比

    2024年02月16日
    浏览(38)
  • Hive常见的日期函数

    1、fom_unixtime UNIX 时间戳转日期 语法:fom_unixtime(bigint unixtime[, string format]); 返回类型:string 说明:转化 UNIX 时间戳(从1970-01-01 00:00:00 UTC 到指定时间的秒数)到当前时区的时间格式。 例如: select from_unixtime(1590000000, \\\'yyyy-MM-dd\\\'); 返回: 2020-05-21 2、unix_timestamp 获取当前 UNIX 时间

    2024年04月10日
    浏览(65)
  • 基于Hadoop的豆瓣电影的数据抓取、数据清洗、大数据分析(hdfs、flume、hive、mysql等)、大屏可视化

    项目介绍 有需要整个项目的可以私信博主,提供部署和讲解,对相关案例进行分析和深入剖析 环境点击顶部下载 = 本研究旨在利用Python的网络爬虫技术对豆瓣电影网站进行数据抓取,并通过合理的数据分析和清洗,将非结构化的数据转化为结构化的数据,以便于后续的大数

    2024年02月11日
    浏览(46)
  • Hive常见时间日期函数的使用与问题整理

    这里整理一下Hive常见的时间函数和日期函数和用法,作为平时数据处理过程的一个检索和记录。 平时在数据处理过程中,如果不经常使用时间函数,一时间遇到一些时间上的处理,难免会想不起来。 hive本身提供的时间函数已经很丰富了,基本上能满足我们所有的需求,一些

    2024年02月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包