繁体   English   中英

在 AWS Athena 和 PrestoDB 中使用 SQL 获取 SPLIT 数组中的最后一项

[英]Get last item in SPLIT array using SQL in AWS Athena and PrestoDB

拆分字符串后,我试图获取数组中的最后一项。 我会在 Javascript 使用url.split('//')[url.split('//').length-1]轻松做到这一点

但是如何在 SQL 上运行 AWS Athena(我相信实际上是 Proton)

// imagine a url is like 'http://www.google.com'

SELECT * SPLIT(url, '//')[2]
FROM table

将导致www.google.com

但在某些情况下没有结果,所以我需要使用[1]而不是[2]

// imagine a url is like 'www.google.com'

SELECT * SPLIT(url, '//')[2]
FROM table

这将导致Error

如何获取数组中的最后一项?

您可以在正则表达式中使用非捕获组

select regexp_extract('www.google.com', '(?:https?://)?(.*)',1)

select regexp_extract('http://www.google.com', '(?:https?://)?(.*)',1)

都将返回www.google.com

请注意,协议可以是 HTTP 或 HTTPS 并且上面的正则表达式也期望有s或没有。

您有 2 个选择:

使用element_at function,两者都会给出所需的 output:

SELECT ELEMENT_AT(SPLIT('http://www.google.com', '//'), -1)
SELECT ELEMENT_AT(SPLIT('www.google.com', '//'), -1)

第二个选项是使用slice function 来获取数组的一个子集。 两者都会给出所需的 output:

SELECT SLICE(SPLIT('http://www.google.com', '//'), -1, 1)[1]
SELECT SLICE(SPLIT('www.google.com', '//'), -1, 1)[1]
  • -1 提到子数组的第一个索引

  • 1是子数组的长度

要了解有关slice function 工作原理的更多信息: https://trino.io/docs/current/functions/array.html#slice

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM