DOMAIN
(和在传统SQL其他URL处理函数)有很多限制,很遗憾。虽然我们还没有standard SQL中的对等项(取消选中“在选项下使用旧版SQL”框),但您可以使用正则表达式在更多情况下构建自己的项目。还有的StackOverflow questions有关域提取a number,我们可以把其中一个答案使用为:
CREATE TEMPORARY FUNCTION GetDomain(url STRING) AS (
REGEXP_EXTRACT(url, r'^(?:https?:\/\/)?(?:[^@\n][email protected])?(?:www\.)?([^:\/\n]+)'));
WITH T AS (
SELECT url
FROM UNNEST(['WWW.FOO.COM.AU:8080', 'google.com',
'www.abc.xyz', 'http://example.com']) AS url)
SELECT
url,
GetDomain(url) AS domain
FROM T;
+---------------------+----------------+
| url | domain |
+---------------------+----------------+
| www.abc.xyz | abc.xyz |
| WWW.FOO.COM.AU:8080 | WWW.FOO.COM.AU |
| google.com | google.com |
| http://example.com | example.com |
+---------------------+----------------+
我觉得这是在检测例如.com .NET .ORG等原顶级域名中的错误 - 看起来他们是较低的。其余的并不重要,并按原样运输。因此与TLD相同的问题() –