S3 Bucket Stage 上的正则表达式 - 来自 Snowflake

Posted

技术标签:

【中文标题】S3 Bucket Stage 上的正则表达式 - 来自 Snowflake【英文标题】:Regex on S3 Bucket Stage - From Snowflake 【发布时间】:2021-05-12 00:26:58 【问题描述】:

我正在尝试创建下表:

create or replace table great_table as (
SELECT
  
$1:test::STRING as testt,
$1:testt::STRING as account_name,
$1:testttt::STRING as testttt,
$1:testttttt::DATE as testttttt
from  '@A_STAGE/20210510/object_name/part'
)
;

但我想获取 2021 年的所有数据,而不必重新配置存储桶结构。 有没有办法从艺名中的雪花做正则表达式?所以像

@A_STAGE/202%/object_name/part'

【问题讨论】:

【参考方案1】:

我相信您正在寻找的是利用 PATTERN 选项从阶段进行查询。此选项的文档位于此处,您最终要做的是从@A_STAGE 中进行选择,然后在格式选项中使用 PATTERN 来定义要从中选择的文件(和文件夹)的正则表达式。

https://docs.snowflake.com/en/user-guide/querying-stage.html#query-syntax-and-parameters

但是,如果您从该选择创建表,您可能应该运行 COPY INTO 语句,这也是相同的 PATTERN 选项:

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

或者,也许您可​​以考虑利用外部表,这取决于 S3 中的基础文件是如何创建、替换、删除等的。

https://docs.snowflake.com/en/sql-reference/sql/create-external-table.html

【讨论】:

迈克沃尔顿 - 感谢您的反馈。我在使用下面的示例时遇到问题,了解要交换的内容 - 你能帮忙把 file:///tmp/data*.csv @mystage1;尝试:put file:A_STAGE/202*/object_name/part' select t.$1, t.$2 from @mystage1 (file_format => 'myformat', pattern=>'.*202.*[.]c

以上是关于S3 Bucket Stage 上的正则表达式 - 来自 Snowflake的主要内容,如果未能解决你的问题,请参考以下文章

关于aws-s3-bucket-静态网站托管相关的查询-S3.Client.get_bucket_website(**kwargs)

AWS S3权限 - put-bucket-acl出错

【ceph】s3cmd 创建bucket名称大小写问题

如果 Gitlab CI 中不存在,则创建 S3 存储桶

Stage6--Python简单爬虫

hadoop fs -ls s3://bucket 或 s3a://bucket 抛出“没有这样的文件或目录”错误