hive regexp\u extract返回空结果

llew8vvj  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(536)

我试图从下面的示例数据中提取r7080075和x1234567。格式始终是一个大写字符,后跟7位数字。此id前面还始终带有下划线。因为它是用户生成的数据,所以有时它是记录中的第一个下划线,有时前面的所有空格都被下划线替换。
我在select语句中查询hdp配置单元:

REGEXP_EXTRACT(column_name,'[(?:(^_A-Z))](\d{7})',0)

我尝试过寻址位置0-2,但没有一个返回错误或任何数据。我在regextester.com上测试了代码,它突出显示了我要提取的数据。当我在zepplin中运行它时,它返回null。
我的regex经验是有限的,所以我在这里回顾了regexp\u extract(+hive)的文章,并与一位同事进行了交谈。事先谢谢你的帮助。
样本数据:

Sept Wk 5 Sunny Sailing_R7080075_12345
Holiday_Wk2_Smiles_X1234567_ABC
nue99wik

nue99wik1#

Hive手册上说:
请注意,在使用预定义字符类时需要注意:使用'\s'作为第二个参数将匹配字母s;'\s'是匹配空格等所必需的。
此外,表达式在character类中还包含不必要的字符。
试试这个:

REGEXP_EXTRACT(column_name,'_[A-Z](\\d{7})',0)

由于只需要不带下划线的部分,请使用以下命令:

REGEXP_EXTRACT(column_name,'_([A-Z]\\d{7})',1)

它匹配整个模式,但只提取第二组而不是整个匹配。
或者:

REGEXP_EXTRACT(column_name,'(?<=_)[A-Z]\\d{7}', 0)

这使用了一种称为“正向lookback”的regexp技术。它的意思是:“给我找一个大写字母表,后跟7位数字,但前提是它们前面有一个∗”。它使用u进行匹配,但不认为它是提取的匹配的一部分。

相关问题