您好,我正在使用以下脚本将数据从mysql迁移到redshift。
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]
发布于 2018-06-30 07:04:49
将数据加载到Amazon Redshift的首选方法是通过COPY
命令。这允许跨所有节点并行加载批量数据。
建议不要使用单独的INSERT
语句来加载数据。(如果从另一个表中选择批量数据,则可以使用INSERT
。)
因此,我建议您修改程序以输出CSV文件(或其他受支持的格式),然后使用COPY命令加载它。以这种方式调试起来也会更干净、更容易。
https://stackoverflow.com/questions/51101082
复制相似问题