Google bigquery BigQuery域函数区分大小写差异
当对包含URL的数据使用BigQuery查询时,我们注意到Google bigquery BigQuery域函数区分大小写差异,google-bigquery,google-cloud-platform,Google Bigquery,Google Cloud Platform,当对包含URL的数据使用BigQuery查询时,我们注意到域函数的行为与URL的情况不同 这可以通过以下简单查询进行演示: SELECT domain('WWW.FOO.COM.AU'), domain(LOWER('http://WWW.FOO.COM.AU/')), domain('http://WWW.FOO.COM.AU/') 完整大写URL的结果似乎不正确,并且URL中没有提到任何关于大小写的内容 不幸的是,域(以及遗留SQL中的其他URL处理函数)有许多限制
域
函数的行为与URL的情况不同
这可以通过以下简单查询进行演示:
SELECT
domain('WWW.FOO.COM.AU'),
domain(LOWER('http://WWW.FOO.COM.AU/')),
domain('http://WWW.FOO.COM.AU/')
完整大写URL的结果似乎不正确,并且URL中没有提到任何关于大小写的内容
不幸的是,域(以及遗留SQL中的其他URL处理函数)有许多限制。虽然我们在中还没有一个等价的表达式(取消选中选项下的“使用遗留SQL”框),但您可以使用正则表达式构建自己的表达式,在更多情况下可以使用它。关于域提取,有很多答案,我们可以将其中一个答案用作:
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 |
+---------------------+----------------+
我觉得这是一个bug,同时检测原始的顶级域,如.com.net.org等,看起来它们是小写的。其余的不重要,按原样进行。因此,TLD也有同样的问题()谢谢你的回答。在正则表达式中解析URL很好,大多数情况下,我可以通过在应用函数之前降低URL的大小写来解决这个问题。这不是一个交易破坏者,只是我希望这可以记录在手册的某个地方。这是一个很好的建议;我归档了。谢谢