将带逗号作为分隔符的引号双精度从 S3 导入到 Amazon Redshift 中



我正在尝试将 CSV 文件从存储在 S3 上的 CSV 文件导入 Redshift 数据库。CSV 文件是完全引用的(因此即使是完全整数的列也使用 "( 引用(。

该表还包含双精度,这些双精度也被引用并使用荷兰语方式分隔整数和小数(1,5 是一半(。

所以基本上,我的文件看起来像这样:

"int_key", "double_value"
"1", "2,50"
"2", "3,50"

如果我"直接"导入它,则会出现错误:

Invalid digit, Value '"', Pos 0, Type: Integer

然后,我向查询中添加了removequotes,以正确处理整数整数。但是,现在我的双列不理解逗号:

Invalid digit, Value ',', Pos 1, Type: Double 

有没有办法告诉Redshift使用逗号来制作双打?

该文件太大,无法仅正则表达式并用句点替换逗号。

示例数据包含逗号分隔符和空格:

"int_key", "double_value"
"1", "2,50"
"2", "3,50"

仅此一项似乎就阻止了它加载到 Amazon Redshift 中。

但是,如果您只有一个逗号分隔符,则可以,例如:

"int_key","double_value"
"1","2,50"
"2","3,50"

您可以将第二个字段加载为字符串,然后使用 REPLACE() 函数进行转换。

CREATE TABLE foo AS (i int, s string, f float);
COPY INTO foo FROM 's3://...' DELIMITER ',' IGNOREHEADER 1 REMOVEQUOTES;
UPDATE foo SET f = REPLACE(s, ',' , '.')::float;

运行 UPDATE 命令需要一些时间,但这比修改输入文件更容易。

最新更新