首页 > 解决方案 > 从 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 的线索吗?

提前致谢。

标签: regexhivehiveqlpartitioning

解决方案


使用内置函数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

推荐阅读