Я пытаюсь импортировать csv в красное смещение aws (postgresql 8.x).
Поток данных:
mysql -> паркетные файлы на s3 -> csv файлы на s3 -> красное смещение.
Структура стола
MySQL таблица SQL:
create table orderitems
(
id char(36) collate utf8_bin not null
primary key,
store_id char(36) collate utf8_bin not null,
ref_type int not null,
ref_id char(36) collate utf8_bin not null,
store_product_id char(36) collate utf8_bin not null,
product_id char(36) collate utf8_bin not null,
product_name varchar(50) null,
main_image varchar(200) null,
price int not null,
count int not null,
logistics_type int not null,
time_create bigint not null,
time_update bigint not null,
...
);
Я использовал тот же sql для создания таблицы в красном смещении, но при импорте csv произошла ошибка.
Мой код импортирует csv в красное смещение (python)
# parquet is dumpy by sqoop
p2 = 'xxx'
df = pd.read_parquet(path)
with smart_open.smart_open(p2, 'w') as f:
df.to_csv(f, index=False) # python3 default encoding is utf-8
conn = psycopg2.connect(CONN_STRING)
sql="""COPY %s FROM '%s' credentials 'aws_iam_role=%s' region 'cn-north-1'
delimiter ',' FORMAT AS CSV IGNOREHEADER 1 ; commit ;""" % (to_table, p2, AWS_IAM_ROLE)
print(sql)
cur = conn.cursor()
cur.execute(sql)
conn.close()
Ошибка
При проверке STL_LOAD_ERRORS
обнаружена ошибка в столбце product_name
![enter image description here](https://i.stack.imgur.com/xokxW.png)
- row_field_value: ............................................. 215 г / ...
- код ошибки: 1204
- err_reason: длина строки превышает длину DDL
Реальное_значение 伊利畅轻蔓越莓奇亚籽风味发酵乳215g/瓶
(китайский).
Так что это похоже на проблему кодирования. Поскольку mysql - это utf-8, а csv - тоже utf-8, я не знаю, что не так.