使用sql提取唯一值

dgtucam1  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(321)

关闭。这个问题需要更加突出重点。它目前不接受答案。
**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。

一年前关门了。
改进这个问题
我是sql新手,非常感谢您帮助我从配置单元表中提取数据。该表包含两个相关列: host 以及 url . 这个 url 列中有许多重复项和类似的URL重定向到同一页,格式如下:

https://www.cnn.com/2019/09/20/politics/
https://www.cnn.com/2019/09/20/politics
http://www.cnn.com/2019/09/20/politics/
http://www.cnn.com/2019/09/20/politics

主机格式示例:

https://www.cnn.com/
http://www.cnn.com/

我需要一个查询,以提取首选项为唯一的网址 https 版本结束 http 和带有尾随斜杠的url,如果可用,则覆盖不带尾随斜杠的url。因此,对于上面的例子,结果应该是: https://www.cnn.com/2019/09/20/politics/ 一个简单的bash或python脚本对本地文件执行同样的操作也非常有用。

9cbw7uwe

9cbw7uwe1#

Hive解决方案。使用 row_number() 用于删除重复项。看看怎么做 protocol_key 以及 path_key 是计算出来的,它们用于 row_number() partition by 条款:

with your_data as (--use your table instead of this
select stack( 4,
'https://www.cnn.com/2019/09/20/politics/',
'https://www.cnn.com/2019/09/20/politics',
'http://www.cnn.com/2019/09/20/politics/',
'http://www.cnn.com/2019/09/20/politics') as url
) --your table

select url from
(
select s.url, --s.protocol, s.protocol_key, s.host, s.path, s.path_key, --columns for debugging
       row_number() over(partition by s.protocol_key, s.host, s.path_key order by s.protocol desc, s.path desc) rn --https and path with/ are preferred
from       
(--parse url
select t.url, s.protocol, s.host, s.path, regexp_replace(s.path,'/$','') as path_key, regexp_replace(s.protocol,'s$','') as protocol_key
  from your_data t
       lateral view parse_url_tuple(url, 'PROTOCOL','HOST', 'PATH')s as protocol, host, path
)s)s where rn = 1
;

结果:

https://www.cnn.com/2019/09/20/politics/

相关问题