Як використовувати Shell (Shi) для аналізу великих даних: покроковий туторіал 2026

Стаття розповідає про застосування інструменту shi для ефективного аналізу та обробки великих масивів даних




Аналіз великих даних часто асоціюється зі складними хмарними платформами та дорогим програмним забезпеченням, але насправді потужний інструментарій вже вбудований у ваш термінал. Цей туторіал покаже, як використовувати Shell-скрипти та утиліту shi (Streaming Hash Interface) разом із стандартними Unix-інструментами для обробки датасетів розміром від кількох гігабайт до терабайтів. Ви витратите приблизно 60–90 хвилин на освоєння матеріалу. Для старту потрібен Linux або macOS (або WSL2 на Windows), базові знання командного рядка та тестовий датасет у форматі CSV або JSON.

🛠️ Що знадобиться

  • GNU Bash 5.x або Zsh — основне середовище виконання команд; вже встановлений на більшості систем, безкоштовний
  • shi (Streaming Hash Interface) — CLI-утиліта для стрімінгової обробки та агрегації великих файлів без завантаження в оперативну пам’ять; безкоштовна, встановлюється через pip або cargo
  • Miller (mlr) — потужний інструмент для роботи з CSV, JSON, TSV у стилі sed/awk; безкоштовний, встановлюється через apt/brew
  • GNU Parallel — для паралельної обробки файлів у кілька потоків; безкоштовний
  • DuckDB CLI — вбудована аналітична база даних для SQL-запитів прямо до файлів; безкоштовна, версія 1.x станом на 2026

📋 Покрокова інструкція

Крок 1: Встановлення інструментів та підготовка середовища

Відкрийте термінал і виконайте наступні команди для встановлення всього необхідного. На Ubuntu/Debian введіть: sudo apt update && sudo apt install miller parallel -y, потім встановіть DuckDB: wget https://github.com/duckdb/duckdb/releases/latest/download/duckdb_cli-linux-amd64.zip && unzip duckdb_cli-linux-amd64.zip && sudo mv duckdb /usr/local/bin/. Далі встановіть shi через pip: pip install shi-cli або через cargo: cargo install shi. Перевірте встановлення командою shi --version — у відповідь має з’явитися щось на кшталт shi 0.9.4. На macOS замість apt використовуйте brew install miller parallel.

Крок 2: Підготовка та первинна розвідка датасету

Припустимо, у вас є файл sales_data.csv розміром 5 ГБ із транзакціями. Спочатку оцініть структуру без повного завантаження файлу: виконайте head -n 5 sales_data.csv, щоб побачити заголовки та перші рядки. Потім дізнайтесь кількість рядків без читання всього файлу: wc -l sales_data.csv. Тепер запустіть shi для базової статистики: shi stats --input sales_data.csv --cols "amount,date,category" --output stats_report.json — ця команда пройде файл одним потоком і поверне мін/макс/середнє для числових колонок та унікальні значення для категоріальних. Важливо: shi обробляє дані чанками по 64 МБ за замовчуванням, тому навіть 100 ГБ файл не переповнить RAM.

Крок 3: Фільтрація та трансформація даних через shi pipeline

Тепер побудуємо пайплайн для реальної обробки. Виконайте команду: shi filter --input sales_data.csv --where "amount > 1000 AND category == 'Electronics'" | shi transform --add-col "tax=amount*0.2" | shi output --format csv > filtered_output.csv. Тут ми ланцюжком: фільтруємо рядки де сума більша 1000 і категорія Electronics, додаємо нову колонку з розрахунком податку, і зберігаємо результат. Підводний камінь: якщо у вашому CSV є поля з комами всередині лапок, додайте прапор --strict-quotes, інакше парсер розіб’є рядок неправильно. Перевірте результат: wc -l filtered_output.csv && head -3 filtered_output.csv.

Крок 4: Паралельна обробка кількох файлів та агрегація

Якщо ваші дані розбиті на багато файлів (наприклад, logs_2025_01.csv, logs_2025_02.csv тощо), використайте GNU Parallel разом із shi. Виконайте: ls data/*.csv | parallel -j 4 "shi stats --input {} --cols 'revenue' --output {.}_stats.json" — це запустить 4 паралельні процеси shi, кожен обробляє свій файл. Після завершення об’єднайте результати: shi merge --inputs "*_stats.json" --aggregate sum,mean --output final_report.json. Час обробки 20 файлів по 2 ГБ скоротиться приблизно в 3–4 рази порівняно з послідовною обробкою. Слідкуйте за використанням CPU командою htop в окремій вкладці — ідеально, якщо всі 4 ядра завантажені на 80–90%.

Крок 5: SQL-аналіз результатів через DuckDB та генерація звіту

Фінальний крок — глибокий аналіз отриманих даних за допомогою DuckDB прямо з командного рядка. Запустіть: duckdb -c "SELECT category, SUM(amount) as total, COUNT(*) as transactions, AVG(amount) as avg_deal FROM 'filtered_output.csv' GROUP BY category ORDER BY total DESC LIMIT 10" — DuckDB прочитає CSV без імпорту і поверне результат за секунди навіть для файлів у кілька гігабайт. Збережіть звіт: duckdb -c "COPY (SELECT category, SUM(amount) as total FROM 'filtered_output.csv' GROUP BY category) TO 'summary_report.csv' (HEADER, DELIMITER ',')". У підсумку ви маєте: очищений датасет filtered_output.csv, JSON зі статистикою final_report.json та зведений CSV-звіт summary_report.csv — готові для імпорту в Tableau, Power BI або Python pandas.

⚠️ Типові помилки та як їх уникнути

  • Кодування символів (encoding mismatch) — якщо файл у Windows-1251 або Latin-1, shi видасть помилку або некоректні результати; перед обробкою конвертуйте: iconv -f windows-1251 -t utf-8 input.csv > input_utf8.csv
  • Відсутні заголовки або змішані типи колонок — shi намагається автоматично визначити типи, але якщо колонка “amount” містить рядок “N/A”, вся колонка стане текстовою; додайте прапор --null-values "N/A,NULL,na", щоб shi коректно їх ігнорував
  • Переповнення диску при паралельній обробці — 4 паралельні процеси можуть генерувати тимчасові файли і забити диск; перевіряйте вільне місце командою df -h /tmp та встановлюйте --temp-dir /path/to/fast/ssd для shi
  • Неправильний роздільник у CSV — деякі файли використовують крапку з комою замість коми; вкажіть явно: shi stats --input data.csv --delimiter ";"

💡 Поради для кращого результату

По-перше, завжди робіть попередній sampling перед повною обробкою — команда shuf -n 100000 big_file.csv > sample.csv витягне 100 тисяч випадкових рядків, на яких ви протестуєте весь пайплайн за секунди замість годин. По-друге, якщо ваш файл регулярно оновлюється, додайте shi у cron-завдання: 0 3 * * * /usr/local/bin/shi stats --input /data/daily.csv --output /reports/$(date +\%Y\%m\%d).json — звіти генеруватимуться автоматично щоночі о 3:00. По-третє, для максимальної швидкості читання великих файлів попередньо стисніть їх у gzip — shi вміє читати .csv.gz напряму без розпакування: shi filter --input data.csv.gz --where "year == 2025", а розмір файлу зменшиться в 5–10 разів. По-четверте, використовуйте shi schema --input file.csv як перший крок завжди — він поверне автоматично визначені типи колонок, і ви відразу побачите потенційні проблеми ще до запуску важкої обробки.

❓ Часті запитання (FAQ)

1. Чи може shi обробляти JSON та Parquet, а не тільки CSV?
Так, shi підтримує CSV, TSV, JSON, JSONL та Parquet з версії 0.8. Для JSON вкажіть: shi stats --input data.jsonl --format jsonl --cols "price,qty". Parquet обробляється особливо швидко завдяки колонковому формату зберігання.

2. Скільки оперативної пам’яті потрібно для обробки файлу 50 ГБ?
Завдяки стрімінговій архітектурі shi утримує в пам’яті лише поточний чанк (за замовчуванням 64 МБ). На практиці весь процес займає 200–400 МБ RAM незалежно від розміру файлу. Можна зменшити чанк до 16 МБ прапором --chunk-size 16M на слабких машинах.

3. Як обробити файл, який постійно дозаписується (live log)?
Використовуйте режим tail: tail -f /var/log/app.log | shi filter --stream --where "level == 'ERROR'" --output errors.jsonl. Shi у режимі –stream читає stdin безперервно і пише результат у реальному часі.

4. Чи можна використовувати shi на Windows без WSL?
Нативна Windows-версія shi поки що в бета-статусі і має обмежену функціональність. Рекомендований шлях — WSL2 з Ubuntu 24.04, де все працює ідентично Linux. Встановлення WSL2 займає 10 хвилин: wsl --install у PowerShell від адміністратора.

5. Як порівняти shi з Apache Spark для великих даних?
Shi ідеальний для одного сервера та файлів до ~500 ГБ — він швидший у старті, не потребує кластера і простіший в налаштуванні. Spark виграє при справді розподілених обчисленнях на кластері з петабайтними датасетами. Для більшості реальних задач малого та середнього бізнесу shi + DuckDB закривають 90% потреб без жодної хмарної інфраструктури.

🏁 Підсумок

Ви навчилися будувати повний пайплайн аналізу великих даних: від встановлення інструментів та первинної розвідки датасету до паралельної обробки кількох файлів і генерації фінального звіту через SQL-запити в DuckDB. Результатом є відтворюваний, швидкий і малопам’яткий процес, який працює на звичайному ноутбуці навіть з файлами у десятки гігабайт.

Почніть прямо зараз з найпростішого: візьміть будь-який CSV-файл, що є на вашому комп’ютері, встановіть shi командою pip install shi-cli і запустіть shi schema --input ваш_файл.csv — вже через 30 секунд ви побачите структуру своїх даних і зрозумієте потенціал інструменту.

РОЗСИЛКА

📬 Щотижневий AI-дайджест

Найкращі статті про ШІ та автоматизацію — без спаму, лише суть

Без спаму · Відписатись будь-коли

Telegram