AzureDataStudioIntro_00

Azure Data Studio – wstęp i pisanie zapytań w TSQL

Azure Data Studio zwane wcześniej SQL Operations Studio jest narzędziem zdobywającym coraz większą popularność.
W zamierzeniu jest ono alternatywą dla popularnego Management Studio, które w niektórych scenariuszach może zostać zastąpione,
a w niektórych (o czym warto pamiętać) niekoniecznie. Postanowiłem zatem stworzyć krótką serię tutoriali na ten temat, która mam nadzieję, że okaże się przydatna nie tylko dla czytelników ale również dla mnie samego. Czas zatem wyposażyć się w kawę oraz dobre chęci i rozpocząć zabawę z nowym oprogramowaniem.

Na wstępie powiedzmy sobie czym jest Azure Data Studio. Jest to oprogramowanie przeznaczone do zarządzanie bazami danych (zarówno tymi chmurowymi jak i on-premise) działające pod Windowsem, Linuxem i MacOS. Ze względu na to, że soft działa na różnych systemach operacyjnych to praca z bazą danych przy jego pomocy powinna być zawsze taka sama co jest jego niebywałą zaletą.  Narzędzie wyposażone zostało w to czego byśmy od oprogramowania tego typu oczekiwali (+ kilka dodatkowych bardzo ciekawych funkcjonalności):

  • podpowiadanie składni (zupełnie nowe i zdecydowanie lepsze od tego co mamy w SSMS),
  • bogatą bibliotekę tzw. Code Snippets czyli szablonów gotowych skryptów,
  • automatyczny formater kodu,
  • integrację z kontrolę wersji GIT,
  • integrację z konsolą (Powershell, Bash etc),
  • możliwość zapisu do pliku płaskiego, json lub Excela,
  • możliwość wizualizacji rezultatu zapytania w postaci różnego rodzaju wykresów,
  • możliwość tworzenia dostosowanych do naszych potrzeb dashboardów,
  • możliwość rozszerzenia podstawowej funkcjonalności o dedykowane dodatki,
  • możliwość tworzenia interaktywnych notebooków przy pomocy opisu Markdown Language i kodu “live” pod postacią m.in. SQL czy też Python.

Powyższa lista pokazuje, że możliwości jest całkiem dużo. Warto również podkreślić, iż powyższe zestawienie nie jest skończone, a cykl wydawniczy Azure Data Studio opiera się o comiesięczne aktualizacje poszerzające funkcjonalności.

Ktoś może spytać, po co nam kolejne narzędzie do zarządzania bazą danych skoro mamy SSMS? Jest to pytanie zasadne i nie tak łatwo na nie odpowiedzieć. Powodów jest co najmniej kilka i z tego miejsca chciałbym odesłać do dokumentacji gdzie znajdziemy przejrzystą tabelkę porównującą oba narzędzia (klik).

Zanim zaczniemy pracę z narzędziem musimy go ściągnąć (link znajduje się tutaj). Instalacja nie powinna nam przysporzyć problemów i sprowadza się do wskazania miejsca instalacji oraz tego czy Azure Data Tools ma być skojarzony z plikami o określonym rozszerzeniu i dodany do zmiennej środowiskowej PATH (oczywiście mówimy o instalacji na Windows). Poniżej zestaw zrzutów ekranowych z procesu instalacji:

This slideshow requires JavaScript.

Po instalacji i uruchomieniu narzędzia naszym oczom powinien ukazać się obraz podobny do poniższego:

Jako pierwszy krok proponuję abyśmy skonfigurowali sobie połączenie, a zrobimy to przełączając się na okno Servers dostępne po kliknięciu Ctrl+G lub po wybraniu pierwszej ikonki na pasku po lewej stronie. Naszym oczom powinien ukazać się panel konfiguracji połączenia:

Mamy tutaj do dyspozycji trzy opcje:

  • New Connection – zdefiniowane połączenie do bazy danych,
  • New Server Group – połączenia możemy grupować i m.in. oznaczać określonym kolorem w celu łatwiejszej nawigacji,
  • Show All Connections – po kliknięciu tej opcji będziemy mogli wyświetlić wszystkie dostępne połączenia.

Wybierzmy drugą opcję w celu stworzenia testowej grupy. Server Group to nic innego jak “kontener” grupujący poszczególne połączenia. Na poniższym zrzucie widać prostą konfigurację mojej grupy (wybrany kolor to fioletowy mimo, że na zrzucie nie jest to aż tak widoczne):

Po zatwierdzeniu OK przechodzimy do zdefiniowania połączenia, zrobimy to klikając pierwszą dostępną ikonkę lub prawym przyciskiem myszy na Server Group i wybierając z menu kontekstowego New Connection. Okno definicji połączenia również nie powinno nikomu sprawić problemów. Całość operacji sprowadza się do podania nazwy serwera, trybu uwierzytelnienia, domyślnej bazy danych i stworzonej przez nas wcześniej Server Group. Jeśli potrzebujemy skonfigurować dodatkowe właściwości połączenia jak np. Timeout to znajdziemy je po kliknięciu Advanced:

Po kliknięciu Connect połączenie powinno zostać zapisane i nawiązane. Powinniśmy zobaczyć coś przypominającego poniższy zrzut ekranu:

Po lewej stronie widzimy eksplorator obiektów, po prawej stronie tzw. Server Dashboard, który oczywiście możemy dostosować do naszych potrzeb pokazując wyniki zapytań i inne wizualizacje według naszych potrzeb. O konfiguracji dashboardów powiemy sobie w kolejnym wpisie, na ten moment spróbujmy wykonać jakieś podstawowe działania na tabelach. Po kliknięciu prawym przyciskiem myszy na wybraną tabelę widzimy, że mamy dostępne kilka opcji:

Na pierwszy rzut oka możemy powiedzieć, że to standardowe opcje, które również możemy znaleźć w Management Studio i jest ich zdecydowanie mniej niż właśnie w rzeczonym SSMS. Pewne różnicę pomiędzy oboma narzędziami są dostrzegalne już w tym miejscu o czym za chwilę się przekonamy. Napiszmy jakieś zapytanie, klikając prawym przyciskiem myszy na na bazę danych i z menu kontekstowego wybierając New Query:

W nowym oknie zapytania możemy formułować nasz TSQL. To co powinno nam się rzucić w oczy to świetnie działający Intellisense zdecydowanie lepszy od tego w SSMS. Podpowiadane są zarówno słowa kluczowe języka, obiekty bazy danych jak i Code Snippets.

Poniżej możecie zobaczyć jak to wygląda w praktyce (dodatkowo zawsze pod prawym przyciskiem myszy mamy do dyspozycji proste formatowanie kodu):

Cały mechanizm zarówno wygląda jak i działa naprawdę dobrze. Powyżej zamiast wyspecyfikowania kolumn wpisałem “*”, w normalnych warunkach wypisałbym wszystkie kolumny co w Azure Data Studio daje mi możliwość podejrzenia ich definicji:

W tym miejscu warto powiedzieć o jeszcze jednej bardzo fajnej rzeczy, a mianowicie gdy klikniemy prawym przyciskiem myszy na tabelę to możemy z menu kontekstowego wybrać opcję Go to Definition, która w nowym oknie wyświetli nam pełną składnię TSQL DDL tworzącą dany obiekt:

Podobną opcją jest Peek Definition, która zamiast wyświetlać definicję w nowym oknie niejako “osadza” ją w naszym zapytaniu abyśmy mogli “na szybko” coś podejrzeć. Gdy definicja obiektu jest nam potrzebna możemy kliknąć na tymczasową lokalizację pliku i sobie go zapisać wybranym miejscu:

Przechodząc dalej zmieniłem nieco zapytanie do dalszych testów i kliknąłem przycisk Explain, który robi nic innego jak to, że wyświetla nam plan zapytania:

Naszym oczom powinien ukazać się estymowany plan wykonania. Dodatkowo na zakładce Top Operators możemy dostrzec,które operatory są postrzegane jako najbardziej kosztowne:

Daje nam to pewien pogląd na sposób wykonania zapytania, ale jeśli chodzi o szczegóły to zdecydowanie lepszym rozwiązaniem jest przeglądanie i analiza planów w SSMS lub w Plan Explorer ponieważ Azure Data Studio pozbawione jest znacznej ilości istotnych szczegółów.

No dobrze przejdźmy teraz do zakładki Result, która przedstawia rzeczywisty wynik wykonania zapytania.  Poniżej możecie zauważyć całkowicie nową formatkę, która generuje się zdecydowanie szybciej od tej w SSMS i moim subiektywnym zdaniem jest nieco bardziej przejrzysta:

W dolnej części okna widzimy okno “Messages” ze wszystkimi wiadomościami związanymi z wykonywanym zapytaniem. Ciekawe rozwiązanie pozwalające unikać znanego z SSMS przełączania się pomiędzy oknami. Ciekawe zastosowania mogą znaleźć przyciski dostępne po prawej stronie okna zapytania:

Pozwalają one na zapis rezultatu jako:

  • csv
  • json
  • xml
  • xlsx

O opcji numer pięć(Chart) powiemy za chwilkę. Dosyć interesująco wyglądają również opcje edycji danych w tabeli. Do edytora dostaniemy się z menu kontekstowego określonej tabeli:

Oprócz standardowego okna edycji z danymi, w którym możemy je zmienić,usuwać lub wstawić, mamy możliwość ograniczenia wyświetlanych wartości przy pomocy panelu SQL co zdecydowanie ułatwia pracę tym, którzy z tego edytora chcą korzystać:

Wróćmy do wspomnianej wcześniej piątej opcji tj. Chart. Jest to opcja pozwalająca tworzyć wizualizacje. Dla testu uruchomimy poniższe zapytanie, które w łatwy sposób może zostać przedstawione w graficzny sposób:

SELECT
    sst.Name AS Territory
    , SUM(sod.OrderQty) AS OrderQty
FROM Sales.SalesOrderDetail AS SOD JOIN Sales.SalesOrderHeader AS soh
    ON soh.SalesOrderID=sod.SalesOrderID
    JOIN Sales.SalesTerritory AS sst
    ON sst.TerritoryID=soh.TerritoryID
GROUP BY sst.Name

Po uruchomieniu zapytania wystarczy kliknąć ikonkę Chart aby przejść do okna definiowania wizualizacji:

W rezultacie możemy wybrać typ wizualizacji i nieco ją dostosować do naszych potrzeb:

Oczywiście możliwości dostosowania są ograniczone i raczej tutaj dostosowujemy zapytanie do wykresu a nie na odwrót, jednakże nie chodzi tutaj o tworzenie wyrafinowanych wizualizacji, a o proste graficzne przedstawienie określonych danych. Później tego typu wykres możemy osadzić na dashboardzie wewnątrz Azure Data Studio ale o tym innym razem.

Ostatnią rzeczą o jakiej chciałbym wspomnieć w ramach niniejszego artykułu są Code Snippets. Wywołanie szablonu zapytania jest bardzo proste i sprowadza się do wpisania tego czego oczekujemy w pole polecenia i wybrania odpowiedniej opcji wyświetlonej przez Intellisense:

Powyższy szablon tworzenia procedury składowanej wygląda w następujący sposób:

-- Create a new stored procedure called 'StoredProcedureName' in schema 'dbo'
-- Drop the stored procedure if it already exists
IF EXISTS (
SELECT *
    FROM INFORMATION_SCHEMA.ROUTINES
WHERE SPECIFIC_SCHEMA = N'dbo'
    AND SPECIFIC_NAME = N'StoredProcedureName'
    AND ROUTINE_TYPE = N'PROCEDURE'
)
DROP PROCEDURE dbo.StoredProcedureName
GO
-- Create the stored procedure in the specified schema
CREATE PROCEDURE dbo.StoredProcedureName
    @param1 /*parameter name*/ int /*datatype_for_param1*/ = 0, /*default_value_for_param1*/
    @param2 /*parameter name*/ int /*datatype_for_param1*/ = 0 /*default_value_for_param2*/
-- add more stored procedure parameters here
AS
    -- body of the stored procedure
    SELECT @param1, @param2
GO
-- example to execute the stored procedure we just created
EXECUTE dbo.StoredProcedureName 1 /*value_for_param1*/, 2 /*value_for_param2*/
GO

Dosyć obszerny i szczegółowy kawałek kodu z obsłużonym DROP-CREATE oraz testowym wywołaniem, naprawdę wygląda to dobrze! Nic nie stoi na przeszkodzie aby dodawać swoje własne szablony, cały proces został fajnie opisany w dokumentacji (klik).

Z całą pewnością to nie wszystkie możliwości narzędzia ale mam nadzieję, że będą dla Was dobrym punktem startowym. Nie jest to jedyny artykuł na temat Azure Data Studio jaki planuje napisać, w najbliższej przyszłości pojawią się artykuły związane z tworzeniem własnych dashboardów z widegtami, Notebooków oraz coś o użytecznych rozszerzeniach dających nam jeszcze kilka dodatkowych możliwości. W międzyczasie pojawią się zapewne jakieś ciekawe scenariusze użycia tak więc Stay tuned!

2 Comments

  1. Niestety ma kilka bugów, czasami trzeba restartować narzędzie, bo nie działa “F5”, albo działa dopiero po jakimś czasie (trzeba czekać około 15-30 sekund). Początkowo także strasznie nie intuicyjne wyszukiwanie po bazie (pewnie przez przyzwyczajenie do SSMS), nie ma możliwości filtrowania bezpośrednio w drzewie, musimy otworzyć kolejną zakładkę z przeglądaniem całego serwera bazodanowego. Mimo wszystko myślę że w dalszej fazie rozwoju narzędzie będzie bardzo dobrą alternatywą dla SSMS.

    • To prawda, sporo jeszcze niedoróbek ale w tym cyklu wydawniczym mam nadzieję, że większość z nich będzie naprawiona. Przyzwyczajenia z SSMS z całą pewnością mogą być “przeszkodą” do tego aby zacząć używać ADS – widzę to sam po sobie:) Co do wyszukiwania obiektów zarówno w SSMS jak i w ADS natywne możliwości są takie sobie dlatego uważam, że dobrym rozwiązaniem jest SQLSearch od Redgate w obu przypadkach. Stabilność znacznie poprawiona w porównaniu do pierwszych wydań, a myślę że będzie jeszcze lepsza.

Leave a Reply