我试图将一个csv加载到Python中,但是文件总是失败,因为其中一个字段有一个'\N'来表示一个字段中的空值,这个字段是空的。我不知道如何处理这个问题-我想在进来的时候转换它。
如果我可以忽略错误并将其余记录插入表中,那就太好了,但这似乎不是一件事。
任何帮助将不胜感激
下面的代码
con.sql("INSERT INTO getNBBOtimes SELECT * FROM read_csv_auto('G:/temp/timeexport.csv')")
字符串
导致以下错误
InvalidInputException Traceback (most recent call last)
<timed eval> in <module>
InvalidInputException: Invalid Input Error: Could not convert string '\N' to INT64 in column "column3", at line 856438.
Parser options:
file=G:/temp/timeexport.csv
delimiter=',' (auto detected)
quote='"' (auto detected)
escape='"' (auto detected)
header=0 (auto detected)
sample_size=20480
ignore_errors=0
all_varchar=0.
Consider either increasing the sample size (SAMPLE_SIZE=X [X rows] or SAMPLE_SIZE=-1 [all rows]), or skipping column conversion (ALL_VARCHAR=1)
型
我想我会尝试处理错误的方式,但似乎没有工作
con.sql("CREATE TABLE test1 as seLECT NULLIF(column1,'\\N') , NULLIF(column2,'\\N'),NULLIF(column3,'\\N'),NULLIF(column4,'\\N'),NULLIF(column2,'\\N') FROM read_csv_auto('G:/temp/timeexport.csv')")
型
返回以下错误:
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 46-47: malformed \N character escape
型
我尝试了这个
con.sql("CREATE TABLE test1 as seLECT NULLIF(column1,repr('\\N')) , NULLIF(column2,repr('\\N')),NULLIF(column3,repr('\\N')),NULLIF(column4,(repr'\\N')),NULLIF(column2,repr('\\N')) FROM read_csv_auto('G:/temp/timeexport.csv')")
型
得到了这个错误
CatalogException: Catalog Error: Scalar Function with name repr does not exist!
Did you mean "exp"?
1条答案
按热度按时间5uzkadbs1#
您还没有提供任何示例数据,因此我们假设您从以下内容开始:
字符串
我们首先创建目标表:
型
我们可以使用SQL
IF
语句来读取文件:型
这让我们:
型
……我想这就是你想要的。
如果您愿意将所有列都视为
VARCHAR
,则可以使用NULLIF
来实现您的解决方案:型
这让我们:
然后,您可以使用第二个
select
将这些varchar值转换为int64。