无法将3.4GB csv导入到redshift中,因为值包含带逗号的自由文本

时间:2014-09-24 02:25:53

标签: csv ipython bigdata amazon-redshift

所以我们发现了一个3.6GB的csv,我们已经上传到S3,现在想要导入Redshift,然后从iPython进行查询和分析。

问题1: 此逗号分隔文件包含值自由文本,其中也包含逗号,这会干扰分隔,因此无法上载到Redshift。 当我们尝试在Excel中打开示例数据集时,Excel会令人惊讶地将它们正确地放入列中。

问题2: 应该包含整数的列包含一些包含字母表的记录,以指示其他方案。 因此,获取导入的唯一方法是将此列声明为varchar。但后来我们可以进行计算。

问题3: 日期时间数据类型要求日期时间值采用YYYY-MM-DD HH:MM:SS格式,但csv不包含SS,数据库拒绝导入。

我们无法操纵本地计算机上的数据,因为它太大了,我们无法上传到云端进行计算,因为它的格式不正确。 最后一种方法是扩展运行iPython的实例,以便我们可以直接从S3读取大型csv,但这种方法作为长期解决方案没有意义。

您的建议?

2 个答案:

答案 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)

将其从登台表

加载到最终表中