我需要过滤基于文件名的文件名模式,从一个日期开始,将新数据从S3合并到雪花。
MERGE INTO tablename
USING
(
SELECT *
FROM '@s3bucketname/'
(file_format => PARQUET, pattern=>'.*20220127.*.parquet')
)
...
;这很好,但我需要更新日期。我可以使用以下子查询获得正确的模式字符串:
select concat('.*', regexp_replace(current_date(),'-',''), '.*.parquet' );但是,由于“表函数参数必须是常量”,所以我需要将它作为一个单独的变量。如果我将它设置为变量,它可以工作,但使用CTE如下:
MERGE INTO tablename
USING
( with filename_date as (select concat('.*', regexp_replace(current_date(),'-',''), '.*.parquet' ))
SELECT *
FROM '@s3bucketname/'
(file_format => PARQUET, pattern=>filename_date )
)
...
;不管用。是否有一种方法可以在合并中设置它并避免设置单独的会话变量?
发布于 2022-01-27 12:27:57
是否有一种方法可以在合并中设置它,并避免设置单独的会话变量?
不,没有办法。正如您所提到的,模式参数要求您提供一个常量。即使您输入filename_date,它也接受它为'filename_date',而不是作为变量。
您可以编写一个存储过程来计算日期,并使用此日期作为stage对象的模式执行动态SQL。
https://stackoverflow.com/questions/70877979
复制相似问题