SQL中如何查询LIST返回的stage文件列表获取最新上传文件
获取Stage中最新上传文件的实现方案
不用手动提取LIST返回结果的最后一条,Snowflake原生支持两种更稳妥的实现方式,还能规避默认排序规则变动导致的逻辑bug:
方案1:适配你现有执行流程,两步完成
正常执行你原本的LIST语句即可:LIST @my_stage;执行完立刻运行下面的语句,会直接读取上一条查询的返回结果,按文件最后修改时间倒序取第一条,就是最近上传的文件:
SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) ORDER BY "last_modified" DESC LIMIT 1;这个方法完全兼容你现有的LIST逻辑,哪怕你给LIST加了PATTERN过滤、指定了子路径前缀,后续的查询都能自动适配过滤后的结果集,不用额外调整。
方案2:单条语句直接查询,无需分两步执行
可以直接读取Stage的内置文件元数据,不用单独执行LIST命令,单条SQL就能直接拿到最新文件记录:SELECT METADATA$FILENAME AS file_path, METADATA$FILE_LAST_MODIFIED AS upload_time, METADATA$FILE_SIZE AS file_size, METADATA$FILE_CONTENT_KEY AS file_md5 FROM @my_stage ORDER BY upload_time DESC LIMIT 1;这种写法灵活性更高,你可以按需加过滤条件,比如只查根目录下的CSV格式最新文件,直接加WHERE条件即可:
WHERE METADATA$FILENAME LIKE '%.csv' AND METADATA$FILENAME NOT LIKE '%/%'
提醒:不要依赖LIST语句默认的日期升序逻辑直接取最后一条,官方文档没有承诺该排序规则会永久保持不变,显式指定
last_modified字段倒序取数的逻辑更稳定,不会因为平台版本迭代出现异常。
内容的提问来源于stack exchange,提问作者user18466310
相关产品推荐
相关产品推荐

