Привет, Хабр!
Когда я впервые знакомился с колоночно-ориентированной СУБД ClickHouse, я не смог найти подходящий инструмент (кроме встроенного в веб-интерфейс ClickHouse Cloud) для создания таблиц с нужными столбцами и типами данных на основе CSV файлов или Pandas датафреймов. Ни clickhouse-connect, ни clickhouse-driver не обладали такой функциональностью, как метод to_sql
в SQLAlchemy.
Я хотел загрузить свой любимый набор данных о чемпионатах мира по автогонкам класса Формула-1 в ClickHouse, но вручную создавать 15 таблиц было слишком лениво. Хотелось просто скормить нужные CSV файлы скрипту и на выходе получить БД с нужными таблицами и данными внутри.
Когда я ранее знакомился с PySpark, я заметил, что многие data-профессионалы используют Pandas для определения схемы данных перед загрузкой файлов CSV в PySpark. И я подумал, почему бы не использовать Pandas для определения типов данных по столбцам?
Так я создал этот скрипт, которым хочу поделиться. Я надеюсь, что он поможет вам сэкономить немного времени, а мне даст возможность получить от вас пару фидбеков и идей для улучшения.
Я не уверен в полной совместимости типов данных между Pandas и ClickHouse: быстрый поиск дал противоречивые результаты, поэтому поправьте меня, если найдете какие-либо расхождения.
И будьте осторожны с replace_flag
- если установлено значение True, то скрипт пересоздаст таблицы с тем же именем, если они уже существуют, поэтому вы можете потерять существующие данные в своей базе данных. Чтобы избежать этого, но также избежать дублирования данных, я рекомендую указать несуществующее имя базы данных в качестве database_name
. Если установлено значение False в replace_flag
, данные из ваших файлов CSV будут добавляться в существующие таблицы с тем же именем (конечно же, число столбцов и их типы данных должны совпадать).
Комментарии (3)
iZotova
20.04.2023 21:29Скажите, а для чего вы типы меняете? КХ вроде без проблем принимает, что есть (если конечно не стринг в инт записывать)
Очень много загружаю/выгружаю с помощью связки КХ-пандас, но никогда типы не приводила, сразу датафрейм отправляю как есть????
pankor Автор
20.04.2023 21:29Собственно, я не меняю тип данных - я для создания таблиц беру тип данных из pandas датафрейма.
А каким инструментом для загрузки пользуетесь? В уже готовые таблицы загружаете или ваш тул создает их при этом?
sneg2015
Тоже думаю что подключить к power bi. Нужна какая-то облачная база данных, чтобы туда скриптами закидывать вьюхи из csv файлов, а оттуда автоматически тянуть их в power bi service на дашборды. Сейчас выбор между posgress и clickhouse, но думал поднять ее на облачном сервере. Удачно прочитал Вашу статью возможно использую такой вариант.