#python #postgresql #clickhouse
#python #postgresql #clickhouse
Вопрос:
Нам нужно вставить данные из postgres в clickhouse. Одно из полей в postgres имеет тип json. В clickhouse это поле имеет тип Nullable(строка). Для вставки данных мы используем плагин Airflow ClickHouse:
data = postgress_hook.get_records(query)
clickhouse_hook.run(
sql="INSERT INTO " self.clickhouse_tgt_table " values",
parameters=data
)
Но у нас есть ошибка при вставке:
'dict' object has no attribute 'encode'
Какой тип clickhouse мы должны использовать для хранения данных json?
Комментарии:
1. не могли бы вы предоставить подробное описание ошибки (со стеком вызовов )? Вы уверены, что запрос имеет тип str , а не dict ?
2. я думаю, вам следует сериализовать данные json перед вставкой их в clickhouse, и это, вероятно, сработает. вслепую, исходя из вашего сообщения об ошибке, я бы сказал, что вы считываете данные json из postgress в dict, и при попытке записать их в clickhouse ваш код python пытается сериализовать его (закодировать), и он не находит способ сериализовать dict. Но. может быть, я ошибаюсь
Ответ №1:
объект ‘dict’ не имеет атрибута ‘encode’
это сообщение не от сервера CH, а от драйвера python.