求助:Snowflake查询解析S3路径获取partition_id的适配优化
解决方案:Snowflake中稳定解析S3路径的partition_id
原查询依赖文件名以part-开头做分割逻辑,一旦文件名不符合该规则就会返回错误结果。以下两种方法可实现不依赖文件名格式,精准提取partition_id:
方法1:正则表达式提取(推荐)
利用REGEXP_SUBSTR直接匹配路径中partition_id=8位数字的固定格式,无需依赖后续文件名:
-- 场景1测试 SELECT REGEXP_SUBSTR('1234/local/table_name1/partition_id=20240101/part-0001.parquet', 'partition_id=\\d{8}') AS partition_id; -- 场景2测试 SELECT REGEXP_SUBSTR('1234/local/table_name2/partition_id=20240101/table.name2.parquet', 'partition_id=\\d{8}') AS partition_id;
两种场景输出均为:partition_id=20240101
方法2:路径分割后筛选
若partition_id后的数字位数不固定,可先将路径按/分割为数组,再筛选包含partition_id=的元素:
-- 适配场景1 SELECT ARRAY_GET(FILTER(SPLIT('1234/local/table_name1/partition_id=20240101/part-0001.parquet', '/'), x -> x LIKE 'partition_id=%'), 0) AS partition_id; -- 适配场景2 SELECT ARRAY_GET(FILTER(SPLIT('1234/local/table_name2/partition_id=20240101/table.name2.parquet', '/'), x -> x LIKE 'partition_id=%'), 0) AS partition_id;
两种场景输出均为:partition_id=20240101
内容的提问来源于stack exchange,提问作者user2601350
相关产品推荐
相关产品推荐

