0

我在表格中有 url 数据。我想创建一个显示二级 (sld) 和顶级域 (tld) 以及子域的视图。如何在 ANSI SQL 中提取它?我使用的数据库只支持ansi sql,没有reverse等很酷的功能。

这是数据:

  TLD =  -- The top-level domain (.com, .org, .info, .us)
  SLD =  -- The second-level domain (twitter, yahoo, facebook, google) second part of URL
  SUBDOMAIN = -- The subdomain domain (www, search.google, search.espn) first part of URL // tricky

这是我正在使用的逻辑。但我无法正确获取子域。我想在提取 TLD 和 SLD 后反转并获取剩余部分,但 Vertica 不支持反转功能。

这是查询和示例数据(注意:SPLIT_PART 在指定字符处拆分字符串):

select COALESCE(SPLIT_PART(URL, '.', 3), SPLIT_PART(URL, '.', 2))  as tld, 
             SPLIT_PART(URL, '.', 2) as sld, 
SPLIT_PART(URL, '.', 1) as subdomain from URL_table

该表有 2 列,日期和 URL 以下是示例 URL:

search.mywebsearch.com   (TLD = com, SLD = mywebsearch, subdomain = search)
search.earthlink.net     
topix.com
main.welcomescreen.intrepid.com
ad.yieldmanager.com
google.com
news.google.com
4

1 回答 1

0

这是一件很难做到的事情,尤其是在您的数据嘈杂的情况下,例如大数据。

你能得到 http:// 作为前缀吗?像 www.sub.dom.com 这样的网站呢?.TLD 之后的所有内容都已被清除了吗?

由于这些原因,我们对尝试在 SQL 中实现拆分持谨慎态度。相反,我们使用了 Vertica 的 UDTF 功能并用 C++ 编写了一个拆分器。我认为我们宁愿不这样做,但我们只是不相信 SQL 足够健壮。

于 2013-05-07T16:30:59.443 回答