当对包含数据的URL使用BigQuery查询时,我们注意到DOMAIN
函数的行为与URL的情况不同。
这可以通过这个简单的查询来证明:
SELECT
domain('WWW.FOO.COM.AU'),
domain(LOWER('http://WWW.FOO.COM.AU/')),
domain('http://WWW.FOO.COM.AU/')
完整大写的网址结果似乎不对,documentation没有提及网址中的案例。
答案 0 :(得分:1)
DOMAIN
(以及遗留SQL中的其他URL处理函数)有许多限制。虽然我们在standard SQL(取消选中"使用传统SQL"框下的选项)中没有等效内容,但您可以使用正则表达式构建自己的更多内容。关于域名提取有a number StackOverflow questions,我们可以将其中一个答案用作:
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 |
+---------------------+----------------+