regex - 从 HiveQL 中的 url 字段解析和提取字段
问题描述
我有一个表中的数据:
id,uri,date_entered,p_id,ads_id
1,http://vegiefood.com/path1/p.php?keyword=veganway&country=france#Ref1,30/JUN/2016,PVEGIEFOOD,GOOGLEADSENSE
2,http://techteacher.com/path1/p.php?keyword=datascience&country=norway#Ref1,15/JAN/2018,PTECHTEACHER,GOOGLEADSENSE
我想使用以下字段转换或创建一个新的分区表:字段:id、日期、pub_id、advertisingr_id、关键字分区字段:主机、国家
关键字=素食主义者
主机=vegiefood.com
国家=法国
得到一张这样的桌子
+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+
| id | date | pub_id | advertiser_id | keyword | host | country |
+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+
| 1 | 30/JUN/2016 | PVEGIEFOOD | GOOGLEADSENSE | veganway | vegiefood.com | france |
| 2 | 15/JAN/2018 | PTECHTEACHER | GOOGLEADSENSE | datascience | techteacher.com | norway |
+-------------+---------------+-----------------+-----------------------+------------------+------------------+------------------+
我对分区表或从另一个表加载数据没有任何问题,但是我的问题是我没有解析 uri 字段 [ http://vegiefood.com/path1/p.php?keyword=veganway&country =法国#Ref1]。我已经用 [regexp_extract(str, regexp[, idx]) 尝试了这个 - 提取与 regexp 匹配的组]
任何人都可以帮助我或提供一些关于正则表达式或其他函数来解析 uri 的线索吗?
提前致谢。
解决方案
使用内置函数parse_url_tuple
提取所需字段。由于显示的 url 采用非标准格式,您可能需要做额外的工作split
才能获取国家/地区值。否则你可以QUERY:country
在函数中使用。
select t.*,parsed.host,parsed.keyword,split((split(query,';')[1]),'=')[1]
from tbl t
lateral view parse_url_tuple(uri,'HOST','QUERY:keyword','QUERY') parsed as host,keyword,query
推荐阅读
- amazon-web-services - 如何配置 Cloudtrail 以使用外部 IDP 调试 AWS cognito
- azure - 在 Azure 函数 V1 中,如何使用 ConfigurationManager 检索 settings.json 值?
- python - 如何通过 Selenium Python 向搜索字段发送文本
- html - css中样式错误的div
- powershell - 在包含点的标签下编辑 web.config
- java - Android Studio 为 WorkManager 创建 LifecycleOwner 实例
- reactjs - 拖动后如何更改react-dnd中的drop组件?
- flutter - 两个包在颤振中使用两个不同的 compileSdkVersion
- python - matplotlib 中使用函数 z = f(x,y) 绘制曲面图,其中 f 不能用标准函数编写。如何?
- github - 如何在所有组织存储库中使用 GitHub 操作工作流?