从 HiveQL 中的 url 字段解析和提取字段
Posted
技术标签:
【中文标题】从 HiveQL 中的 url 字段解析和提取字段【英文标题】:Parse and extract fields from an url field in HiveQL 【发布时间】:2020-04-10 11:30:14 【问题描述】:我有一个表格中的这些数据:
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、关键字 分区字段:主机、国家
关键字=素食方式
host=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=france#Ref1]。 我已经用 [regexp_extract(str, regexp[, idx]) 尝试了这个 - 提取与 regexp 匹配的组]
谁能帮助我或提供一些关于正则表达式或其他函数来解析 uri 的线索?
提前致谢。
【问题讨论】:
【参考方案1】:使用内置函数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
【讨论】:
太好了,它对我有用,只是做了一些小改动SELECT t.*,parsed.host,parsed.keyword, SPLIT(SPLIT((SPLIT(url,'\\;')[1]),'=')[1],'\\#')[0] AS country FROM ads_web_stage t LATERAL VIEW parse_url_tuple(url,'HOST','QUERY:keyword') parsed AS host,keyword;
以上是关于从 HiveQL 中的 url 字段解析和提取字段的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Hiveql 中的 select over 语句中仅提取最近一周?
使用 awk 或 perl 从 CSV 中提取特定列(解析)