您好我是Python的新手。我有超过5000个.csv.gz文件要加载到vertica数据库。服务器在10分钟后断开连接,因此在不重新设置服务器连接的情况下无法复制所有5000个文件。
我有两个基本问题:
我使用的代码是:
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")
答案 0 :(得分:1)
我建议您在加载数据时使用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';
同样很高兴看到rejected_row_count
表中的load_streams
列值,因为它会告诉您拒绝了多少行。
您也可以使用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