Перейти к основному содержанию
В этом руководстве мы начнем работу с вариантом chDB для Python. Сначала мы выполним запрос к JSON‑файлу в S3, затем создадим в chDB таблицу на основе этого JSON‑файла и выполним несколько запросов к данным. Мы также рассмотрим, как получать результаты запросов в разных форматах, включая Apache Arrow и Pandas, и, наконец, узнаем, как выполнять запросы к DataFrame в Pandas.

Настройка

Сначала создадим виртуальное окружение:
А теперь установим chDB. Убедитесь, что у вас установлена версия 2.0.3 или выше:
А теперь установим ipython:
Для выполнения команд в оставшейся части руководства мы будем использовать ipython, который можно запустить командой:
В этом руководстве мы также будем использовать Pandas и Apache Arrow, поэтому давайте установим и эти библиотеки:

Запросы к JSON‑файлу в S3

Теперь посмотрим, как выполнять запросы к JSON‑файлу, который хранится в S3 бакете. датасет YouTube dislikes содержит более 4 миллиардов строк с данными о дизлайках к видео на YouTube по состоянию на 2021 год. Мы будем работать с одним из JSON‑файлов из этого датасета. Импортируйте chdb:
Можно выполнить следующий запрос, чтобы описать структуру одного из JSON‑файлов:
Мы также можем подсчитать количество строк в этом файле:
Этот файл содержит чуть более 300 000 записей. chdb пока не поддерживает передачу параметров запроса, но мы можем извлечь путь и передать его с помощью f-строки.
Это допустимо делать с переменными, определёнными в вашей программе, но не делайте этого с пользовательским вводом, иначе ваш запрос будет уязвим для SQL-инъекции.

Настройка формата вывода

Формат вывода по умолчанию — CSV, но его можно изменить с помощью параметра output_format. chDB поддерживает форматы данных ClickHouse, а также некоторые собственные, включая DataFrame, который возвращает DataFrame в Pandas:
Или, если мы хотим получить таблицу Apache Arrow:

Создание таблицы из JSON‑файла

Теперь рассмотрим, как создать таблицу в chDB. Для этого нам понадобится другой API, поэтому сначала импортируем его:
Далее инициализируем сеанс. Если мы хотим сохранить сеанс на диске, нужно указать имя каталога. Если оставить его пустым, сеанс будет временным: chDB хранит данные во временном каталоге на диске и удаляет их при закрытии сеанса, поэтому данные не сохраняются.
chDB запускает один встроенный движок на процесс, поэтому для каталога базы данных (его пути) действуют несколько правил:
  • Один процесс на путь: каталог данных chDB может быть открыт одновременно только одним процессом операционной системы. Второй процесс, открывающий тот же путь, завершится с ошибкой, пока первый не закроется.
  • Один путь на процесс: пока открыт сеанс или соединение, попытка открыть другой для другого пути завершится с ошибкой; сначала закройте открытые, чтобы избежать ошибки. Несколько сеансов или соединений на одном и том же пути могут сосуществовать.
  • Параллелизм: сеансы или соединения на одном пути могут выполнять запросы параллельно.
  • Сеансы без пути являются общими: без пути сеансы используют общую для всего процесса базу данных :memory: (поэтому пустые сеансы видят таблицы друг друга), а её временный каталог удаляется только после закрытия последнего сеанса.
Затем создадим базу данных:
Теперь мы можем создать таблицу dislikes на основе схемы из JSON‑файла, используя приём CREATE...EMPTY AS. Мы будем использовать настройку schema_inference_make_columns_nullable, чтобы не все типы столбцов становились Nullable.
Затем можно использовать оператор DESCRIBE, чтобы просмотреть схему:
Теперь заполним эту таблицу:
Мы также можем выполнить оба шага сразу, используя конструкцию CREATE...AS. Давайте создадим другую таблицу с помощью этой конструкции:

Выполнение запросов к таблице

Напоследок выполним запрос к таблице:
Допустим, затем мы добавим в DataFrame дополнительный столбец, чтобы вычислить соотношение лайков и дизлайков. Можно написать следующий код:

Выполнение запросов к DataFrame в Pandas

Затем мы можем выполнять запросы к этому DataFrame через chDB:
Вы также можете подробнее прочитать о выполнении запросов к DataFrame в Pandas в руководстве для разработчиков «Выполнение запросов к DataFrame в Pandas».

Следующие шаги

Надеемся, это руководство помогло вам получить общее представление о chDB. Чтобы узнать больше о его использовании, см. следующие руководства для разработчиков: