所以我们发现了一个3.6GB的csv,我们已经上传到S3,现在想要导入Redshift,然后从iPython进行查询和分析。
问题1: 此逗号分隔文件包含值自由文本,其中也包含逗号,这会干扰分隔,因此无法上载到Redshift。 当我们尝试在Excel中打开示例数据集时,Excel会令人惊讶地将它们正确地放入列中。
问题2: 应该包含整数的列包含一些包含字母表的记录,以指示其他方案。 因此,获取导入的唯一方法是将此列声明为varchar。但后来我们可以进行计算。
问题3: 日期时间数据类型要求日期时间值采用YYYY-MM-DD HH:MM:SS格式,但csv不包含SS,数据库拒绝导入。
我们无法操纵本地计算机上的数据,因为它太大了,我们无法上传到云端进行计算,因为它的格式不正确。 最后一种方法是扩展运行iPython的实例,以便我们可以直接从S3读取大型csv,但这种方法作为长期解决方案没有意义。
您的建议?
答案 0 :(得分:0)
对于第一个问题,您需要找到一种方法来区分两种类型的逗号 - 分隔符和文本逗号。完成后,使用不同的分隔符替换分隔符,并在Redshift的copy命令中使用相同的分隔符。
对于第二个问题,您需要首先确定加载后是否需要此列用于数值聚合。如果是,您需要在加载之前清除此数据。如果不是,您可以直接将其加载为char / varchar字段。您的所有查询仍然有效,但您无法在此字段上进行任何聚合(总和/平均等)。
对于问题3,您可以在Excel中使用文本(日期," yyyy-mm-dd hh:mm:ss")函数来为此字段执行批量替换。
让我知道这是否成功。
答案 1 :(得分:0)
尝试使用不同的分隔符或使用转义字符。
http://docs.aws.amazon.com/redshift/latest/dg/r_COPY_preparing_data.html
对于第二个问题,如果要在加载到char之后仅从列中提取数字,请使用regexp_replace或其他函数。
对于第三个问题,您也可以将其加载到VARCHAR字段中,然后使用子字符串cast(left(column_name, 10)||' '||right(column_name, 6)||':00' as timestamp)
将其从登台表
加载到最终表中