Копирование данных с красным смещением S3 на AWS с использованием python и psycopg2

У меня возникают проблемы с выполнением команды копирования для загрузки данных из S3 в Redshift из Amazon из python.
У меня есть следующая команда копирования:

copy moves from 's3://<my_bucket_name>/moves_data/2013-03-24/18/moves' credentials 'aws_access_key_id=<key_id>;aws_secret_access_key=<key_secret>' removequotes delimiter ','; 

Когда я выполняю эту команду с помощью SQL Workbench / j, все работает так, как ожидалось, однако, когда я пытаюсь выполнить это с помощью python и psycopg2, команда проходит ОК, но данные не загружаются и не возникает ошибка.
попробовал следующие два варианта (предположим, что соединение psycopg2 в порядке, потому что оно есть):

  • Операция Redshift COPY не работает в SQLAlchemy
  • Использование psycopg2 с Lambda для обновления Redshift (Python)
  • Использование нескольких баз данных Django с RedShift
  •  cursor.execute(copy_command) cursor.copy_expert(copy_command, sys.stdout) 

    оба передаются без предупреждения, но данные не загружаются

    Идеи?

    благодаря

  • Невозможно установить psycopg2 с помощью pip в virtualenv на Mac OS X 10.7
  • Psycopg2 на эластичном бобовом стебле Amazon
  • Ошибка gcc-4.2 при использовании pip в virtualenv на OSX 10.7
  • psycopg2 утечка памяти после большого запроса
  • Невозможно установить psycopg2 на OSX 10.6.7 с помощью XCode4
  • Создание базы данных postgresql с использованием psycopg2
  • 3 Solutions collect form web for “Копирование данных с красным смещением S3 на AWS с использованием python и psycopg2”

    Я использовал эту точную настройку (psycopg2 + redshift + COPY) успешно. Вы сделали это позже? SQL Workbench по умолчанию использует автоматическую фиксацию, а psycopg2 по умолчанию открывает транзакцию, поэтому данные не будут отображаться до тех пор, пока вы не назовете commit () в своем соединении.

    Полный рабочий процесс:

     conn = psycopg2.connect(...) cur = conn.cursor() cur.execute("COPY...") conn.commit() 

    Я не считаю, что copy_expert () или любая из команд cursor.copy_ * работают с Redshift.

    Во-первых, убедитесь, что транзакция выполнена.

     conn = psycopg2.connect(conn_string) cur = conn.cursor() cur.execute(copy_cmd_str) conn.commit() 

    вы также можете обеспечить транзакционную фиксацию следующим образом (обеспечение освобождения ресурсов),

     with psycopg2.connect(conn_string) as conn: with conn.cursor() as curs: curs.execute(copy_cmd_str) 

    Когда соединение выходит из блока «с», если исключение не было создано блоком, транзакция совершается . В случае исключения транзакция откатывается.

    Во-вторых, даже выполнение фиксации не помогает, когда загружаемые данные занимают много времени и превышают connect_timeout (и не могут фиксировать). Поэтому, когда явная фиксация не помогает, попробуйте увеличить время ожидания.

    Синтаксис должен быть похож на инструкции DDL

     # Create table c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') 
    Python - лучший язык программирования в мире.