Select 使用正则表达式的 SQL 路径中的深度
Select the depth in SQL path using regex expression
我正在使用 Athena 查询 S3,我想 select 密钥直到某个路径级别。
以下是一些关键示例:
- 项目=proj1/ID=SS02769/input=client1/version=X3900/data/fold1/file1.csv
- 项目=proj1/ID=SS02770/input=client1/version=X4500/data/fold1/file2.csv
- 项目=proj1/ID=SS02775/input=client1/version=X9000/data/fold1/file3.csv
我想查询这些行和 select 所有字符串,直到 'data/' 是否有要使用的正则表达式或任何 sql 表达式?
实际上我尝试了下一个正则表达式但不起作用:
regex_match = fr'([^/]*[/]){{{depth}}}'
深度=4,下一个查询:
f"SELECT REGEXP_EXTRACT(key,'{regex_match}') AS path FROM bucket_number_1)\
GROUP BY REGEXP_EXTRACT(key, '{regex_match}')"
但我点了空数据框
感谢任何帮助!
你可以使用
regex_match = r'^((?:[^/]*/){5})'
详情:
^
- 字符串开头
((?:[^/]*/){5})
- 捕获第 1 组:
(?:[^/]*/){5}
- 连续五次出现
[^/]*
- 除了 /
字符 之外的任何零个或多个字符
/
- /
个字符。
我正在使用 Athena 查询 S3,我想 select 密钥直到某个路径级别。 以下是一些关键示例:
- 项目=proj1/ID=SS02769/input=client1/version=X3900/data/fold1/file1.csv
- 项目=proj1/ID=SS02770/input=client1/version=X4500/data/fold1/file2.csv
- 项目=proj1/ID=SS02775/input=client1/version=X9000/data/fold1/file3.csv
我想查询这些行和 select 所有字符串,直到 'data/' 是否有要使用的正则表达式或任何 sql 表达式? 实际上我尝试了下一个正则表达式但不起作用:
regex_match = fr'([^/]*[/]){{{depth}}}'
深度=4,下一个查询:
f"SELECT REGEXP_EXTRACT(key,'{regex_match}') AS path FROM bucket_number_1)\
GROUP BY REGEXP_EXTRACT(key, '{regex_match}')"
但我点了空数据框
感谢任何帮助!
你可以使用
regex_match = r'^((?:[^/]*/){5})'
详情:
^
- 字符串开头((?:[^/]*/){5})
- 捕获第 1 组:(?:[^/]*/){5}
- 连续五次出现
[^/]*
- 除了/
字符 之外的任何零个或多个字符
/
-/
个字符。