Spec-Zone.ru › DuckDB

CLI-графика с YouPlot

DuckDB можно использовать с инструментами CLI-графики для быстрого вывода данных в стандартный вывод для построения графиков в одной строке.

YouPlot — это инструмент CLI на основе Ruby для создания визуально привлекательных графиков в терминале. Он может принимать данные из других программ, передавая данные из stdin. Он принимает данные, разделенные табуляцией (или разделителем по вашему выбору), и может легко генерировать различные типы графиков, включая столбчатые, линейные, гистограммы и точечные.

С DuckDB вы можете выводить данные в консоль (stdout) с помощью команды TO '/dev/stdout'. Также вы можете выводить данные в формате CSV с помощью WITH (FORMAT 'csv', HEADER).

Установка YouPlot

Инструкции по установке YouPlot можно найти на главной странице репозитория YouPlot. Если вы используете Mac, вы можете использовать:

brew install youplot

Запустите uplot --help для проверки успешной установки!

Передача запросов DuckDB в стандартный вывод

Комбинируя функцию COPY...TO с файлом вывода CSV, данные можно читать из любого формата, поддерживаемого DuckDB, и передавать в YouPlot. Для этого необходимо выполнить три важных шага.

  1. Например, вот как прочитать все данные из input.json:

    duckdb -s "SELECT * FROM read_json_auto('input.json')"
  2. Для подготовки данных для YouPlot напишите простой агрегат:

    duckdb -s "SELECT date, sum(purchases) AS total_purchases FROM read_json_auto('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10"
  3. Наконец, оберните SELECT в функцию COPY ... TO с местоположением вывода /dev/stdout.

    Синтаксис выглядит следующим образом:

    COPY (⟨query⟩) TO '/dev/stdout' WITH (FORMAT 'csv', HEADER);

    Полная команда DuckDB ниже выводит запрос в формате CSV с заголовком:

    duckdb -s "COPY (SELECT date, sum(purchases) AS total_purchases FROM read_json_auto('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT 'csv', HEADER)"

Подключение DuckDB к YouPlot

Наконец, данные можно передать в YouPlot! Предположим, у нас есть файл input.json с датами и количеством покупок, сделанных кем-то в эти даты. Используя запрос выше, мы передадим данные команде uplot для построения графика 10 самых популярных дат покупок.

duckdb -s "COPY (SELECT date, sum(purchases) AS total_purchases FROM read_json_auto('input.json') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT 'csv', HEADER)" \
     | uplot bar -d, -H -t "Top 10 Purchase Dates"

Это говорит uplot построить столбчатый график, использовать разделитель запятыми (-d,), что данные имеют заголовок (-H) и дать графику название (-t).

youplot-top-10

Бонус! stdin + stdout

Возможно, вы передаете данные через jq. Возможно, вы загружаете файл JSON откуда-то. Вы также можете указать DuckDB читать данные из другого процесса, изменив имя файла на /dev/stdin.

Давайте объединим это с быстрым curl из GitHub, чтобы увидеть, чем определённый пользователь занимался в последнее время.

curl -sL "https://api.github.com/users/dacort/events?per_page=100" \
     | duckdb -s "COPY (SELECT type, count(*) AS event_count FROM read_json_auto('/dev/stdin') GROUP BY 1 ORDER BY 2 DESC LIMIT 10) TO '/dev/stdout' WITH (FORMAT 'csv', HEADER)" \
     | uplot bar -d, -H -t "GitHub Events for @dacort"

github-events

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/data_viewers/youplot.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API