单独缩短Hive

时间:2016-09-16 12:29:05

标签: regex hive hiveql

我有以下结构的网址:

https://pinball.globalzone.com/en_US/home?tic=1-dj33jl-dj33jl&goToRegisterNow=true

我现在要做的是缩短网址,以便能够对类似的网址格式进行分组和计数。例如,我想在保留其余内容的同时剪切https://,区域设置en_US/和令牌?tic=1-dj33jl-dj33jl。结果应如下所示:

pinball.globalzone.com/home&goToRegisterNow=true

我试图通过使用regexp_extract来实现这一点,但这种方法只能让我提取总是在同一位置的特定部分。

更大的问题是我要删除的部分是基于个人/规则的(即,语言环境总是包含两个小写字母和两个用下划线分隔的大写字母)或唯一没有保证长度的部分(即令牌)。

此外,我的结果集还将包含具有不同模式的URL,其中我只想剪切现有部分(例如https://pinball.globalzone.com/en_US/forgottenPassword,其中只需要剪切en_US/

如果我必须快速解决问题,我只需要获取URL并编写一些Java或R代码,将获取的URL分成几部分并遍历数组,同时删除我不需要的所有部分。但是,我想知道是否有一种更优雅的方法可以直接从Hive获得这个结果。

1 个答案:

答案 0 :(得分:1)

怎么样?
(?:https?:\/\/|\/[a-z]{2}_[A-Z]{2}|[?&]tic=[^&?]*)

它与您描述为不需要的部分相匹配。用空字符串替换它应该会留下你想要的东西。

See it here at regex101

修改

已更新以检查tic=。应该让它更稳定。

我不知道这是不是你想要的,但是这个允许tic=成为任何参数,而不仅仅是第一个参数:

(?:https?:\/\/|\/[a-z]{2}_[A-Z]{2}|[?&]tic=[^&?\n]*)

Here at regex101