You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake正则:匹配最后斜杠与.parquet间下划线分隔文本

提取Parquet文件名指定分段的正则方案(Snowflake)

问题场景

给定文件路径:

test_stage/parquet_location/9f7d37fd-7039-4454-94ef-2b0cd6c3206a_b1df97ad-54dc-4fc9-a099-1fb9cd6530be_custom_1696963985.parquet

需要提取最后一个/与.parquet之间由_分隔的所有分段,预期结果:

  • 9f7d37fd-7039-4454-94ef-2b0cd6c3206a
  • b1df97ad-54dc-4fc9-a099-1fb9cd6530be
  • custom
  • 1696963985

原表达式问题

你尝试的(?<=/)[^/_]+(_[^/_]+)*.parquet无法满足需求,原因是该表达式会匹配从最后一个/到.parquet的整个字符串,而非拆分_分隔的独立分段。

解决方案

方案1:先提取目标子串再拆分

先通过正则提取最后一个/到.parquet之间的完整子串,再用SPLIT函数按_拆分:

SELECT SPLIT(
    REGEXP_SUBSTR(
        'test_stage/parquet_location/9f7d37fd-7039-4454-94ef-2b0cd6c3206a_b1df97ad-54dc-4fc9-a099-1fb9cd6530be_custom_1696963985.parquet',
        '[^/]+(?=\.parquet$)'
    ),
    '_'
) AS split_segments;

方案2:直接用regexp_substr_all匹配所有分段

使用精准正则直接匹配每个符合要求的分段,无需额外拆分:

SELECT REGEXP_SUBSTR_ALL(
    'test_stage/parquet_location/9f7d37fd-7039-4454-94ef-2b0cd6c3206a_b1df97ad-54dc-4fc9-a099-1fb9cd6530be_custom_1696963985.parquet',
    '(?<=/|_)([^_.]+)(?=_|\.parquet)'
) AS matched_segments;

正则解释:

  • (?<=/|_):正向预查,确保当前匹配段的前导是/或_
  • ([^_.]+):匹配不含_和.的字符,即单个分段内容
  • (?=_|\.parquet):正向预查,确保当前匹配段的后续是_或.parquet

内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:14