Hive regexp_extract截取字段中的数值
在Hive中,我们经常需要从字符串字段中截取出特定的数值。这时,可以使用regexp_extract
函数来实现。regexp_extract
函数是Hive中的一个内置函数,它可以根据正则表达式从字符串中提取出匹配的子串。
regexp_extract
函数的基本用法
regexp_extract
函数的基本用法如下:
regexp_extract(string, pattern, index)
string
:要匹配的字符串字段。pattern
:正则表达式,用于匹配字符串中的子串。index
:指定要提取的子串在匹配结果中的位置,从1开始计数。
下面我们通过一个实例来演示regexp_extract
函数的用法。
假设我们有一个Hive表users
,其中有一个字段full_name
存储了用户的完整姓名。我们想要从full_name
字段中提取出用户的姓氏。
首先,我们创建一个名为users
的Hive表,包含两个字段:id
和full_name
。
CREATE TABLE users (
id INT,
full_name STRING
);
然后,我们向users
表中插入一些示例数据。
INSERT INTO users VALUES
(1, 'John Doe'),
(2, 'Jane Smith'),
(3, 'Mike Johnson');
现在,我们可以使用regexp_extract
函数来提取用户的姓氏。
SELECT full_name, regexp_extract(full_name, '^(\\w+)', 1) AS last_name
FROM users;
执行以上查询语句后,将得到以下结果:
full_name | last_name |
---|---|
John Doe | John |
Jane Smith | Jane |
Mike Johnson | Mike |
可以看到,regexp_extract
函数成功地从full_name
字段中提取出了用户的姓氏。正则表达式'^(\\w+)'
用于匹配字符串中的第一个单词。
正则表达式的使用技巧
在使用regexp_extract
函数时,正则表达式的编写是非常重要的。下面介绍一些常用的正则表达式技巧。
-
匹配整数:
\d+
这个正则表达式可以匹配一个或多个数字字符。
-
匹配浮点数:
[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?
这个正则表达式可以匹配整数、小数和科学计数法表示的浮点数。
-
匹配字母和数字:
\w+
这个正则表达式可以匹配一个或多个字母和数字字符。
-
匹配非空白字符:
\S+
这个正则表达式可以匹配一个或多个非空白字符。
示例:提取URL中的域名
假设我们有一个Hive表websites
,其中有一个字段url
存储了网站的URL。我们想要从url
字段中提取出网站的域名。
首先,我们创建一个名为websites
的Hive表,包含一个字段url
。
CREATE TABLE websites (
url STRING
);
然后,我们向websites
表中插入一些示例数据。
INSERT INTO websites VALUES
('
('
('
现在,我们可以使用regexp_extract
函数来提取网站的域名。
SELECT url, regexp_extract(url, '(https?://)([^/]+)', 2) AS domain
FROM websites;
执行以上查询语句后,将得到以下结果:
url | domain |
---|---|
www.example | |
www.google | |
www.github |
可以看到,regexp_extract
函数成功地从url
字段中提取出了网站的域名。正则表达式(https?://)([^/]+)
用于匹配以http://
或https://
开头的URL,并提取出域名部分。