使用 Python 将数据导入 SQL
Import Data to SQL using Python
我需要将 30k 行数据从 CSV 文件导入 Vertica 数据库。我试过的代码需要一个多小时才能完成。我想知道是否有更快的方法来做到这一点?我尝试使用 csv 导入,也尝试通过循环插入数据框来导入,但速度不够快。事实上,它太慢了。你能帮帮我吗?
rownum=df.shape[0]
for x in range(0,rownum):
a=df['AccountName'].values[x]
b=df['ID'].values[x]
ss="INSERT INTO Table (AccountName,ID) VALUES (%s,%s)"
val=(a,b)
cur.execute(ss,val)
connection.commit()
您想使用 COPY
命令 (COPY)。
COPY Table FROM '/path/to/csv/file.csv' DELIMITER ',';
这比一次插入每一行要快得多。
既然您使用的是 python,我会推荐 vertica_python
模块,因为它在其光标对象 (vertica-python GitHub page) 上有一个非常方便的复制方法。
将COPY
与vertica-python一起使用的语法如下:
with open('file.csv', 'r') as file:
csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN DELIMITER ','"
cur.copy(copy_cmd, csv_file)
connection.commit()
另一件可以加快该过程的事情是压缩 csv 文件。 Vertica 可以读取 gzip、bzip 和 lzo 压缩文件。
with open('file.csv.gz', 'r') as file:
gzipped_csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN GZIP DELIMITER ','"
cur.copy(copy_cmd, gzipped_csv_file)
connection.commit()
复制压缩文件将减少网络时间。因此,您必须确定压缩 csv 文件所花费的额外时间是否弥补了复制压缩文件所节省的时间。在我处理过的大多数情况下,压缩文件是值得的。
我需要将 30k 行数据从 CSV 文件导入 Vertica 数据库。我试过的代码需要一个多小时才能完成。我想知道是否有更快的方法来做到这一点?我尝试使用 csv 导入,也尝试通过循环插入数据框来导入,但速度不够快。事实上,它太慢了。你能帮帮我吗?
rownum=df.shape[0]
for x in range(0,rownum):
a=df['AccountName'].values[x]
b=df['ID'].values[x]
ss="INSERT INTO Table (AccountName,ID) VALUES (%s,%s)"
val=(a,b)
cur.execute(ss,val)
connection.commit()
您想使用 COPY
命令 (COPY)。
COPY Table FROM '/path/to/csv/file.csv' DELIMITER ',';
这比一次插入每一行要快得多。
既然您使用的是 python,我会推荐 vertica_python
模块,因为它在其光标对象 (vertica-python GitHub page) 上有一个非常方便的复制方法。
将COPY
与vertica-python一起使用的语法如下:
with open('file.csv', 'r') as file:
csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN DELIMITER ','"
cur.copy(copy_cmd, csv_file)
connection.commit()
另一件可以加快该过程的事情是压缩 csv 文件。 Vertica 可以读取 gzip、bzip 和 lzo 压缩文件。
with open('file.csv.gz', 'r') as file:
gzipped_csv_file = file.read()
copy_cmd = "COPY Table FROM STDIN GZIP DELIMITER ','"
cur.copy(copy_cmd, gzipped_csv_file)
connection.commit()
复制压缩文件将减少网络时间。因此,您必须确定压缩 csv 文件所花费的额外时间是否弥补了复制压缩文件所节省的时间。在我处理过的大多数情况下,压缩文件是值得的。