Python 将压缩文件从S3复制到红移(stl加载错误)

Python 将压缩文件从S3复制到红移(stl加载错误),python,amazon-web-services,amazon-redshift,Python,Amazon Web Services,Amazon Redshift,我正试图通过Python脚本将数据从S3复制到AmazonRedshift command = ("COPY {qualname}\n" "FROM 's3://{keypath}' \n" "CREDENTIALS 'aws_access_key_id={key};aws_secret_access_key={secret}' " "{gzip} " "{

我正试图通过Python脚本将数据从S3复制到AmazonRedshift

command = 

    ("COPY {qualname}\n"
                "FROM 's3://{keypath}' \n"
                "CREDENTIALS 'aws_access_key_id={key};aws_secret_access_key={secret}' "
                "{gzip} "
                "{null_as} "
                #"{emptyasnull}"
                "CSV IGNOREHEADER 1;").format(qualname=qualname,
                                 keypath=url,
                                 key=aws_access_key_id,
                                 secret=aws_secret_access_key,
                                 gzip="GZIP " if compress else " ",
                                 null_as="NULL AS '{}'".format(null_as) if null_as is not None else "",
                                 emptyasnull="EMPTYASNULLL " if emptyasnull else " ")```
  • keypath
    是s3://{bucket-name}/每日sku福利/2018-12-27
  • qualname
    是表名
但是,我得到一个错误:

(psycopg2.InternalError)加载到表“每日库存价值”失败。有关详细信息,请查看“stl\U加载错误”系统表。 [SQL:“从's3://{bucket-name}/daily sku-benefits/2018-12-27.csv.gzip'\n复制每日sku-benefits'aws\u-access\u-key\u-id={access-key};aws\u-secret\u-access\u-key={secret key}gzip-csv-IGNOREHEADER 1;”](此错误的背景信息位于:)

在检查
stl\u load\u error
时,我得到了这个错误:

Invalid timestamp format or value [YYYY-MM-DD HH24:MI:SS]  

有人知道吗?

错误清楚地向您显示了解决问题的方法,您的
时间戳
数据必须是
[YYYY-MM-DD HH24:MI:SS]
格式

您的数据应该如下所示(我使用了分隔符作为管道(|),但也很好)

例如,具有结构的表-

create table daily_sku_benefits(
Colunm1 varchar(55),
Colunm2 varchar(255),
updated_at timestamp);
您还可以应用另一个技巧,因为您完成的数据可能不是
坏的
,可能是
某个百分比的
,因此您可以在
复制
命令中使用
MAXERROR
属性。下面是解释


希望有帮助。

当您无法保证值的完整性时,请先将这些时间戳加载到varchar中,然后对其进行后期处理。它试图加载的日期的格式是什么?
envar\u date\u string=os.environ.get(key='BILL\u date',default=datetime.today().strftime(%Y-%m-%d))
envar\u date=datetime.strptime(环境日期字符串,“%Y-%m-%d”)
计费日期=日期时间(环境日期.年,环境日期.月,环境日期.日)
我有6个数据类型为时间戳的日期列,没有时区,还有一个数据类型为日期的列……这可能是问题吗?如果你想一想,一点也不可能,因为你在数据
|
之间放置了一个分隔符,那么所有这些数据点都不同,一个数据点不会与另一个数据点混淆。但是很明显,yo你可能需要做一些额外的测试和一些修复,以确保一切顺利。
create table daily_sku_benefits(
Colunm1 varchar(55),
Colunm2 varchar(255),
updated_at timestamp);