如何在Snowflake中用regexp_substr从S3路径提取客户端名称
解决Snowflake中提取S3路径客户端名称的问题
你的需求是从S3文件路径中提取倒数第二个目录的名称(示例中的Client ABC),该名称可能包含空格或下划线。原语句的正则匹配的是文件名,完全偏离了目标,以下是两种可行方案:
方案一:正则表达式(灵活适配路径结构)
使用正则捕获倒数第二个/与最后一个/之间的内容,这部分就是客户端名称:
SELECT REGEXP_SUBSTR(METADATA$FILENAME, '.+/([^/]+)/[^/]+\\.csv$', 1, 1, 'e') AS client_name;
正则逻辑说明:
.+/:匹配路径中倒数第二个/之前的所有内容([^/]+):捕获倒数第二个/和最后一个/之间的所有非/字符(支持空格、下划线等任意非路径分隔符的字符)/[^/]+\.csv$:匹配最后一个/到.csv结尾的文件名部分'e'参数:指定返回正则中第一个捕获组的内容,也就是我们需要的客户端名称
方案二:拆分路径(适用于固定结构的路径)
如果你的S3路径结构固定(客户端目录始终是倒数第二个层级),可以用SPLIT_PART拆分路径,代码更直观:
SELECT SPLIT_PART(REPLACE(METADATA$FILENAME, 's3://', ''), '/', 6) AS client_name;
逻辑说明:
- 先用
REPLACE去掉s3://前缀 - 用
/作为分隔符拆分路径,示例中Client ABC是第6个拆分段(从1开始计数)
注意:此方法仅在路径层级固定时有效,若路径结构有变动,优先选择正则方案
测试示例路径时,两种方案都会返回Client ABC,满足需求。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

