2016-07-28 87 views
4

当使用包含URL的Data的BigQuery查询时,我们注意到DOMAIN函数的行为与URL的行为不同。BigQuery Domain功能区分大小写敏感度差异

这可以用这个简单的查询证明:

SELECT 
    domain('WWW.FOO.COM.AU'), 
    domain(LOWER('http://WWW.FOO.COM.AU/')), 
    domain('http://WWW.FOO.COM.AU/') 

全大写的URL的结果似乎并不是正确和documentation有关情况在URL中不提及任何东西。

Query Result

+0

我觉得这是在检测例如.com .NET .ORG等原顶级域名中的错误 - 看起来他们是较低的。其余的并不重要,并按原样运输。因此与TLD相同的问题() –

回答

1

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 | 
+---------------------+----------------+ 
+0

感谢您的答案。在正则表达式中解析URL是很好的,大部分时间我可以在应用函数之前通过降低URL来避开它。无论如何,这不是一个交易断路器,它只是我希望这可以记录在手册的某个地方。 –

+0

这是一个很好的建议;我提交了https://code.google.com/p/google-bigquery/issues/detail?id=638。谢谢! –