【问题标题】:Data type shifts in amazon redshift亚马逊红移中的数据类型转变
【发布时间】:2021-05-05 11:45:42
【问题描述】:

我正在将我的数据从 s3 加载到 redshift。我注意到红移错误日志中查询中的数据类型发生了变化。

这是我正在创建的表...

main_covid_table_create = ("""
                        CREATE TABLE IF NOT EXISTS main_covid_table(
                        SNo INT IDENTITY(1, 1),
                        ObservationDate DATE,
                        state VARCHAR,
                        country VARCHAR,
                        lastUpdate DATE,
                        Confirmed DOUBLE PRECISION,
                        Deaths DOUBLE PRECISION,
                        Recovered DOUBLE PRECISION
                        )
                        """)

复制命令为

staging_main_covid_table_copy = ("""
                            COPY main_covid_table
                            FROM {}
                            iam_role {}
                            DELIMITER ','
                            IGNOREHEADER 1
                            DATEFORMAT AS 'auto'
                            NULL AS 'NA'
                            """).format(COVID_DATA, IAM_ROLE)

运行脚本后,我从 redshift 中得到了他的错误:

我对这个错误的解释是lastUpdate的数据类型被用于国家列。有人可以帮忙吗?

【问题讨论】:

  • 请为输入文件中的lastUpdate 字段提供一些示例值。
  • 谢谢@JohnRotenstein。 lastUpdate 看起来像这样 2020-01-22 17:00:00, 2021-01-20 05:21:54
  • 你能发布几行你的源数据文件(如果可能的话,包括失败的行)?看起来您的表列定义和输入文件中的数据组织没有保持一致。源数据中的分隔符或没有分隔符的缺失值可能会导致此问题。查看 Redshift 尝试处理的数据将有助于我们更好地评估问题所在。

标签: amazon-web-services amazon-redshift


【解决方案1】:

大概,您的错误输出来自STL_LOAD_ERRORS,在这种情况下,倒数第三列定义为:“导致解析错误的字段“colname”的预解析值。”。

因此,它表示country 存在问题,并且试图将其解释为日期。鉴于您提供的定义,这没有意义。事实上,它看起来好像正在尝试将标题行作为数据加载,考虑到IGNOREHEADER 1 的存在,这再次没有意义。看起来也有列未对齐。

我建议您检查 STL_LOAD_ERRORS 行(包括 colname)中的完整错误详细信息,并尝试找出数据发生的情况。您可以从文件中的一行数据开始,看看它是否有效,然后继续添加数据以找出破坏负载的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多