Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python将数据导入SQL_Python_Sql_Vertica - Fatal编程技术网

使用Python将数据导入SQL

使用Python将数据导入SQL,python,sql,vertica,Python,Sql,Vertica,我需要从CSV文件中将30k行数据导入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) VA

我需要从CSV文件中将30k行数据导入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
命令()

这比一次插入每一行要快得多

由于您使用的是python,我建议使用
vertica_python
模块,因为它在游标对象()上有一个非常方便的复制方法

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文件所需的额外时间。在我处理过的大多数情况下,压缩文件是值得的。

您想使用
COPY
命令()

这比一次插入每一行要快得多

由于您使用的是python,我建议使用
vertica_python
模块,因为它在游标对象()上有一个非常方便的复制方法

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文件所需的额外时间。在我处理过的大多数情况下,压缩文件是值得的。

立即尝试可能是
val=(df['AccountName'].values.tolist(),df['ID'].values.tolist())
然后使用
cur.executemany(ss,val)
而不使用
for
循环。这应该更快,但我不确定是否会有进一步的改进。此外,1个缩进空间使该代码难以阅读;您确定
connection.commit()
绝对不在
for
循环中吗?犯这个错误只需要1个空格。我建议您按照PEP8规则使用4空格。立即尝试可能是
val=(df['AccountName'].values.tolist(),df['ID'].values.tolist())
然后使用
cur.executemany(ss,val)
而不使用
for
循环。这应该更快,但我不确定是否会有进一步的改进。此外,1个缩进空间使该代码难以阅读;您确定
connection.commit()
绝对不在
for
循环中吗?犯这个错误只需要1个空格。我建议你遵守PEP8规则,使用空格键,非常感谢你的帮助。我能把时间缩短到不到一分钟!这太棒了,非常感谢!只是,并不是所有的行都被复制。我有大约21900行,在我的sql表中只看到21300行。你对此有何看法?嗨,A.桑德斯,你能帮我解释一下为什么有些排被移除了吗?谢谢@Laxmanis您可以使用
拒绝的数据
异常
来查找缺少哪些行以及原因。您需要为每个路径指定一个路径。被拒绝的数据将显示哪些行未被复制,异常显示错误是什么。语法是
copytable FROM STDIN GZIP DELIMITER','REJECTED DATA'/path/to/rejections.txt'EXCEPTIONS'/path/to/EXCEPTIONS.txt'。当我使用copy语句时,我总是包含这些选项,但是为了简单起见,我在上面的解释中忽略了它们。嘿,非常感谢你的帮助。我能把时间缩短到不到一分钟!这太棒了,非常感谢!只是,并不是所有的行都被复制。我有大约21900行,在我的sql表中只看到21300行。你对此有何看法?嗨,A.桑德斯,你能帮我解释一下为什么有些排被移除了吗?谢谢@Laxmanis您可以使用
拒绝的数据
异常
来查找缺少哪些行以及原因。您需要为每个路径指定一个路径。被拒绝的数据将显示哪些行未被复制,异常显示错误是什么。语法是
copytable FROM STDIN GZIP DELIMITER','REJECTED DATA'/path/to/rejections.txt'EXCEPTIONS'/path/to/EXCEPTIONS.txt'。在使用copy语句时,我总是包含这些选项,但为了简单起见,我在上面的解释中忽略了它们。