我正在尝试将 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 命令需要一些时间,但这比修改输入文件更容易。