首页 > 解决方案 > 从 s3 阶段读取时需要选择存储桶名称

问题描述

我正在通过舞台从雪花中的 S3 文件夹中读取。s3 中的存储桶有多个文件夹(或对象,如果我们想调用它)。该文件夹在存储桶中是基于日期的

date=2020-06-01
date=2020-06-02
date=2020-06-03
date=2020-06-04
date=2020-06-05

我正在使用以下查询一次读取所有文件夹。这工作正常。

select raw.$1:name name,
       raw.$1:id ID
from
@My_Bucket/student_date/
(FILE_FORMAT => PARQUET, 
 PATTERN =>'.*date=.*\gz.parquet') raw
;   

现在我想在我的查询中选择文件夹名称,有没有办法做到这一点。

喜欢输出包含

name | id | date..

请建议

标签: snowflake-cloud-data-platformsnowsql

解决方案


Snowflake 有一个内置的元数据字段,提供完整的文件名,包括路径。您应该能够运行以下查询:

select raw.$1:name name,
       raw.$1:id ID,
       METADATA$FILENAME 
from
@My_Bucket/student_date/
(FILE_FORMAT => PARQUET, 
 PATTERN =>'.*date=.*\gz.parquet') raw
; 

我知道你只是在日期部分之后,但是一旦你有了文件名,你就可以使用 SPLIT_PART 函数从文件名中获取日期部分。例如

SPLIT_PART(METADATA$FILENAME, '/', 4)

希望这可以帮助。


推荐阅读