在 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=[^&?]*)
它与您描述为不需要的部分相符。用空字符串替换它应该会留下你想要的东西。
编辑
已更新以检查 tic=
。应该让它更稳定。
而且我不知道这是不是你想要的,但是这个允许 tic=
是任何参数,而不仅仅是第一个:
(?:https?:\/\/|\/[a-z]{2}_[A-Z]{2}|[?&]tic=[^&?\n]*)
我有 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=[^&?]*)
它与您描述为不需要的部分相符。用空字符串替换它应该会留下你想要的东西。
编辑
已更新以检查 tic=
。应该让它更稳定。
而且我不知道这是不是你想要的,但是这个允许 tic=
是任何参数,而不仅仅是第一个:
(?:https?:\/\/|\/[a-z]{2}_[A-Z]{2}|[?&]tic=[^&?\n]*)