[英]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.