Amazon web services 在红移卸载查询中传递日期参数

Amazon web services 在红移卸载查询中传递日期参数,amazon-web-services,amazon-redshift,Amazon Web Services,Amazon Redshift,我通过一个存储过程使用UNLOAD语句从红移中提取数据。下面是我的代码: 存储过程: CREATE OR REPLACE PROCEDURE upload\u redshift\u to\u s3(SQLStatement文本、s3\u路径文本、iamrole文本) 语言plpgsql AS $$ 声明 分隔符varchar(5); 卸载查询varchar(1000); 开始 分隔符:=“|”; unload|U查询:='unload('''''SQLStatement | |''')到''''

我通过一个存储过程使用
UNLOAD
语句从红移中提取数据。下面是我的代码:

存储过程:

CREATE OR REPLACE PROCEDURE upload\u redshift\u to\u s3(SQLStatement文本、s3\u路径文本、iamrole文本)
语言plpgsql AS
$$
声明
分隔符varchar(5);
卸载查询varchar(1000);
开始
分隔符:=“|”;
unload|U查询:='unload('''''SQLStatement | |''')到''''s3|U path |''IAMUROLE'''iam| |''delimiter''到'''ALOWOVERWRITE HEADER PARALLEL OFF';
执行卸载查询;
结束
$$;
我这样称呼它:

调用upload\u redshift\u to_s3('选择processsourceeventcreatedatepst、me\u日期、id1\u值、id2\u值、id3\u值、id4\u值
根据故障详情,其中processsourceeventcreatedatepst=''2019-12-06'',系统id=5,故障类型id=5',
“s3://测试桶/故障/2019-12-18/FSP_缺失”,
“arn:aws:iam::xxxx:role/houston fnt redshift role”);

我面临的问题是sql查询中的日期参数。我怎样才能把它作为日期传递到这里?它只运行查询,不提取任何数据。

我想您的问题与日期周围的引号有关

发件人:

如果查询包含引号(例如,将文字值括起来),请将文字放在两组单引号之间。您还必须将查询括在单引号之间:

(“从venuestate='NV''所在的场馆选择*)


我想你的问题与日期前后的引号有关

发件人:

如果查询包含引号(例如,将文字值括起来),请将文字放在两组单引号之间。您还必须将查询括在单引号之间:

(“从venuestate='NV''所在的场馆选择*)



谢谢你的回复。我尝试在upload命令中运行follow sql从failure_detail中选择processsourceeventcreatedatepst、me_date、id1_值、id2_值、id3_值、id4_值,其中processsourceeventcreatedatepst=''2019-12-18''和system_id=8,failure_type_id=4',但这给了我[Amazon](500310)无效操作:在“2019”处或附近出现语法错误;还有其他想法吗?不要在引号之间加空格。使用:
=''2019-12-18''
(每面都有2个单引号)您能编辑您的问题并提供运行的查询的完整内容吗?(也就是说,
unload\u query
)的值已更新为我正在运行的值。感谢您的回复。我尝试在upload命令中运行follow sql从failure_detail中选择processsourceeventcreatedatepst、me_date、id1_值、id2_值、id3_值、id4_值,其中processsourceeventcreatedatepst=''2019-12-18''和system_id=8,failure_type_id=4',但这给了我[Amazon](500310)无效操作:在“2019”处或附近出现语法错误;还有其他想法吗?不要在引号之间加空格。使用:
=''2019-12-18''
(每面都有2个单引号)您能编辑您的问题并提供运行的查询的完整内容吗?(也就是说,
unload\u query
)的值被更新为与日期相关的我正在运行的内容。。。能否显示
processsourceeventcreatedatepst
的示例值?我想看看它是一个
日期
还是一个
时间戳
。不,这是一个类似于“2019-12-06”的日期,然后将此值设置到sql中。我在java代码私有字符串buildFormattedExtractionDate(LocalDate LocalDate){DateTimeFormatter DateTimeFormatter=DateTimeFormatter.of模式(“yyyy-MM dd”)中执行此操作;LocalDate extractionDate=LocalDate.minusDays(1);//logger.log(“buildFormattedExtractionDate完成”);return extractionDate.format(dateTimeFormatter);}因此,在生成查询时,LocalDate会转换为字符串。我建议您在SQL客户机中尝试查询,以确认它是否正常工作。然后,作为测试,尝试在过程中对整个查询进行编码,以确认它是否正确运行。如果它确实运行,那么问题与过程中字符串的构造有关。尝试以某种方式查看
unload\u query
的确切内容以调试正在发生的事情。将尝试。上传时将日期传递到sql的一般格式是什么?我实际上是在aws控制台上测试它的日期。。。能否显示
processsourceeventcreatedatepst
的示例值?我想看看它是一个
日期
还是一个
时间戳
。不,这是一个类似于“2019-12-06”的日期,然后将此值设置到sql中。我在java代码私有字符串buildFormattedExtractionDate(LocalDate LocalDate){DateTimeFormatter DateTimeFormatter=DateTimeFormatter.of模式(“yyyy-MM dd”)中执行此操作;LocalDate extractionDate=LocalDate.minusDays(1);//logger.log(“buildFormattedExtractionDate完成”);return extractionDate.format(dateTimeFormatter);}因此,在生成查询时,LocalDate会转换为字符串。我建议您在SQL客户机中尝试查询,以确认它是否正常工作。然后,作为测试,尝试在过程中对整个查询进行编码,以确认它是否正确运行。如果它确实运行,那么问题与过程中字符串的构造有关。尝试以某种方式查看
unload\u query
的确切内容以调试正在发生的事情。将尝试。上传时将日期传递到sql的一般格式是什么?我实际上是在aws控制台中测试它