Загрузка больших данных в Vertica - PullRequest
0 голосов
/ 24 января 2019

У меня довольно большой фрейм данных (500k + строк), который я пытаюсь загрузить в Vertica. У меня работает следующий код, но он очень медленный.

#convert df to list format
lists = output_final.values.tolist()

#make insert string
insert_qry = " INSERT INTO SCHEMA.TABLE(DATE,ID, SCORE) VALUES (%s,%s,%s) "

# load into database
for i in range(len(lists)):
    cur.execute(insert_qry, lists[i])
conn_info.commit()

Я видел несколько постов, в которых говорилось об использовании COPY, а не EXECUTE для такой большой нагрузки, но я не нашел хорошего рабочего примера.

1 Ответ

0 голосов
/ 24 января 2019

После долгих проб и ошибок ... Я обнаружил, что у меня работает следующее.

   # insert statements
    copy_str = "COPY SCHEMA.TABLE(DATE,ID, SCORE)FROM STDIN DELIMITER ','"

    # turn the df into a csv-like object
    stream = io.StringIO()
    contact_output_final.to_csv(stream, sep=",",index=False, header=False)

    # reset the position of the stream variable
    stream.seek(0)

    # load to data
    with conn_info.cursor() as cursor:
        cur.copy(copy_str,stream.getvalue())
    conn_info.commit() 
...