使用正则表达式和Impala SQL在最后一个\\之后选择字符串

时间:2018-12-03 18:19:49

标签: sql regex impala

我有一个数据集,其中包含带有进程和路径的列。我正在尝试将正则表达式与Impala一起使用以剥离可执行文件。数据集如下所示:

C:\\Windows\\System32\\svchost.exe
C:\\Windows\\System32\\conhost.exe
C:\\Windows\\System32\\net1.exe
C:\\Windows\\System32\\schtasks.exe
C:\\Program Files (x86)\\Citrix\\ICA Client\\SelfServicePlugin\\SelfService.exe
C:\\Windows\\System32\\backgroundTaskHost.exe
C:\\Windows\\System32\\net.exe
C:\\Windows\\System32\\conhost.exe
C:\\Program Files (x86)\\Wireless AutoSwitch\\wrlssw.exe

所需的输出:

svchost.exe
conhost.exe
net1.exe
schtasks.exe
SelfService.exe
backgroundTaskHost.exe
net.exe
conhost.exe
wrlssw.exe

我尝试了很多类似以下两个查询的查询,但是一直遇到错误

select regexp_extract(w.destinationprocessname, '([^\\]+)$')
from winworkstations_realtime w
where w.externalid = '4688'
limit 10

错误:

AnalysisException: No matching function with signature: regexp_replace(STRING, STRING).

select regexp_extract(w.destinationprocessname, '\\(?:.(?!\\))+$',0)
from winworkstations_realtime w
where w.externalid = '4688'
limit 10

错误:

Could not compile regexp pattern: \(?:.(?!\))+$ Error: invalid perl operator: (?!

正在寻找对impala或regex有用的任何人的指导。

1 个答案:

答案 0 :(得分:1)

不是正则表达式专家,我敢肯定有更好的方法,但这可以完成工作

select regexp_replace(regexp_extract("C:\\\Windows\\\\System32\\\\svchost.exe", ".+(\\\\.+)$", 1), "\\\\", "");