HQL中的子字符串提取

时间:2014-11-12 16:08:17

标签: sql hadoop hive hql

我的Hive DB中有一个URL字段,该字段是字符串类型,具有以下特定模式:

  

/Cats-g294078-o303631-Maine_Coon_and_Tabby.html

我想在字符串末尾附近提取两个Cat“类型”,结果如下:

  

mainecoontabby

基本上,我只想提取 - 作为一个小写字符串 - 猫“类型”,它们总是用'_和_'分隔,前面加' - ',然后是'.html'。

在HQL中有一种简单的方法吗?我知道HQL的功能有限,否则我会使用regexp或substring或类似的东西。

谢谢, 克拉克

2 个答案:

答案 0 :(得分:0)

HQL确实有substr函数,如下所示:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-StringFunctions 它返回一个字符串,从一个值开始直到结束(或特定长度)

我还会使用函数locate来确定网址中“ - ”和“_”的位置。

只要总共有三个破折号和三个下划线,这应该是非常直接的。

否则可能需要case语句来确定破折号和下划线的数量。

答案 1 :(得分:0)

解决方案......

LOWER(REGEXP_REPLACE(SUBSTRING(catString, LOCATE('-', catString, 19)+1), '(_to_)|(\.html)|_', ''))

有趣的是,以下不起作用...... JJFord3,任何想法为什么?

LOWER(REGEXP_EXTRACT(SUBSTRING(FL.url, LOCATE('-', FL.url, 19)+1), '[^(_to_)|(\.html)|_]', 0))
相关问题