如何在 AWS Athena 的最后一个定界符之前获取字符串的一部分

How to get part of the String before last delimiter in AWS Athena

假设我在 AWS Athena

中有以下 table
+----------------+
|     Thread     |
+----------------+
| poll-23        |
| poll-34        |
| pool-thread-24 |
| spartan.error  |
+----------------+

我需要从最后一个分隔符之前的列中提取字符串的一部分(这里'-'是分隔符)

基本上需要一个可以给我输出的查询

+----------------+
|     Thread     |
+----------------+
| poll           |
| poll           |
| pool-thread    |
| spartan.error  |
+----------------+

我还需要一个可以生成这个的查询组


+---------------+-------+
|    Thread     | Count |
+---------------+-------+
| poll          |     2 |
| pool-thread   |     1 |
| spartan.error |     1 |
+---------------+-------+

我使用 LEFT()、RIGHT()、LOCATE()、SUBSTRING_INDEX() 函数尝试了各种形式的 MySql 查询,但似乎 athena 不支持所有这些函数。

您可以使用 regexp_replace() 删除最后一个 '-':

之后的字符串部分
select regexp_replace(thread, '-[^-]*$', ''), count(*) 
from mytable
group by regexp_replace(thread, '-[^-]*$', '')