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

时间:2020-02-05 15:45:53

标签: sql regex string presto amazon-athena

假设我在AWS Athena中具有下表

+----------------+
|     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查询,但雅典娜似乎不支持所有这些函数。

1 个答案:

答案 0 :(得分:2)

您可以使用regexp_replace()删除字符串中最后一个'-'之后的部分:

select regexp_replace(thread, '-[^-]*$'; ''), count(*) 
from mytable
group by regexp_replace(thread, '-[^-]*$', '')