使用 SQL 从 url 中剥离域名

Posted

技术标签:

【中文标题】使用 SQL 从 url 中剥离域名【英文标题】:Stripping the domain name from a url using SQL 【发布时间】:2018-10-03 14:56:44 【问题描述】:

我正在使用 Big Query 的 Hacker News 数据集,并且正在查看哪些 url 的新闻报道最多。我还想去掉域名,看看哪些域名的新闻报道最多。我在 R 中工作,在让后续查询正常工作时遇到了一些麻烦。

# Select the ten domains that have the most stories
sql_domain <- "SELECT url REPLACE(CASE WHEN REGEXP_CONTAINS(url, '//') 
                        THEN url ELSE CONCAT('http://', url) END, '&', '?') as domain_name,
                      COUNT(domain_name) as story_number
                FROM `bigquery-public-data.hacker_news.full`
                WHERE type = 'story'
                GROUP BY domain_name
                ORDER BY story_number DESC
                LIMIT 10"

我不需要剥离***域;例如,*** 不是必需的,***.com 很好。非常感谢您的帮助!

【问题讨论】:

也许您想要网络功能之一? cloud.google.com/bigquery/docs/reference/standard-sql/… @ElliotBrossard 非常优雅!我正在尝试:sql_domain_ag &lt;- "SELECT NET.REG_DOMAIN(url) as domain_name, COUNT(domain_name) as story_number 现在收到“错误:无法识别的名称:[2:29] [invalidQuery] 的域名”,所以我一定是不正确地调用了该函数,或者其他什么。 【参考方案1】:

问题出在您的查询中 - 您应该使用如下方式(对于 BigQuery 标准 SQL)

SELECT 
  NET.REG_DOMAIN(url) AS domain_name,
  COUNT(NET.REG_DOMAIN(url)) AS story_number
FROM `bigquery-public-data.hacker_news.full`
WHERE type = 'story'
GROUP BY 1
ORDER BY story_number DESC
LIMIT 10   

这将为您提供如下所示的内容

Row domain_name     story_number     
1   github.com      81784    
2   medium.com      71953    
3   youtube.com     58119    
4   blogspot.com    52925    
5   nytimes.com     48986    
6   techcrunch.com  43924    
7   google.com      26326    
8   wordpress.com   23372    
9   arstechnica.com 23162    
10  wired.com       18480    

【讨论】:

以上是关于使用 SQL 从 url 中剥离域名的主要内容,如果未能解决你的问题,请参考以下文章

Python获取url中域名及从域名中提取ip的方法

从给定的 url 中提取主域名

如何从 URL 中提取***域名 (TLD)

从 MongoDB 集合中的 URL 获取域名

从 URL 获取域名/主机名的最快方法是啥?

csharp 从URL中提取域名