Amazon redshift 如何在红移中从字符串中解析主机?

Amazon redshift 如何在红移中从字符串中解析主机?,amazon-redshift,Amazon Redshift,我正在寻找一个相当于的博士后(实际上是红移) 假设它有一个URL解析器作为全文搜索的一部分。这篇博文有可能是防弹的,也可能不是防弹的。什么是最好的?如果您没有使用红移,我会说“使用PL/Perlu、PL/Python或其他过程语言之一来获得常规的URL解析器”。由于您使用的是第8.1页的专有分支,我怀疑您必须满足于一个黑客regexp 无法从SQL级别访问全文搜索URL解析器。您可以编写一个C扩展来很容易地将函数公开给SQL,但当然您不能在Redshift中安装该扩展,所以它同样对您没有任何好处

我正在寻找一个相当于的博士后(实际上是红移)


假设它有一个URL解析器作为全文搜索的一部分。这篇博文有可能是防弹的,也可能不是防弹的。什么是最好的?

如果您没有使用红移,我会说“使用PL/Perlu、PL/Python或其他过程语言之一来获得常规的URL解析器”。由于您使用的是第8.1页的专有分支,我怀疑您必须满足于一个黑客regexp

无法从SQL级别访问全文搜索URL解析器。您可以编写一个C扩展来很容易地将函数公开给SQL,但当然您不能在Redshift中安装该扩展,所以它同样对您没有任何好处

是时候滥用正则表达式了


(顺便说一句,谢谢你说你在使用红移;太多人说“PostgreSQL”是指“基于PostgreSQL的ParAccel托管版本”)

直到红移开始支持PostgreSQL的正则表达式函数,如果要在红移SQL中从HTTP/S URL中取出主机,必须执行以下操作:

select split_part(url, '/', 3) as host from my_table
红移现在有一个功能:

它在字符串中搜索正则表达式并返回匹配的第一个子字符串。用于提取主机的正则表达式的一个示例:

select REGEXP_SUBSTR(url, '[^/]+\\.[^/:]+') from my_table;

仅供参考,有人还建议将导入时的配置单元函数应用于红移,以便将其预计算到另一个字段中。@dfrankow当然可以,但您希望在数据库中执行此操作。如果不考虑空间成本,那么最好将URL预拆分为单独的字段。红移中不支持PostgreSQL的正则表达式函数,但字符串操作中有足够的函数来解析主机。看看我的答案。很好的正则表达式!不包含斜杠的字符范围,后跟句点,后跟另一个不包含斜杠或分号的字符范围。
SELECT REGEXP\u SUBSTR('http://www.google.com/foo?a=b“,”[^/]+\\.[^/:]+')
=>
{“regexp\u substr”=>“http”}
(在红移群集上)也可以删除可选的“www”您可以调整它:选择REGEXP\u SUBSTR(url,[^/(www.)]+\\.[^/:]+')作为my\u表中的主机名是否为“:”必需?在哪些情况下,它将返回不正确的值?