BigQuery域功能案例敏感性差异

时间:2016-07-28 00:41:42

标签: google-bigquery google-cloud-platform

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

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

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

完整大写的网址结果似乎不对,documentation没有提及网址中的案例。

Query Result

1 个答案:

答案 0 :(得分:1)

遗憾的是,

DOMAIN(以及遗留SQL中的其他URL处理函数)有许多限制。虽然我们在standard SQL(取消选中"使用传统SQL"框下的选项)中没有等效内容,但您可以使用正则表达式构建自己的更多内容。关于域名提取有a number StackOverflow questions,我们可以将其中一个答案用作:

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    |
+---------------------+----------------+