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

时间:2015-07-07 11:10:45

标签: python logging vertica

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

我有两个基本问题:

  1. 如何跟踪成功执行的复制命令?
  2. 如何重新设置连接并从上次失败的命令重新启动?
  3. 我使用的代码是:

    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")
    

1 个答案:

答案 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
相关问题