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

Установка 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 будут храниться в каталоге. Путь к каталогу можно передать в качестве аргумента. Если он не передан, будет создан временный каталог.

Если путь не указан, временный каталог будет удален, когда объект Session будет удален. В противном случае путь будет сохранен.

Обратите внимание, что база данных по умолчанию - это _local, а движок по умолчанию - Memory, что означает, что все данные будут храниться в памяти. Если вы хотите хранить данные на диске, вам следует создать другую базу данных.

Смотрите также: test_stateful.py.

Запрос с Python DB-API 2.0

Запрос с UDF (Пользовательские Определенные Функции)

Некоторые примечания по декоратору UDF (Пользовательская Определенная Функция) для chDB.

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

Смотрите также: test_udf.py.

Движок таблиц Python

Запрос на Pandas DataFrame

Запрос на Arrow Table

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

  1. Вы должны унаследовать класс chdb.PyReader и реализовать метод read.
  2. Метод read должен:
    1. возвращать список списков, первая размерность - колонка, вторая - строка, порядок колонок должен быть таким же, как и первый аргумент col_names метода read.
    2. возвращать пустой список, когда больше нет данных для чтения.
    3. быть stateful, курсор должен обновляться в методе 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.