google-bigquery – BigQuery域功能案例敏感性差异

当对包含URL的数据使用BigQuery查询时,我们注意到DOMAIN函数的行为与URL的情况不同.

这可以通过这个简单的查询来证明:

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

完整大写的URL的结果似乎不正确,documentation没有提到有关URL中的大小写的任何内容.

《google-bigquery – BigQuery域功能案例敏感性差异》

最佳答案 遗憾的是,DOMAIN(以及旧版SQL中的其他URL处理函数)有许多限制.虽然我们在
standard SQL中没有等效项(取消选中“选项”下的“使用旧版SQL”框),但您可以使用正则表达式构建自己的更多案例.有关域名提取的0700的
a number,我们可以将其中一个答案用作:

CREATE TEMPORARY FUNCTION GetDomain(url STRING) AS (
  REGEXP_EXTRACT(url, r'^(?:https?:\/\/)?(?:[^@\n]+@)?(?: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    |
+---------------------+----------------+
点赞