我正在寻找与Hive 的 parse_url(..., 'HOST') 等效的 Postgres(实际上是 Redshift)。
Postgres 文档说它有一个 URL 解析器作为其全文搜索的一部分。这篇博文有一个正则表达式,它可能是防弹的,也可能不是。什么是最好的?
我正在寻找与Hive 的 parse_url(..., 'HOST') 等效的 Postgres(实际上是 Redshift)。
Postgres 文档说它有一个 URL 解析器作为其全文搜索的一部分。这篇博文有一个正则表达式,它可能是防弹的,也可能不是。什么是最好的?
Redshift 现在有一个REGEXP_SUBSTR函数:
它在字符串中搜索正则表达式并返回匹配的第一个子字符串。提取主机的正则表达式的一个示例:
select REGEXP_SUBSTR(url, '[^/]+\\.[^/:]+') from my_table;
在 Redshift 开始支持 PostgreSQL 的正则表达式函数之前,如果您想从 Redshift SQL 中的 HTTP/S URL 中获取主机,您必须执行以下操作:
select split_part(url, '/', 3) as host from my_table
如果您不使用 Redshift,我会说“使用 PL/Perlu、PL/Python 或其他过程语言之一来获取常规 URL 解析器”。由于您使用的是 Pg 8.1 的专有分支,因此您将不得不接受我怀疑的 hacky regexp。
无法从 SQL 级别访问全文搜索 URL 解析器。您可以编写一个 C 扩展来很容易地将该函数公开给 SQL,但是当然您不能在 Redshift 中安装该扩展,所以它对您没有任何好处。
是时候滥用正则表达式了。
(顺便说一句,感谢您实际上说您正在使用 redshift;当他们的意思是“基于 PostgreSQL 的 ParAccel 托管版本”时,太多人说“PostgreSQL”)