从Hive的描述字段中提取数字

时间:2015-04-17 02:53:45

标签: sql database hive hiveql

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

当前说明栏:

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

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

我当前的命令是:

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

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Split这样的功能

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

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

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

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

另外,尝试使用Revenue\\s:\\s作为模式可能无法正常工作,因为额外的空格匹配尝试`收入:\ s'

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

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

类似的东西:

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

正则表达式模式.*?(\\d+)$将匹配描述末尾的多个数字(但仅限于它们在结尾处)

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

答案 1 :(得分:1)

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

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

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