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

CLI-инструменты и AI-агенты

Всё, что вы выучили, нужно для одного: уверенно работать с инструментами данных. У каждого из них есть CLI. И AI-агенты для разработки тоже живут в терминале.

ИнструментКомандаПример
dbtdbtdbt run --select marts
AWSawsaws s3 ls s3://my-bucket/raw/
Google Cloudgcloud, bqbq query "SELECT 1"
Azureazaz storage blob list ...
Snowflakesnowsnow sql -q "SELECT current_role()"
Yandex Cloudycyc compute instance list
DuckDBduckdbduckdb -c "SELECT ..."
PostgreSQLpsqlpsql -h localhost -U analyst analytics
Dockerdockerdocker compose up -d
Airflowairflowairflow dags list
Terraformterraformterraform plan
GitHubghgh pr list

Через CLI работать быстрее, чем через веб-консоль. И команду можно положить в скрипт или в CI.

Окно терминала
duckdb --help # короткая справка, есть почти у всех программ
man ls # полное руководство (macOS, WSL, Linux). Выйти — q
dbt run --help # справка по подкоманде
aws s3 help # у aws справка устроена так

--version показывает версию. С неё начинают, когда что-то не работает: «у меня dbt 1.8, а в инструкции 1.10».

СистемаМенеджер пакетовПример
macOSHomebrewbrew install duckdb
WSL, Ubuntuaptsudo apt install -y postgresql-client
Windowswingetwinget install DuckDB.cli
Python-инструментыpip или uvuv tool install dbt-core

После установки откройте новое окно терминала. Если команда не находится — проверьте PATH (урок Переменные и PATH).

Агенты для разработки работают прямо в терминале:

Агент читает файлы, запускает grep, dbt run, git, docker и сам чинит ошибки. Перед опасной командой он спрашивает разрешение:

Allow command: rm -rf data/raw ?

Чтобы ответить «да» или «нет», нужно понимать, что делает команда. Поэтому CLI нужен и тем, кто работает с агентами. Он нужен им даже больше.

На сервере скрипты запускают по расписанию через cron:

Окно терминала
crontab -e # открыть своё расписание
crontab -l # показать его

Строка в расписании:

0 2 * * * cd ~/project && dbt run >> ~/dbt.log 2>&1
  • 0 2 * * * — минута, час, день месяца, месяц, день недели. Здесь: каждый день в 02:00.
  • >> ~/dbt.log — дописать вывод в лог.
  • 2>&1 — ошибки тоже в лог, а не в никуда.

В компаниях вместо cron обычно берут Airflow или Dagster. Но cron понимать нужно: он есть на любом сервере.

Все задания — в папке ~/cli-practice. Для заданий 2–5 нужен DuckDB. Не ставили? Инструкция в курсе SQL: Установка DuckDB.

Посмотрите справку curl. Найдите в ней, что делает флаг -o.

Проверка: -o, --output <file> — записать вывод в файл, а не на экран.

Решение
Окно терминала
curl --help | grep -- "-o,"

-- говорит grep, что дальше идёт текст для поиска, а не его опции.

Проверьте, что DuckDB установлен. Где лежит программа и какая у неё версия?

Проверка: путь к программе, например /opt/homebrew/bin/duckdb, и версия вида v1.4.3.

Решение
Окно терминала
which duckdb
duckdb --version

Посчитайте заказы марта по статусам SQL-запросом прямо к CSV. Используйте duckdb -c "...". Сравните с ответом из урока grep и конвейеры.

Проверка: completed — 22, cancelled — 4, refunded — 2. Как и через cut | sort | uniq -c.

Решение
Окно терминала
duckdb -c "SELECT status, count(*) AS orders FROM 'data/sales_2024-03.csv' GROUP BY status ORDER BY orders DESC"

DuckDB читает CSV сам: находит заголовок, разделитель и типы столбцов.

Сколько выполненных (completed) заказов за все три месяца и на какую сумму? Прочитайте все файлы продаж одним шаблоном.

Проверка: 58 заказов на 14906.18.

Решение
Окно терминала
duckdb -c "SELECT count(*) AS orders, round(sum(amount), 2) AS revenue FROM 'data/sales_*.csv' WHERE status = 'completed'"

Посчитайте выручку выполненных заказов по странам: соедините продажи с data/customers.csv. Сохраните результат в файл revenue_by_country.csv. Используйте флаг -csv и >.

Проверка: cat revenue_by_country.csv показывает:

country,orders,revenue
Russia,30,8753.52
Serbia,12,2681.76
Kazakhstan,7,1508.94
Armenia,6,1101.52
Georgia,3,860.44
Решение
Окно терминала
duckdb -csv -c "SELECT c.country, count(*) AS orders, round(sum(s.amount), 2) AS revenue FROM 'data/sales_*.csv' s JOIN 'data/customers.csv' c USING (customer_id) WHERE s.status = 'completed' GROUP BY c.country ORDER BY revenue DESC" > revenue_by_country.csv
cat revenue_by_country.csv
rm revenue_by_country.csv

Так собирают маленький отчёт одной командой. Её можно положить в скрипт и запускать через cron.

Дальше: Итоговая практика.