2016-07-28 88 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。謝謝! –