从为 Hive 提交的描述中提取数字

Extracting number from a description filed for Hive

我正在尝试从包含数字和字符的列中提取数字。然而,它们是结构化的,因此我想知道我们是否可以提取数字。不知explode是否有效

当前描述栏:

I need a help in setting up a campaign soon. Revenue: 1000

我尝试做的是为该数字创建一个名为收入的新列。

我当前的命令是:

SELECT description, X.value 
FROM task
lateral view
explode(description) X as value

您可以像这样尝试使用 Split 函数

SELECT
   description,
   split (description, ':\s')[1] as Revenue
FROM task

其中 :\s 是匹配冒号后跟 space 的正则表达式模式。

-------- 编辑: --------
如果数据中有多个 : 那么你可以尝试(不确定它是否会起作用)以下(假设最后一个拆分将 always 包含数字)

SELECT
   description,
   split (description, ':\s')[size(split (description, ':\s')) - 1] as Revenue
FROM task

此外,您尝试使用 Revenue\s:\s 作为模式可能无法正常工作,因为额外的 space 匹配尝试 `Revenue:\s'

----------------------------

或者如果描述并不总是有冒号,您可以使用方法 regexp_extract(string subject, string pattern, int index)

类似于:

SELECT
   description,
   regexp_extract(description, '.*?(\d+)$', 1) as Revenue
FROM task

其中正则表达式模式 .*?(\d+)$ 将匹配描述末尾的多个数字(但前提是它们位于末尾)

使用后一个选项,如果描述并不总是一致,您应该能够找到合适的模式。

您还可以使用以下方法删除任何非数字字符:

select regexp_replace(description, '[^0-9]', '') as Revenue from task

不过,这只适用于 [description] 字段中只有一个数字的情况。如果格式可靠,使用更具体的 RegEx 可能更可取。