我的Hive DB中有一个URL字段,该字段是字符串类型,具有以下特定模式:
/Cats-g294078-o303631-Maine_Coon_and_Tabby.html
我想在字符串末尾附近提取两个Cat“类型”,结果如下:
mainecoontabby
基本上,我只想提取 - 作为一个小写字符串 - 猫“类型”,它们总是用'_和_'分隔,前面加' - ',然后是'.html'。
在HQL中有一种简单的方法吗?我知道HQL的功能有限,否则我会使用regexp或substring或类似的东西。
谢谢, 克拉克
答案 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))