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. Для этого необходимо выполнить три важных шага.
-
Например, вот как прочитать все данные из
input.json:duckdb -s "SELECT * FROM read_json_auto('input.json')" -
Для подготовки данных для 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" -
Наконец, оберните
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).
Бонус! 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"
© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/guides/data_viewers/youplot.html