2016-07-28 30 views
4

URLを含むデータでBigQueryクエリを使用すると、DOMAIN関数の動作がURLの大文字とは異なることがわかりました。BigQueryドメイン機能大文字と小文字の区別の差異

これは、この単純なクエリを証明することができる。

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には同等の機能はありませんが([オプション]の下の[Use Legacy SQL]チェックボックスをオフにしてください)、正規表現を使用してより多くの場合に機能する独自のものを作り出すことができます。そこドメイン抽出に関するStackOverflow questionsa 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を提出しました。ありがとう! –

関連する問題