DOMAIN
(およびレガシーSQL内の他のURL処理関数は)残念ながら、多くの制限があります。 standard SQLには同等の機能はありませんが([オプション]の下の[Use Legacy 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 |
+---------------------+----------------+
が.COM .NET .ORGなどのように、元のトップレベルドメインを検出しながらバグがあります - 彼らは小文字であるように見えます。残りは問題ではなく、そのまま運ばれます。 TLD()と同じ問題 –