Operator OUTPUT SQL umożliwia zapis danych pochodzących ze strumienia magistrali wejściowej do wybranej bazy danych SQL. Służy do dodawania nowych rekordów lub modyfikacji istniejących danych w tabelach bazy.
Operator potrafi obsługiwać relacje między tabelami, np. strukturę rodzic–dziecko, co pozwala na wprowadzanie danych do wielu powiązanych tabel w ramach jednej operacji. Realizacja tej relacji opiera się na grupowaniu danych z magistrali według bitów wybranych dla głównej (rodzicielskiej) tabeli, dzięki czemu dane są odpowiednio powiązane i zapisane zgodnie z hierarchią.
Wbudowany mechanizm standaryzacji kluczy głównych umożliwia zapamiętanie powiązań między oryginalnymi kluczami danych, a nowo utworzonymi rekordami. Operator na tej podstawie decyduje, czy wykonać operację INSERT (dodanie nowego rekordu) czy UPDATE (modyfikację istniejącego rekordu). Obsługuje klucze autoinkrementujące generowane przez bazę danych oraz sam potrafi wyliczać nowe wartości kluczy, jeśli jest to wymagane.
Przyporządkowanie bitów magistrali do kolumn tabel odbywa się za pomocą wygodnego interfejsu użytkownika, który pozwala łatwo konfigurować mapowanie danych.
Operator OUTPUT SQL jest kluczowy w integracji danych z relacyjnymi bazami danych i pozwala na kompleksowe zarządzanie zapisem danych w projekcie GRAVITY.
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 do bazy docelowej:
- SKIP → operator pomija rekordy już przetworzone, jeśli wartość klucza głównego tabeli (określonego w diagramie zapisu danych) odpowiada wartości bitu na magistrali danych, używanego jako pole PK w definicji tabeli. Opcja ta działa wyłącznie dla definicji PK, w których stosowana jest standaryzacja.
- PASS → operator przetwarza wszystkie rekordy z magistrali wejściowej. Wybierając opcję PASS, sposób obsługi duplikatów jest określany przez akcje zdefiniowane w sekcji SQL ACTIONS w diagramie zapisu danych do bazy.
- DELETE OLD RECORD → istniejący rekord zostanie usunięty, a w jego miejsce dodany zostanie nowy rekord.
- UPDATE OLD RECORD → istniejący rekord zostanie zaktualizowany i nadpisany danymi nowego rekordu.
DEKLARACJA SCHEMATU DODAWANIA STRUMIENIA DANYCH
Kod dodania strumienia danych powstaje automatycznie, na podstawie skonfigurowanego diagramu (patrz opcja SHOW DIAGRAM TO DEFINE OUTPUT).
Kod generowany automatycznie ma postać XML i może być dodatkowo edytowany ręcznie.
Aby przywrócić kod szablonowy wygenerowany na podstawie diagramu, należy użyć opcji REFRESH INSERT CODE.
STANDARYZACJA KLUCZY GŁÓWNYCH
Technicznie mechanizm ten polega na automatycznym tworzeniu słownika przekodowań (słownika standaryzującego). Słownik ten jest powiązany z tabelą docelową i przechowywany w bazie danych docelowej w dedykowanych tabelach o nazwie ve_[nazwa_tabeli_celu].
Dodatkowo tabela docelowa jest rozszerzana o dwa wymagane pola: gravity_id oraz gravity_process_id, które umożliwiają jednoznaczną identyfikację rekordu po procesie standaryzacji. Mechanizm przekodowania wiąże identyfikator źródła (bit źródła) oraz wartości klucza głównego ze źródła (stare PK) z nowymi identyfikatorami unikalnymi wygenerowanymi w tabeli docelowej.
Aby wyświetlić rekordy zapisane w słownikach standaryzujących, wybierz opcję SHOW CACHE TABLES w ustawieniach operatora.
Zostanie otwarte okno prezentujące wszystkie tabele obsługiwane przez operator OUTPUT SQL. Po wskazaniu wybranej tabeli na górnej liście, w dolnej części okna zostaną wyświetlone odpowiadające jej zestandaryzowane rekordy.
Usuwanie wpisów standaryzujących jest możliwe za pomocą przycisków dostępnych pod listą obsługiwanych tabel w bazie docelowej.
Opcja usuwania wpisów standaryzujących jest najczęściej wykorzystywana podczas konfiguracji oraz testowania działania procesu, podobnie jak operacje na danych zapisanych w tabeli docelowej.
Należy jednak pamiętać, że po usunięciu danych z tabel standaryzujących rekordy, które zostały wcześniej zapisane w bazie docelowej, zostaną zapisane ponownie przy następnym uruchomieniu procesu.
WSKAZANIE TABELI DOCELOWEJ ORAZ ZASADY WPROWADZANIA STRUMIENIA DANYCH
KROK 1
Po prawej stronie okna wyświetlana jest lista wszystkich tabel znajdujących się w bazie docelowej określonej w polu PHYSICAL LINK.
Aby wybrać tabelę docelową, należy przeciągnąć wybraną tabelę z listy i upuścić ją na obszar roboczy.
Jeżeli w bazie danych nie istnieje jeszcze odpowiednia tabela, można ją utworzyć, korzystając z przycisku Create table.
Po wskazaniu tabeli docelowej, możesz przystąpić do deklarowania zasad umieszczenia strumienia danych w tabeli.
KROK 2
Na tym etapie wskaż pola PRIMARY KEY, czyli kolumny jednoznacznie identyfikujące rekord, poprzez zaznaczenie odpowiednich kolumn.
KROK 3
Na tym etapie należy określić, w jaki sposób proces ma obsługiwać pola PRIMARY KEY podczas dodawania rekordu. Odpowiednia opcja jest dostępna w belce nagłówka tabeli.
Wybór właściwego ustawienia zależy od definicji klucza głównego w danej tabeli bazy 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, operator dodaje nowy rekord do bazy. Proces oblicza nową wartość dla ostatniego pola PRIMARY KEY poprzez inkrementację ostatniego zapisu w tabeli docelowej. Bit magistrali, który odpowiada za wartość PK, zostaje uzupełniony wartością PK zapisanego rekordu w bazie danych. Słownik standaryzujący nie jest tworzony.
- Jeśli bit ma wartość większą niż 0, to operator nie wykonuje żadnej akcji lub wykonuje aktualizację (UPDATE) jeśli w sekcji SQL Actions wybrano akcję UPDATE OLD RECORD, albo usuwa rekord, jeśli wybrano akcję DELETE OLD RECORD.
- IDENTITY
- Jeśli bit ma wartość 0 lub mniejszą od 0, operator dodaje nowy rekord do bazy. Baza danych wylicza nową wartość dla pola PK. Bit magistrali odpowiadający za wartość PK zostaje uzupełniony wartością PK zapisanego rekordu w bazie danych. Słownik standaryzujący nie jest tworzony.
- Jeśli bit ma wartość większą niż 0, operator nie wykonuje żadnej operacji lub wykonuje aktualizację, jeśli w obszarze SQL Actions wybrano akcję UPDATE OLD RECORD. Jeśli wybrano opcję DELETE OLD RECORD, operator usuwa rekord.
- STANDARDIZATION OR IDENTIFYING
- Jeśli nie, zostanie dodany nowy rekord do bazy, a wartość PK wygenerowana przez bazę danych oraz wartość PK pochodząca z magistrali danych zostaną zapisane 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 od ustawienia akcji (obszar SQL Actions).
- STANDARDIZATION OR GET MAX
- Jeśli nie, wartość PK zostanie wygenerowana przez system na podstawie wpisów w tabeli docelowej jako MAX+1. Następnie zostanie dodany nowy rekord do bazy danych. Wartość wygenerowanego PK oraz wartość PK pochodząca z magistrali danych zostaną zapisane 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 od ustawienia akcji(obszar SQL Actions).
- STANDARDIZATION
- Jeśli nie, zostanie dodany nowy rekord do bazy danych z wartością bitu PK zgodną z magistralą danych oraz zostanie dodany wpis w tabeli standaryzującej.
- Jeśli tak, kolejny krok systemu zależy od ustawienia akcji (obszar SQL Actions).
W tym trybie nie są wykonywane żadne operacje standaryzujący ani modyfikacje wartości bitu przypisanego do klucza PK. Każdy rekord jest zapisywany w bazie danych dokładnie w takiej samej postaci, w jakiej występował na magistrali danych.
Operator działa w różny sposób w zależności od wartości bitu odpowiadającego polu PK:
Operator działa w różny sposób w zależności od wartości bitu odpowiadającego polu PK:
Wybierz tę akcję, gdy przenosisz dane między bazami danych i chcesz, aby rekordy zapisane już w bazie docelowej nie były zapisywane ponownie. Wartość klucza głównego (PK) z bazy źródłowej nie odpowiada wartości w bazie docelowej, a tabela w bazie docelowej ma włączoną autoinkrementację pola PK.
Jeżeli wybierzesz tę akcję, będziesz musiał wskazać identyfikator źródła, wskazując odpowiedni bit magistrali wejściowej (jeżeli taki bit istnieje) lub wpisując nazwę własną, stosowaną zawsze dla tego źródła danych.
Para: klucz główny oraz identyfikator źródła danych stanowią unikalny wpis standaryzujący.
System sprawdza, czy 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. Wartość klucza głównego tabeli docelowej, odpowiadająca wartości PK danych wejściowych z magistrali danych, zostanie pobrana z tabeli standaryzującej. W bazie danych zostanie zmodyfikowany lub usunięty rekord odpowiadający pobranemu kluczowi.
Wybierz tę akcję, gdy przenosisz dane między bazami danych i zależy Ci, aby rekordy raz zapisane w bazie docelowej nie były zapisywane ponownie.
Wartość klucza głównego z bazy źródłowej nie odpowiada wartości w bazie docelowej, a tabela w bazie docelowej ma ustawioną autoinkrementację pola PK.
Jeżeli wybierzesz tę akcję, będziesz musiał wskazać identyfikator źródła, wskazując odpowiedni bit magistrali wejściowej (jeżeli taki bit istnieje) lub wpisując nazwę własną, stosowaną zawsze dla tego źródła danych.
Para: klucz główny oraz identyfikator źródła danych stanowią unikalny wpis standaryzujący.
System sprawdza, czy wartości klucza głównego pochodzącego z magistrali danych oraz 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. Z tabeli standaryzującej zostanie pobrana wartość klucza głównego tabeli docelowej odpowiadająca wartości PK danych wejściowych z magistrali danych. W bazie danych zostanie zmodyfikowany lub usunięty rekord odpowiadający pobranemu kluczowi.
Wybierz tę akcję, gdy przenosisz dane między bazami danych i zależy Ci, aby rekordy raz zapisane w bazie docelowej nie były zapisywane ponownie.
Wartość klucza głównego z bazy źródłowej nie odpowiada wartości w bazie docelowej, a tabela w bazie docelowej ma ustawioną autoinkrementację pola PK.
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. Z tabeli standaryzującej zostaną pobrane wartości klucza głównego tabeli docelowej odpowiadające wartościom 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 dodaj do tabeli docelowej kolumnę old_pk. Następnie powiąż bit i kolumnę w definicji operatora.KROK 4
Teraz powinieneś wskazać, który bit magistrali wejściowej odpowiada poszczególnym polom (kolumnom) tabeli docelowej. Możesz to zrobić w następujący sposób:
- Wybierz kolumnę magistrali wejściowej (patrz ilustracja poniżej – zaznaczony obszar po lewej stronie).
- System automatycznie wskaże, które pola mogą zostać przypisane, poprzez ich wyszarzenie (patrz ilustracja poniżej – obszar zaznaczony po prawej stronie). Pola te są wybierane na podstawie zgodności typów danych.
- Wybierz pole tabeli, klikając właściwą kolumnę tabeli docelowej.
- Powtórz operację dla kolejnych bitów magistrali wejściowej, aż wszystkie wymagane pola zostaną przypisane
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 zrobić w następnym kroku. Wybierz tabelę relacyjną i umieść ją na obszarze roboczym – akcja jest identyczna jak w przypadku tabeli głównej: należy uchwycić tabelę relacyjną na liście dostępnych tabel (obszar po lewej stronie), a następnie upuścić ją na obszarze roboczym.
Następnie w tabeli nadrzędnej wskaż kolumnę klucza głównego (PK), która będzie użyta do utworzenia relacji z tabelą podrzędną. W tabeli podrzędnej wybierz kolumnę klucza obcego (FK), aby utworzyć relację między tabelami. Po wskazaniu powiązanych kolumn zostanie wyświetlona linia symbolizująca relację. Dla tabeli podrzędnej wykonaj kolejne kroki konfiguracji, rozpoczynając od kroku 2.
Podczas standaryzacji pól uczestniczących w relacji rodzic–dziecko (PK–FK) system automatycznie zapewnia poprawną wartość klucza obcego w tabeli podrzędnej.
Krok ten możesz powtarzać dowolną liczbę razy. Liczba poziomów relacji podrzędnych nie jest ograniczona.
AKCJE DODATKOWE Zastanów się, jakie akcje chcesz wykonać podczas dodawania strumienia danych do bazy. Akcje definiuje się w obszarze SQL Actions w oknie kreatora zapisu danych do tabel.
Na ilustracji powyżej zaznaczona jest opcja NEW, która umożliwia dodanie akcji:
- Typu PRE → wykonywanych przed dodaniem strumienia danych do bazy.
- Typu POST → wykonywanych po dodaniu strumienia danych do bazy.
- Typu IN → wykonywanych w trakcie dodawania, np. określających zachowanie systemu w przypadku wykrycia identycznego rekordu (według PRIMARY KEY) w bazie docelowej.
Poniżej przedstawiono szczegółowy opis działania każdej z 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 rekordów, które były standaryzowane na podstawie wskazanego źródła. Źródło jest identyfikowane na podstawie nazwy (stałej) 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.
Zakres usuwania można określić na dwa sposoby:
- RANGE,
- CONSTANTS.
Ustawienie RANGE umożliwia wskazanie zakresu wartości kolumny PRIMARY KEY. Rekordy mieszczące się w tym zakresie zostaną usunięte.
Opcję tę stosuje się, gdy w jednej tabeli przechowywane są rekordy z różnych źródeł, a przy użyciu jednej kolumny problem unikalnego identyfikatora rozwiązano poprzez wydzielenie odrębnych przestrzeni liczbowych dla poszczególnych źródeł (np. źródło 1: zakres 1–1 000 000, źródło 2: zakres 1 000 001–2 000 000 itd.).
Ustawienie CONSTANTS umożliwia usunięcie tylko rekordu o wartości kolumny PRIMARY KEY wskazanego w polu Constans value.
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 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 DELETE OLD RECORD) wykonywana dla każdego rekordu strumienia danych (w tym sensie jest to akcja typu IN). Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = PASS (patrz opis powyżej), możesz wskazać, w jaki sposób proces GRAVITY ma obsłużyć potencjalny duplikat. Wybór akcji UPDATE OLD RECORD spowoduje, że dotychczasowy rekord zostanie nadpisany nowym rekordem (potencjalnym duplikatem).
Jeżeli ustawiłeś filtr wejściowy ACTION FOR THE SAME RECORD = SKIP, akcja UPDATE OLD RECORD nie zostanie uruchomiona.
SETUP INPUT
Akcja typu IN jest wykonywana wielokrotnie — po przetworzeniu każdego rekordu przez operator OUTPUT SQL. Umożliwia modyfikację w bazie źródłowej rekordu, który został wcześniej pobrany do magistrali przez operator typu INPUT SQL. Tę akcję zastosujesz np. wtedy, gdy chcesz ustawiać flagę informującą o pobraniu rekordu ze źródła.
Zakres konfiguracji:
- INPUT → wskaż operator typu INPUT, z którego dane są pobierane do magistrali,
- INPUT TABLE → wskaż tabelę źródłową, z której operator INPUT pobiera dane,
- COLUMN FOR UPDATE → wskaż kolumnę z tabeli źródłowej, która będzie aktualizowana (np. kolumnę flagi),
- VALUE FOR UPDATE → wskaż wartość, która zostanie zapisana (np. wartość flagi),
- ID SOURCE RECORD → wskaż sposób identyfikacji rekordu (np. do ustawienia flagi); należy wskazać kolumnę unikalną w tabeli źródłowej oraz odpowiadającą jej kolumnę z magistrali wejściowej do operatora OUTPUT SQL.
Operator SETUP INPUT umożliwia bezpośrednią interakcję z danymi źródłowymi. Po pobraniu rekordów możesz oznaczyć je jako przetworzone. Dzięki temu możliwe jest prowadzenie pobrań danych w sposób inkrementacyjny (poprzez ustawienie warunku pobrania na określoną wartość flagi w operatorze INPUT).
USER SQL
Akcja pozwalająca na wykonanie własnego kodu SQL oraz określenie momentu jego wykonania (patrz ilustracja poniżej):
- PRE → przed dodaniem strumienia danych,
- POST → po dodaniu strumienia danych,
- IN → w trakcie dodawania strumienia danych (uwaga: kod jest wówczas wykonywany wielokrotnie, po dodaniu każdego rekordu).
Podczas tworzenia własnego kodu SQL możesz odwoływać się do wartości z magistrali wejściowej operatora OUTPUT SQL. Do wartości kolumn strumienia danych odwołuj się za pomocą znaku „@” oraz nazwy bitu (kolumny) w strumieniu danych wejściowych (np. @id).
ZAPAMIĘTANIE KONFIGURACJI
Po skonfigurowaniu wszystkich akcji oraz zadeklarowaniu tabel wejściowych strumienia danych należy zapisać diagram.
Podczas zapisu GRAVITY automatycznie generuje kod w formacie XML, który można podejrzeć w zakładce INSERT CODE.
Operator OUTPUT SQL jest jednym z najbardziej zaawansowanych komponentów GRAVITY. Aby lepiej zobrazować jego działanie, zalecamy zapoznanie się z przykładami w sekcji PRZYKŁADY ZASTOSOWAŃ.
Dla pełniejszego zrozumienia mechanizmów operatora OUTPUT SQL przygotowano również osobny rozdział ZASTOSOWANIE OPERATORA OUTPUT SQL, zawierający przykłady użycia w różnych scenariuszach.