[英]Spark SQL query to get the last updated timestamp of a Athena table stored as CSV in AWS S3
[英]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.