gpt4 book ai didi

python - Vertica从本地文件复制,处理连接重置

转载 作者:太空宇宙 更新时间:2023-11-03 17:35:21 24 4
gpt4 key购买 nike

你好,我是Python新手。我有超过 5000 个 .csv.gz 文件要加载到 vertica 数据库上。 10分钟后服务器断开连接,因此如果不重新设置服务器连接,则无法复制所有5000个文件。

我这里有两个基本问题:

  1. 如何跟踪成功执行的复制命令?
  2. 如何重新设置连接并从上次失败的命令重新启动?

我使用的代码是:

import pyodbc
conn = pyodbc.connect("DSN=Vertica_SG;SERVER=54.169.66.95;DATABASE=xyzdwh;PORT=5433;UID=abc123;PWD=abc123")
cursor = conn.cursor()
cursor.execute("Copy schema1.table1 from local 'E:\\folder1\\table1.csv.gz' GZIP with Delimiter ',' direct;")
cursor.execute("Copy schema1..table2 from local 'E:\\folder1\\table2.csv.gz' GZIP with Delimiter ',' direct;")

...
[5000 such execute commands]
...

print("All done")

最佳答案

我建议您在加载数据时使用STREAM NAME选项。

Copy schema1.table1 from local 'E:\folder1\table1.csv.gz' STREAM NAME 'E:\folder1\table1.csv.gz' GZIP with Delimiter ',' direct;

然后对成功的流加载运行查询并将其从列表中删除。

SELECT * FROM v_monitor.load_streams WHERE stream_name = 'My stream name';

此外,很高兴在 load_streams 表中看到 rejected_row_count 列值,因为它会告诉您有多少行被拒绝。

您也可以使用CURRENT_LOAD_SOURCE(),这样您需要向表中添加一个新列。

但这在我从不同位置(并行)加载时使用,并且我可以更好地识别加载期间哪个文件失败。

--create the table 
create table bla(email varchar2(50),source varchar2(200));

--load the table using the CURRENT_LOAD_SOURCE() as a filler for the source column
COPY bla (email, source AS CURRENT_LOAD_SOURCE()) FROM '/home/dbadmin/data*' DELIMITER ',';

select * from bla limit 1;

email | source
----------------------------------------------+----------
Steven.Kastrinakis@advantagepharmacy.com.au | data.csv

关于python - Vertica从本地文件复制,处理连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31266964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com