繁体   English   中英

如何将非常大的csv文件导入现有的SQL Server表?

[英]How to import a very large csv file into an existing SQL Server table?

我有一个非常大的csv文件,有~500列,~350k行,我试图导入到现有的SQL Server表中。

我试过BULK INSERT ,我得到 - Query executed successfully, 0 rows affected 有趣的是, BULK INSERT在几秒钟内完成了类似的操作,但是对于一个小得多的csv文件,少于50个cols,~77k行。

我也试过bcp ,我得到了 - Unexpected EOF encountered in BCP data-file. BCP copy in failed Unexpected EOF encountered in BCP data-file. BCP copy in failed

任务很简单 - 对纯粹的挫折感的限制应该不难。 任何想法或建议? 您已成功用于完成批量导入操作的任何其他工具,实用程序或类似的东西? 谢谢。

- BULK INSERT

USE myDb  
BULK INSERT myTable  
FROM 'C:\Users\myFile.csv'  
WITH  
(  
FIRSTROW = 2,  
-- DATAFILETYPE = 'char',  
-- MAXERRORS = 100,  
FIELDTERMINATOR = ',',  
ROWTERMINATOR = '\n'  
);

- bcp

bcp myDb.dbo.myTable in 'C:\Users\myFile.csv' -T -t, -c

UPDATE
我现在改变了方向。 我已经决定加入csv文件,这是我在SQL Server之外开始的目标,因此我现在不必将数据上传到表中。 但是,尝试从csv文件上传(BULK INSERT或'bcp')只有1条记录(~490 cols。)会很有趣,否则会失败,看看它是否有效。

最有可能最后一行没有\\n 此外,SQL-Server中的行大小(8060字节)存在限制,尽管T-SQL应该提到这一点。 但是,请检查此链接

我的建议:从一行开始,然后开始工作。 然后剩下的。

检查文件中是否存在不应该出现的EOF字符 - BCP告诉您该文件存在问题。

Notepad ++可能能够加载文件供您查看和搜索。

它可能不是您期望的解决方案,但使用Python,您可以非常轻松地从csv创建一个表(只需上传1GB CSV文件):

import pandas as pd
import psycopg2
from sqlalchemy import create_engine

# Read the csv to a dataframe
df = pd.read_csv('path_to_csv_file', index_col='name_of_index_column',  sep=",") 

# Connect and upload
engine = create_engine('postgresql+psycopg2://db_user_name:db_password@localhost:5432/' + 'db_name', client_encoding='utf8')
df.to_sql('table_name', engine, if_exists='replace', index =True, index_label='name_of_index_column')

如何使用表中的列映射文件中的字段? 表中的列数是否与文件中的字段数相同? 或者您使用格式文件来指定列映射? 如果是这样,格式文件是否格式正确?

如果您正在使用格式文件,并且如果您的“列数”参数错误,则会导致错误“意外的文件结束”。 有关批量上传的其他一些错误/问题,请参阅此处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM