2016-07-28 5 views
4

Bei Verwendung der BigQuery-Abfrage mit Daten, die URLs enthalten, haben wir festgestellt, dass sich die DOMAIN-Funktion anders verhält als die URL.BigQuery-Domäne-Funktion Groß-/Kleinschreibung-Diskrepanz

Dies kann mit dieser einfachen Abfrage demonstriert werden:

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

Das Ergebnis der URL der vollständigen Groß scheint nicht richtig und die documentation nichts in Bezug auf Fall zu sein, in URLs erwähnt.

Query Result

+0

ich so das Gefühl, ein Fehler ist während Erkennung ursprünglichen Top-Level-Domains wie .com .net .org usw. - sieht so aus, als wären sie unterkaschiert. der Rest ist egal und wird so getragen wie er ist. Also das gleiche Problem mit TLD() –

Antwort

1

DOMAIN (und die anderen URL-Handling-Funktionen in Legacy-SQL) haben eine Reihe von Einschränkungen, leider. Während wir noch kein Äquivalent in standard SQL haben (deaktivieren Sie das Feld "Use Legacy SQL" unter Optionen), können Sie sich Ihr eigenes zusammenstellen, das in vielen Fällen mit einem regulären Ausdruck funktioniert. Es gibt a number von StackOverflow questions über Domain-Extraktion, und wir können die Antworten setzen eines zu verwenden, wie:

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

Danke für die Antwort. Parsing URL in Regex ist in Ordnung, und die meiste Zeit konnte ich es einfach durch Weglassen der URL vor Anwendung der Funktion durchkommen. Das ist sowieso kein Deal-Breaker, ich hoffe nur, dass dies irgendwo im Handbuch dokumentiert werden könnte. –

+0

Das ist ein guter Vorschlag; Ich habe https://code.google.com/p/google-bigquery/issues/detail?id=638 eingereicht. Vielen Dank! –