Q – sql w shell’u

Q jest narzędziem wiersza poleceń umożliwiającym używanie języka SQL do manipulowania danymi w plikach płaskich lub pochodzącymi z przekierowania bez korzystania z bazy danych. Przy czym plik/wejście, musi zawierać dane tabelaryczne czyli kolumny rozdzielone znakiem specjalnym lub o stałej szerokości.

Q wspiera bardzo wiele funkcji dostępnych w języku SQL w tym funkcje agregujące, warunki, złączenia, podzapytania. Program jest również na tyle sprytny, że potrafi sam wykryć czy plik na wejściu posiada nagłówki kolumn.
Co prawa linux posiada całe mnóstwo przeróżnych narzędzi do manipulowania danymi lecz czasem pewne czynności na pewno łatwej wykonać przy użyciu SQL’a i bez korzystania z bazy danych.

Informacje o sposobie instalacji, przypadkach użycia możemy znaleźć na stronie głównej https://harelba.github.io/q/index.html
Standardowo mamy dostępne paczki rpm, deb, tarball. Q jest również dostępny w repozytorium AUR.

Przy pomocy generatora danych stworzyłem prosty plik z dwoma kolumnami rozdzielonymi znakiem |

Plik również zawiera dwa nagłówki: imie oraz pensja

q1

Przy pomocy poniższej komendy wyszykujemy maksymalną wartość kolumny pensja. -H informuje Q, że nasz plik posiada już nagłówki, -d "|" wskazuje na separator kolumn. dataMar-16-2016.csv to nazwa pliku (tabeli), którą przeszukujemy. Znaki ./ są tylko opcjonalne.

q -H -d "|" "select max(pensja) from ./dataMar-16-2016.csv"

q2

Poniższą komendą sumujemy wartość kolumny pensja dla danych w kolumnie imie, które zaczynają się od litery A.

q -H -d "|" "select sum(pensja) from ./dataMar-16-2016.csv where imie like 'A%'"

q3

Funkcje grupujące wraz z warunkiem pensji powyżej 1000 również wykonują się prawidłowo chociaż akurat w tym przypadku każdy wiersz jest unikalny.

q -H -d "|" "select imie, count(*) from ./dataMar-16-2016.csv group by imie having pensja>1000"

q4

Sortowanie i wyświetlenie pięciu pierwszych wierszy

q -H -d "|" "select * from ./dataMar-16-2016.csv where imie like 'A%' order by 1 limit 5"

q5

Na koniec przykład ilustrujący pobranie danych z komendy ps i pogrupowanie po właścicielach procesów.

ps -ef| q -H "SELECT UID,COUNT(*) cnt from - GROUP BY UID ORDER BY cnt DESC LIMIT 3"

q6

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.