首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在雪花中运行“复制/合并”阶段时,是否有一种将子查询结果用作模式的方法?

问在雪花中运行“复制/合并”阶段时,是否有一种将子查询结果用作模式的方法?
EN

Stack Overflow用户
提问于 2022-01-27 11:42:15
回答 1查看 137关注 0票数 1

我需要过滤基于文件名的文件名模式,从一个日期开始,将新数据从S3合并到雪花。

代码语言:javascript
复制
MERGE INTO tablename
USING
    (
        SELECT *
        FROM '@s3bucketname/'  
        (file_format  => PARQUET, pattern=>'.*20220127.*.parquet')  
)
    ...
;

这很好,但我需要更新日期。我可以使用以下子查询获得正确的模式字符串:

代码语言:javascript
复制
select concat('.*', regexp_replace(current_date(),'-',''), '.*.parquet' );

但是,由于“表函数参数必须是常量”,所以我需要将它作为一个单独的变量。如果我将它设置为变量,它可以工作,但使用CTE如下:

代码语言:javascript
复制
MERGE INTO tablename
USING
( with filename_date as (select concat('.*', regexp_replace(current_date(),'-',''), '.*.parquet' ))
    SELECT *
        FROM '@s3bucketname/'  
        (file_format  => PARQUET, pattern=>filename_date )  
)
    ...
;

不管用。是否有一种方法可以在合并中设置它并避免设置单独的会话变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-27 12:27:57

是否有一种方法可以在合并中设置它,并避免设置单独的会话变量?

不,没有办法。正如您所提到的,模式参数要求您提供一个常量。即使您输入filename_date,它也接受它为'filename_date',而不是作为变量。

您可以编写一个存储过程来计算日期,并使用此日期作为stage对象的模式执行动态SQL。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70877979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档