Установка chDB для Python
Требования
Python 3.8+ на macOS и Linux (x86_64 и ARM64)
Установка
Использование
Пример CLI:
Пример Python файла:
Запросы могут возвращать данные в любом поддерживаемом формате, а также в формате Dataframe
и Debug
.
Репозиторий GitHub
Вы можете найти репозиторий GitHub для проекта по адресу chdb-io/chdb.
Ввод данных
Доступны следующие методы для доступа к данным на диске и в оперативной памяти:
Запрос на файл (Parquet, CSV, JSON, Arrow, ORC и 60+)
Вы можете выполнять SQL и возвращать данные в желаемом формате.
Работа с Parquet или CSV
Вывод Pandas DataFrame
Запрос на таблицу (Pandas DataFrame, файл/байты Parquet, байты Arrow)
Запрос на Pandas DataFrame
Запрос с состоянием сессии
Сессии будут хранить состояние запроса. Все состояния DDL и DML будут храниться в каталоге. Путь к каталогу можно передать в качестве аргумента. Если он не передан, будет создан временный каталог.
Если путь не указан, временный каталог будет удален, когда объект сессии будет удален. В противном случае путь будет сохранен.
Обратите внимание, что база данных по умолчанию — _local
, а движок по умолчанию — Memory
, что означает, что все данные будут храниться в памяти. Если вы хотите хранить данные на диске, вам следует создать другую базу данных.
См. также: test_stateful.py.
Запрос с использованием Python DB-API 2.0
Запрос с UDF (Пользовательские Определенные Функции)
Некоторые заметки по декоратору chDB Python UDF (Пользовательская Определенная Функция).
- Функция должна быть без состояния. Поддерживаются только UDF, не UDAF (Пользовательские Определенные Агрегационные Функции).
- Тип возвращаемого значения по умолчанию — String. Если вы хотите изменить тип возвращаемого значения, вы можете передать его в качестве аргумента. Тип возвращаемого значения должен быть одним из следующих.
- Функция должна принимать аргументы типа String. Так как входные данные имеют TabSeparated, все аргументы являются строками.
- Функция будет вызываться для каждой строки входных данных. Пример:
- Функция должна быть чистой Python-функцией. Вы должны импортировать все Python-модули, используемые внутри функции.
- Используемый интерпретатор Python такой же, как и тот, который использовался для выполнения скрипта. Вы можете получить его из
sys.executable
.
См. также: test_udf.py.
Python Table Engine
Запрос на Pandas DataFrame
Запрос на Arrow Table
Запрос на экземпляре класса chdb.PyReader
- Вы должны наследовать класс chdb.PyReader и реализовать метод
read
. - Метод
read
должен:- возвращать список списков, первая размерность — колонка, вторая размерность — строка, порядок колонок должен соответствовать первому аргументу
col_names
методаread
. - возвращать пустой список, когда больше нет данных для чтения.
- быть состоянием, курсор должен обновляться в методе
read
.
- возвращать список списков, первая размерность — колонка, вторая размерность — строка, порядок колонок должен соответствовать первому аргументу
- Можно реализовать необязательный метод
get_schema
, чтобы вернуть схему таблицы. Прототип —def get_schema(self) -> List[Tuple[str, str]]:
, возвращаемое значение — список кортежей, каждый кортеж содержит имя колонки и тип колонки. Тип колонки должен быть одним из следующих.
См. также: test_query_py.py.
Ограничения
- Поддерживаемые типы колонок:
pandas.Series
,pyarrow.array
,chdb.PyReader
- Поддерживаемые типы данных: Int, UInt, Float, String, Date, DateTime, Decimal
- Тип объекта Python будет преобразован в String
- Производительность Pandas DataFrame лучше, чем у Arrow Table и PyReader
Для получения дополнительных примеров смотрите examples и tests.