在 Hive 中单独缩短 URL

Individually shorten URLs in Hive

我有 URL 个结构如下:

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

我现在要做的是缩短 URLs 以便能够对相似的 URL 模式进行分组和计数。例如,我想删除 https://、语言环境 en_US/ 和标记 ?tic=1-dj33jl-dj33jl,同时保留其余部分。结果应如下所示:

pinball.globalzone.com/home&goToRegisterNow=true

我试图通过使用 regexp_extract 来实现这一点,但这种方法只能让我提取始终位于同一位置的特定片段。

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

此外,我的结果集还将包含具有不同模式的 URLs,其中我只想剪切现有部分(例如 https://pinball.globalzone.com/en_US/forgottenPassword,其中只有 en_US/ 必须被剪掉了)。

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

怎么样

(?: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