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表,包含两个字段:idfull_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函数时,正则表达式的编写是非常重要的。下面介绍一些常用的正则表达式技巧。

  1. 匹配整数:\d+

    这个正则表达式可以匹配一个或多个数字字符。

  2. 匹配浮点数:[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?

    这个正则表达式可以匹配整数、小数和科学计数法表示的浮点数。

  3. 匹配字母和数字:\w+

    这个正则表达式可以匹配一个或多个字母和数字字符。

  4. 匹配非空白字符:\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,并提取出域名部分。