Перейти к основному содержимому
Перейти к основному содержимому

Установка 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 (Пользовательская Определенная Функция).

  1. Функция должна быть без состояния. Поддерживаются только UDF, не UDAF (Пользовательские Определенные Агрегационные Функции).
  2. Тип возвращаемого значения по умолчанию — String. Если вы хотите изменить тип возвращаемого значения, вы можете передать его в качестве аргумента. Тип возвращаемого значения должен быть одним из следующих.
  3. Функция должна принимать аргументы типа String. Так как входные данные имеют TabSeparated, все аргументы являются строками.
  4. Функция будет вызываться для каждой строки входных данных. Пример:
  5. Функция должна быть чистой Python-функцией. Вы должны импортировать все Python-модули, используемые внутри функции.
  6. Используемый интерпретатор Python такой же, как и тот, который использовался для выполнения скрипта. Вы можете получить его из sys.executable.

См. также: test_udf.py.

Python Table Engine

Запрос на Pandas DataFrame

Запрос на Arrow Table

Запрос на экземпляре класса chdb.PyReader

  1. Вы должны наследовать класс chdb.PyReader и реализовать метод read.
  2. Метод read должен:
    1. возвращать список списков, первая размерность — колонка, вторая размерность — строка, порядок колонок должен соответствовать первому аргументу col_names метода read.
    2. возвращать пустой список, когда больше нет данных для чтения.
    3. быть состоянием, курсор должен обновляться в методе read.
  3. Можно реализовать необязательный метод get_schema, чтобы вернуть схему таблицы. Прототип — def get_schema(self) -> List[Tuple[str, str]]:, возвращаемое значение — список кортежей, каждый кортеж содержит имя колонки и тип колонки. Тип колонки должен быть одним из следующих.

См. также: test_query_py.py.

Ограничения

  1. Поддерживаемые типы колонок: pandas.Series, pyarrow.array, chdb.PyReader
  2. Поддерживаемые типы данных: Int, UInt, Float, String, Date, DateTime, Decimal
  3. Тип объекта Python будет преобразован в String
  4. Производительность Pandas DataFrame лучше, чем у Arrow Table и PyReader

Для получения дополнительных примеров смотрите examples и tests.