Przykład projektu GRAVITY z użyciem operatora OUTPUT SQL.
KONFIGURACJA POŁĄCZENIA Z BAZĄ
WYBÓR I TWORZENIE POŁĄCZENIA DO BAZY DANYCH
Przejdź na pierwszą zakładkę Physical link we właściwościach operatora.
Jeśli masz już utworzone połączenie wybierz je z listy wyboru Connection pola połączenia zostaną wypełnione zgodnie z wybranym połączeniem.
Możesz zmienić parametry połączenia klikając przycisk Edit.
Jeśli nie masz jeszcze zdefiniowanego odpowiedniego połączenia do bazy danych zawsze możesz je dodać wykorzystując przycisk Add.
Po uzupełnieniu danych nowego połączenia możesz je przetestować przyciskiem Test connection i zapisać w systemie przyciskiem Save.
Po zapisaniu połączenie będzie dostępne w systemie pod nazwą jaka została podana w polu Name.
DEKLARACJA AKCJI W PRZYPADKU WYKRYCIA DUPLIKATU
Zdecyduj co system ma zrobić w przypadku wykrycia duplikatu danych w bazie docelowej.
Masz do wyboru dwa możliwe zachowania w przypadku wykrycia duplikatów podczas dodawania danych rekordów w bazie docelowej:
- SKIP → operator pomija rekordy, które zostały już przetworzone jeśli wartość klucza głównego zdefiniowanego na tabeli (w diagramie zapisu danych) odpowiada wartości bitu na magistrali danych, który użyty jest jako wartość pola PK w definicji tabeli. Opcja ma zastosowanie tylko dla definicji PK gdzie używana jest standaryzacja;
- PASS → operator przetwarza wszystkie reokordy magistrali wejściowej. Jeżeli wybierzesz opcję PASS wówczas zachowanie procesu dla przypadków duplikatów zależy od akcji wskazanych w opcji SQL ACTIONS w diagramie zapisu danych do bazy;
- DELETE OLD RECORD → zastany rekord zostanie skasowany, a nowy rekord dodany;
- UPDATE OLD RECORD → zastany rekord zostanie nadpisany nowym rekordem;
DEKLARACJA SCHEMATU DODAWANIA STRUMIENIA DANYCH
Kod dodania strumienia danych powstaje automatycznie, na podstawie skonfigurowanego przez Ciebie diagramu (patrz opcja SHOW DIAGRAM TO DEFINE OUTPUT).
Wygenerowany automatycznie kod ma formę XML i może być przez Ciebie modyfikowany również ręcznie.
Jeżeli chcesz wrócić do kodu szablonowego powstałego na podstawie diagramu wystarczy uruchomić opcję REFRESH INSERT CODE.
STANDARYZACJA KLUCZY GŁÓWNYCH
Jeżeli chcesz zobaczyć jak wyglądają rekordy w słownikach standaryzujących, wybierz opcję SHOW CACHE TABLES na właściwościach operatora.
Zobaczysz okno zawierające wszystkie tabele obsługiwane przez operator OUTPUT DATA. Po wybraniu tabeli na dolnej liście znajdują sie zestandaryzowane rekordy.
Możesz usunąć wpisy standaryzujące używając przycisków z poniższej listy z obsługiwanymi tabelami w bazie docelowej.
WSKAZANIE TABELI DOCELOWEJ ORAZ ZASADY WPROWADZANIA STRUMIENIA DANYCH
KROK 1
Po prawej stronie okna widzisz wszystkie tabele umiejscowione w bazie docelowej wskazanej w PHYSICAL LINK.
Wybór tabeli docelowej odbywa się poprzez uchwycenie właściwej tabeli i upuszczenie na obszarze roboczym.
Jeśli nie masz jeszcze tabeli w bazie danych możesz ją stworzyć klikając przycisk Create table.
Po wskazaniu tabeli docelowej, możesz przystąpić do deklarowania zasad umieszczenia strumienia danych w tabeli.
KROK 2
Wskaż teraz pola PRIMARY KEY (klucz PRIMARY KEY to szereg kolumn jednoznacznie identyfikujących rekord) poprzez zaznaczenie wybranych kolumn.
KROK 3
Powinieneś teraz określić jak proces ma się zachować względem pól PRIMARY KEY podczas dodawania rekordu (opcja dostępna w belce nagłówka tabeli).
Wybór opcji jest uzależniony od definicji klucza głównego tabeli w bazie danych.
Masz do wyboru następujące akcje dla pól PRIMARY KEY:
- NOTHING
- GET MAX
- Jeśli bit ma wartość 0 lub mniejszą od 0 to dodaje nowy rekord do bazy. Proces oblicza nową wartość dla ostatniego pola PRIMARY KEY poprzez inkrementację ostatniego zapisu w tabeli docelowej. Bit magistali, który odpowiada za wartość PK zostanie uzupełniony wartością PK zapisanego do bazy danych. Słownik standaryzujący nie jest budowany.
- jeśli bit ma wartość większą niż 0 to operator nie wykonuje żadnej operacji lub wykonuje update jeśli wybrana jest akcja w (obszar SQL Actions) UPDATE OLD RECORD lub usuwa rekord jeśli wybrana jest opcja DELETE OLD RECORD
- IDENTITY
- Jeśli bit ma wartość 0 lub mniejszą od 0 to dodaje nowy rekord do bazy. Baza danych wylicza nową wartość dla pola PK. Bit magistrali, który odpowiada za wartość PK zostanie uzupełniony wartością PK zapisanego do bazy danych. Słownik standaryzujący nie jest budowany.
- jeśli bit ma wartość większą niż 0 to operator nie wykonuje żadnej operacji lub wykonuje update jeśli wybrana jest akcja w (obszar SQL Actions) UPDATE OLD RECORD lub usuwa rekord jeśli wybrana jest opcja DELETE OLD RECORD
Nie jest wykonana żadna akcja standaryzująca oraz nie następuje zmiana wartości bitu przypisanego do klucza PK. Każdy rekord trafia do bazy danych dokładnie w takiej formie w jakiej był na magistrali.
Operator działa w dwojaki sposób w zależności od wartości bitu odpowiadającemu polu PK
Operator działa w dwojaki sposób w zależności od wartości bitu odpowiadającemu polu PK
- STANDARDIZATION OR IDENTIFYING
- Jeśli nie, zostanie dodany nowy rekord do bazy a wartość PK wygenerowanego przez bazę danych oraz wartość PK pochodzącego z magistrali danych zostanie zapisana jako para zestandaryzowana w tabeli standaryzującej. Wartość wygenerowanego PK zostanie wpisana do bitu przypisanego do pola PK.
- Jeśli tak, kolejny krok systemu zależy ustawienia akcji (obszar SQL Actions).
- STANDARDIZATION OR GET MAX
- Jeśli nie, wartość bitu PK zostanie wygenerowana przez system na podstawie wpisów w tabeli docelowej jako MAX+1. Następnie zostanie zostanie nowy rekord do bazy danych. Wartość wygenerowanego PK oraz wartość PK pochodzącego z magistrali danych zostanie zapisana jako para zestandaryzowana w tabeli standaryzującej. Wartość wygenerowanego PK zostanie wpisana do bitu przypisanego do pola PK.
- Jeśli tak, kolejny krok systemu zależy ustawienia akcji (obszar SQL Actions).
- STANDARDIZATION
- Jeśli nie, zostanie zostanie nowy rekord do bazy danych z wartością bitu PK jak na magistrali danych oraz zostanie dodany wpis w tabeli standaryzującej.
- Jeśli tak, kolejny krok systemu zależy ustawienia akcji (obszar SQL Actions).
Jeżeli wybierzesz tę akcję będziesz musiał wskazać identyfikator źródła, wskazując odpowiedni bit magistrali wejściowej (jeżeli masz taki bit) lub wpisując nazwę własną, stosowaną zawsze dla tego źródła danych.
Para klucz główny i identyfikator źródła danych stanowią unikalny wpis standaryzujący.
System sprawdza czy dane wartości klucza głównego pochodzącego z magistrali danych oraz identyfikatora źródła istnieją już w tabeli standaryzującej.
→ brak akcji, system nie wykonuje żadnej operacji.
→ ustawiona akcja np: UPDATE OLD RECORD lub DELETE OLD RECORD. Zostaną pobrane z tabeli standaryzującej wartości klucza głównego dla tabeli docelowej odpowiadające wartością PK danych wejściowych z magistrali danych. W bazie danych zostanie zmodyfikowany lub usunięty rekord odpowiadający pobranemu kluczowi.
Jeżeli wybierzesz tę akcję będziesz musiał wskazać identyfikator źródła, wskazując odpowiedni bit magistrali wejściowej (jeżeli masz taki bit) lub wpisując nazwę własną, stosowaną zawsze dla tego źródła danych.
Para, klucz główny i identyfikator źródła danych stanowią unikalny wpis standaryzujący.
System sprawdza czy dane wartości klucza głównego pochodzącego z magistrali danych oraz identyfikatora źródła istnieją już w tabeli standaryzującej.
→ brak akcji, system nie wykonuje żadnej operacji.
→ ustawiona akcja np: UPDATE OLD RECORD lub DELETE OLD RECORD. Zostaną pobrane z tabeli standaryzującej wartości klucza głównego dla tabeli docelowej odpowiadające wartością PK danych wejściowych z magistrali danych. W bazie danych zostanie zmodyfikowany lub usunięty rekord odpowiadający pobranemu kluczowi.
System sprawdza czy dane wartości klucza głównego pochodzącego z magistrali danych oraz identyfikatora źródła istnieją już w tabeli standaryzującej.
→ brak akcji, system nie wykonuje żadnej operacji.
→ ustawiona akcja np: UPDATE OLD RECORD lub DELETE OLD RECORD. Zostaną pobrane z tabeli standaryzującej wartości klucza głównego dla tabeli docelowej odpowiadające wartością PK danych wejściowych z magistrali danych. W bazie danych zostanie zmodyfikowany lub usunięty rekord odpowiadający pobranemu kluczowi.
old_pk
na podstawie pola PK, oraz do tabeli docelowej dodaj kolumnę old_pk.
Powiąż ze sobą bit i kolumnę w definicji operatora.KROK 4
Teraz powinieneś wskazać jak bit na magistrali wejściowej przekłada się na poszczególne pola (kolumny) tabeli docelowej. Możesz to uczynić w następujący sposób:
- Wybierz kolumnę magistrali wejściowej (patrz na ilustracji poniżej – zaznaczony obszar po Twojej lewej stronie)
- System automatycznie wskaże jakie pola są możliwe do przyrównania poprzez wyszarzenie (patrz ilustracja poniżej – obszar zaznaczony po Twojej prawej stronie); pola te są wybierane na podstawie zgodności typów danych;
- Wybierz pole tabeli, poprzez klik we właściwą kolumnę tabeli docelowej
- Wybierz następną kolumnę magistrali wejściowej i powtórz czynności
KROK 5
Jeżeli chcesz, aby strumień danych magistrali wejściowej obsługiwał również tabele podrzędne względem tabeli głównej możesz to uczynić w następnym kroku. Wybierz tabelę relacyjną i umieść ją na obszarze roboczym – akcja identyczna jak w przypadku tabeli głównej: należy tabelę relacyjną uchwycić na liście dostępnych tabel (lista w obszarze po lewej stronie) oraz upuścić na obszarze roboczym.
W następnym kroku wskaż w tabeli ‘rodzica’ kolumnę łączącą zwykle kolumnę PK, poprzez kliknięcie myszką. Teraz musisz połączyć to z tabelą podrzędną, poprzez wskazanie kolumny będącej w relacji z wybraną kolumną. Otrzymasz linię symbolizującą relację I wykonać kroki dla tabeli podrzędnej zaczynając do kroku 2.
W przypadku standaryzacji pól pozostających w relacji system automatycznie zadba o prawidłową wartość pola obcego w tabeli podrzędnej. Możesz powtarzać ten krok dowolną liczbę razy, a liczba zagłębień relacji podrzędnych może być dowolna.
AKCJE DODATKOWE Musisz się zastanowić jakie akcje chcesz przeprowadzić w trakcie dodawania strumienia danych do bazy. Akcje dodawane są w obszarze SQL Action na oknie kreatora zapisu danych do tabel.
Na ilustracji powyżej widzisz zaznaczoną opcję NEW, która pozwoli Tobie dodać akcje:
- Typu PRE → akcje przed dodaniem strumienia danych do bazy;
- Typu POST → akcje po dodaniu strumienia danych do bazy;
- Typu IN → akcje w trakcie dodawania np. zachowanie systemu w przypadku rozpoznania identycznego rekordu (według PRIMARY KEY) w bazie docelowej.
Poniżej objaśnimy szczegółowo działanie każdej akcji.
DELETE ALL RECORDS
Przed dodaniem strumienia danych (akcja typu PRE) tabela docelowa zostanie wyczyszczona z wszystkich rekordów.
DELETE ALL RECORDS FOR SOURCE
Przed dodaniem strumienia danych (akcja typu PRE) tabela docelowa zostanie wyczyszczona z wszystkich rekordów, jednak tylko w zakresie tych rekordów, które były standaryzowane na podstawie wskazanego źródła. Źródło jest identyfikowane na podstawie nazwy (constans) lub wskazanej wartości bitu (kolumny) magistrali wejściowej.
DELETE DECLARED SPACE
Przed dodaniem strumienia danych (akcja typu PRE) tabela docelowa zostanie wyczyszczona z rekordów w zadeklarowanej przestrzeni.
Masz dwa sposoby, aby wskazać jaki zakres rekordów ma być skasowany:
- RANGE
- CONSTANS
Nastawa RANGE daje możliwość wskazania przestrzeni w zakresie wartości kolumny PRIMARY KEY. Rekordy w zakresie tej przestrzeni zostaną wykasowane.
Opcję zastosujesz wówczas, gdy w jednej tabeli kolekcjonujesz rekordy z różnych źródeł, a mając do dyspozycji tylko jedną kolumnę, problem unikalnego identyfikatora rozwiązałeś stwarzając przestrzenie liczbowe dla różnych źródeł (np. źródło 1: przestrzeń od 1 -> 1 000 000, źródło 2: przestrzeń -> 1 000 001 – 2 000 000 etc.).
DELETE SPACE MIN MAX PK Przed dodaniem strumienia danych (akcja typu PRE) tabela docelowa zostanie wyczyszczona z rekordów w zadeklarowanej przestrzeni. Przestrzeń do kasowania zostanie wyznaczona w obszarze pomiędzy minimalną i maksymalną wartością klucza PRIMARY KEY (deklarowanie klucza PK patrz opis WSKAZANIE TABELI DOCELOWEJ ORAZ ZASAD DODAWANIA).
DELETE OLD RECORD
Akcja specyficzna (bliźniacza do akcji UPDATE OLD RECORD) przeprowadzana dla każdego rekordu strumienia danych (w tym sensie jest to więc akcja typu IN). Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = PASS (patrz opis powyżej), to teraz możesz wskazać w jaki sposób proces GRAVITY ma się uporać z potencjalnym duplikatem. Jeżeli wybierzesz akcję DELETE OLD RECORD to dotychczasowy rekord będzie kasowany tak, aby nowy rekord (potencjalny duplikat) mógł być dodany bez przeszkód.
Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = SKIP to akcja DELETE OLD RECORD nie zostanie uruchomiona.
UPDATE OLD RECORD
Akcja specyficzna (bliźniacza do akcji UPDATE OLD RECORD) przeprowadzana dla każdego rekordu strumienia danych (w tym sensie jest to więc akcja typu IN). Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = PASS (patrz opis powyżej), to teraz możesz wskazać w jaki sposób proces GRAVITY ma się uporać z potencjalnym duplikatem. Jeżeli wybierzesz akcję UPDATE OLD RECORD to dotychczasowy rekord będzie nadpisywany przez nowy rekord (potencjalny duplikat).
Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = SKIP to akcja UPDATE OLD RECORD nie zostanie uruchomiona.
SETUP INPUT
Akcja typu IN (czyli przeprowadzana wielokrotnie, po każdym przetworzeniu kolejnego rekordu w operatorze OUTPUT SQL) daje możliwość edycji rekordu pobranego do magistrali przez któryś z operatorów typu INPUT SQL. Zastosujesz tego rodzaju akcję jeżeli będziesz chciał np. ustawiać flagi pobrania rekordu ze źródła.
Zakres konfiguracji:
- INPUT → wskaż operator typu INPUT skąd pobierasz dane do magistrali
- INPUT TABLE → wskaż tabelę źródłową z operatora INPUT, którą chcesz edytować
- COLUMN FOR UPDATE → wskaż kolumnę z tabeli źródłowej, która będzie edytowana (np. miejsce ustawienia flagi)
- VALUE FOR UPDATE → wskaż wartość edytowaną (np. flagi)
- ID SOURCE RECORD → wskaż sposób identyfikacji rekordu (np. do ustawienia flagi); wskazujesz kolumnę unikalną oraz kolumnę z magistrali wejściowej do operatora OUTPUT SQL;
Operator SETUP INPUT daje szerokie możliwości interakcji z danymi źródłowymi. Po pobraniu rekordów możesz zaznaczać, które rekordy zostały pobrane. Dzięki temu możesz prowadzić pobrania danych w sposób jednoznacznie inkrementacyjny (ustawiając warunek pobrania do wybranej wartości flagi w operatorze INPUT).
USER SQL
Akcja, która daje Tobie wolną rękę. Możesz stworzyć dowolny kod SQL oraz wskazać moment jego zastosowania (patrz ilustracja poniżej):
- PRE → przed akcją dodania strumienia danych
- POST → po akcji dodania strumienia danych
- IN → w trakcie dodawania strumienia danych-uwaga: kod wówczas jest wywoływany wielokrotnie, po dodaniu każdego rekordu strumienia danych
Podczas pisania własnego kodu SQL możesz korzystać z wartości sygnału na magistrali wejściowej do operatora OUTPUT SQL. Do wartości kolumny strumienia danych odwołujesz się poprzez znak prowadzący ‘@’ oraz nazwę bitu (kolumny) w strumieniu danych wejściowych (np.@id).
ZAPAMIĘTANIE KONFIGURACJI
Jeżeli ustawiłeś wszystkie akcje oraz zadeklarowałeś tabele wejścia strumienia danych, musisz zapamiętać swój diagram.
Podczas zapamiętywania GRAVITY automatycznie generuje kod w formacie XML. Możesz go zobaczyć w zakładce INSERT CODE.
Powyżej opisaliśmy w jaki sposób korzystać z operatora OUTPUT SQL. Zdajemy sobie sprawę, że to jeden z najbardziej złożonych komponentów GRAVITY, dlatego – dla lepszego zobrazowania działania operatora OUTPUT SQL – zachęcamy do zapoznania się z przykładami (patrz rozdział PRZYKŁADY ZASTOSOWAŃ). Operatorowi OUTPUT SQL oprócz zwykłych przykładów kontekstowych poświęciliśmy osobny akapit ZASTOSOWANIE OPERATORA OUTPUT SQL.