从为 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 可能更可取。
我正在尝试从包含数字和字符的列中提取数字。然而,它们是结构化的,因此我想知道我们是否可以提取数字。不知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 可能更可取。