Vertica Query Result Экспорт и импорт с использованием Python - PullRequest
0 голосов
/ 30 мая 2018

Я хочу скопировать определенные данные из кластера Vertica (скажем, тестового кластера) в другой кластер Vertica (скажем, кластер QA).Вручную я могу сделать это, поместив результат запроса в файл CSV, а затем импортировав его в другой кластер.Но как я могу сделать это на скрипте Python без использования ОС или системных команд.Я хочу сделать это просто с помощью какого-либо модуля или адаптера Python.На данный момент я использую адаптер Python-Vertica, я могу подключиться к кластеру тестирования и получить данные в список Python, но я не могу экспортировать их в файл CSV изначально с помощью адаптера (то есть без использования модуля Python CSV).Кроме того, как я могу импортировать файл CSV в моем кластере QA, используя тот же адаптер (или другой модуль vertica для python)?

1 Ответ

0 голосов
/ 16 июня 2018
  1. Вы можете сделать это с COPY FROM VERTICA для простых задач.Прочитайте здесь для получения дополнительной информации.
  2. Для python вы можете использовать в моем шаблоне:

Environment :

  • python = 2.7.x
  • vertica-python == 0.7.3
  • Vertica Analytics Database 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() 
...