将压缩文件从S3复制到redshift(stl-load-error)

时间:2018-12-27 06:54:11

标签: python amazon-web-services amazon-redshift

我正在尝试通过Python脚本将数据从S3复制到亚马逊redshift

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} / daily-sku-benefits / 2018-12-27
  • qualname是表名

但是我遇到错误:

  

(psycopg2.InternalError)装入表'daily_sku_benefits'失败。检查“ stl_load_errors”系统表以了解详细信息。    [SQL:“ COPY daily_sku_benefits \ nFROM's3:// {bucket-name} /daily-sku-benefits/2018-12-27.csv.gzip'\ nCREDENTIALS'aws_access_key_id = {访问密钥}; aws_secret_access_key = {秘密- key} GZIP CSV IGNOREHEADER 1;“](此错误的背景位于:http://sqlalche.me/e/2j85

在检查stl_load_error时出现此错误:

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

有人对此有任何想法吗?

1 个答案:

答案 0 :(得分:1)

错误清楚地说明了解决问题的方法,您的timestamp数据必须为[YYYY-MM-DD HH24:MI:SS]格式。

您的数据应如下所示(我也将分隔符作为pipe(|),尽管也可以),

 Column1|Columnd2|created_at
 Test1|Test description1|2018-05-10 23:54:51
 Test2|Test description2|2018-05-17 22:15:53

例如具有结构的表-

create table daily_sku_benefits(
Colunm1 varchar(55),
Colunm2 varchar(255),
updated_at timestamp);

您可以应用另一个技巧,因为完整数据可能不是bad,可能是some percentage,因此您可以在{{ 1}}命令。 Maxerror的解释在这里。

希望有帮助。