如何在 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, '-[^-]*$', '')
假设我在 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, '-[^-]*$', '')