当对包含URL的数据使用BigQuery查询时,我们注意到DOMAIN函数的行为与URL的情况不同.
这可以通过这个简单的查询来证明:
SELECT
domain('WWW.FOO.COM.AU'),
domain(LOWER('http://WWW.FOO.COM.AU/')),
domain('http://WWW.FOO.COM.AU/')
完整大写的URL的结果似乎不正确,documentation没有提到有关URL中的大小写的任何内容.
最佳答案 遗憾的是,DOMAIN(以及旧版SQL中的其他URL处理函数)有许多限制.虽然我们在
standard SQL中没有等效项(取消选中“选项”下的“使用旧版SQL”框),但您可以使用正则表达式构建自己的更多案例.有关域名提取的0700的
a number,我们可以将其中一个答案用作:
CREATE TEMPORARY FUNCTION GetDomain(url STRING) AS (
REGEXP_EXTRACT(url, r'^(?:https?:\/\/)?(?:[^@\n]+@)?(?: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 |
+---------------------+----------------+