Миграция красного смещения с использованием Python - PullRequest
0 голосов
/ 29 июня 2018

Привет! Я использую следующий скрипт для переноса данных из mysql в красное смещение.

mysql_table_name = 'clabDevelopment.KPI_kpireport'
mysql_cur = mysql_conn.cursor()
mysql_cur.execute('select * from %s where Date = "2018-01-01";' % mysql_table_name  )
description = mysql_cur.description
rows = mysql_cur.fetchall()

# Insert data into Redshift
redshift_table_name = 'kpi_kpireport'
redshift_cur = redshift_conn.cursor()
insert_template = 'insert into %s (%s) values %s;'
column_names = ', '.join([x[0] for x in description])
values = ', '.join(['(' + ','.join(map(str, x)) + ')' for x in rows])

redshift_cur.execute(insert_template % (redshift_table_name, column_names, values))

У меня проблема с почтой, когда значения пустые:

values (241325,2018-01-01,None,,CHG,USA,N.

как между None и CHG есть ",,", и это приводит к сбою программы.

вот ошибка:

Traceback (most recent call last):
  File "C:\Users\trackstarz\migration.py", line 20, in <module>
    redshift_cur.execute(insert_template % (redshift_table_name, column_names, values))
psycopg2.ProgrammingError: syntax error at or near ","
LINE 1: ...re_Costs, FBA_Fee) values (241325,2018-01-01,None,,CHG,USA,N...
                                                             ^

[Finished in 2.0s]

1 Ответ

0 голосов
/ 30 июня 2018

Предпочтительным способом загрузки данных в Amazon Redshift является команда COPY. Это позволяет загружать объемные данные параллельно на всех узлах.

Рекомендуется , а не , чтобы использовать отдельные операторы INSERT для загрузки данных. (INSERT хорошо, если вы выбираете объемные данные из другой таблицы.)

Поэтому я рекомендую изменить вашу программу для вывода файла CSV (или другого поддерживаемого формата), а затем загрузить его с помощью команды COPY. Так будет проще и легче отлаживать.

...