使用Python

时间:2018-05-30 19:39:30

标签: python-2.7 vertica

我想将某些数据从Vertica群集(比如说测试群集)复制到另一个Vertica群集(比如QA群集)。手动我可以通过将查询结果转储到CSV文件然后将其导入另一个集群来实现。但是,如何在不使用os或系统命令的情况下在Python脚本上执行此操作。我想纯粹使用一些Python模块或适配器。截至目前我正在使用python-vertica适配器,我能够连接到测试集群并将数据导入python列表,但是我无法使用适配器将其导出到CSV文件(即不使用python csv模块)。另外,如何使用相同的适配器(或python的不同vertica模块)在我的QA群集中导入CSV文件?

1 个答案:

答案 0 :(得分:0)

  1. 您可以使用COPY FROM VERTICA解决简单问题。请阅读here了解详情。
  2. 对于python,您可以在我的模板中使用:
  3. <强>环境

    • 蟒= 2.7.x
    • Vertica的-蟒== 0.7.3
    • Vertica分析型数据库v8.1.1-10

    源代码示例

    #!/usr/bin/env python2
    # coding: UTF-8
    
    import csv
    import cStringIO
    
    # connection info: username, password, etc
    SRC_DB_INFO = {...}
    DST_DB_INFO = {...}
    
    csvbuffer = cStringIO.StringIO()
    csvwriter = csv.writer(csvbuffer, delimiter='|', lineterminator='\n', quoting=csv.QUOTE_MINIMAL)
    
    # establish connection to source database
    connection = vertica_python.connect(**SRC_DB_INFO)
    cursor = connection.cursor()
    cursor.execute('SELECT * FROM A')
    
    # convert data to csv format
    for row in cursor.iterate():
        csvwriter.writerow(row)
    
    # cleanup 
    cursor.close()
    connection.close() 
    
    # establish connection to destination database
    connection = vertica_python.connect(**DST_DB_INFO)
    cursor = connection.cursor()
    
    # copy data
    cursor.copy('COPY B FROM STDIN ABORT ON ERROR', csvbuffer.getvalue())
    connection.commit()
    
    # cleanup 
    cursor.close()
    connection.close()