Przeskocz do zawartości głównej Przejdź do treści uzupełniającej

Dodawanie transformacji SQL

Do zadań transformacji można dołączać tabele oparte na języku SQL. Transformacja SQL umożliwia wprowadzenie zapytania SQL SELECT do potoku w celu zdefiniowania złożonych lub prostych transformacji. Możesz także używać makr, aby dostosować zapytanie do wykonania, jeśli wykonywane jest ładowanie początkowe lub ładowanie przyrostowe.

Aby uzyskać więcej informacji na temat tworzenia zadania transformacji, zobacz Przekształcanie danych.

Dodawanie transformacji SQL

Aby dodać transformację SQL w zadaniu transformacji danych:

  1. W sekcji Przekształcenie wybierz zestawy danych, które mają zostać włączone do zapytania, i kliknij Dodaj transformację SQL.

    Zostanie wyświetlony komunikat Dodaj transformację SQL, w którym można wprowadzić ustawienia transformacji.

  2. W polu Nazwa wpisz nazwę docelowego zestawu danych.

    W polu Opis możesz dodać dłuższy opis.

  3. W sekcji Materializacja wybierz, czy przekształcony wynik powinien zostać zmaterializowany, czy nie. Możesz zdecydować się na dziedziczenie tego ustawienia z ustawień zadania danych.

    • Ustawienie Wł. spowoduje utworzenie tabel i obsługę powiązanego przetwarzania ELT.

    • Opcja Wył. spowoduje utworzenie widoków, które dokonują transformacji na bieżąco.

  4. Ładowanie przyrostowe pozwala dostosować zapytanie do przyrostowego ładowania danych przez zastosowanie filtrów lub innych warunków w celu zmniejszenia zestawu danych przetwarzanych za pomocą makr. Ładowanie przyrostowe jest dostępne tylko wtedy, gdy dane są materializowane w postaci tabel.

    • Kiedy ładowanie przyrostowe jest włączone

      Pierwsze wykonanie zadania spowoduje wstępne załadowanie, wstawiając wszystkie wyniki zapytania do tabeli docelowej. Kolejne wykonania zadania będą dokonywać ładowań przyrostowych z wykorzystaniem filtrów lub określonych warunków zdefiniowanych dla przetwarzania przyrostowego. Podczas ładowania przyrostowego zadanie będzie przetwarzać dane jedynie w formie aktualizacji lub wstawiania, a usuwanie nie jest zarządzane.

    • Kiedy ładowanie przyrostowe jest wyłączone

      Pierwsze wykonanie zadania spowoduje wstępne załadowanie, wstawiając wszystkie wyniki zapytania do tabeli docelowej. Kolejne wykonania będą przetwarzać wszystkie wyniki zapytania, porównując je z tabelą docelową i przetwarzając rekordy, które są nowe, zmienione lub usunięte.

    InformacjaJeśli zapytanie wybierze wszystkie rekordy, które powinny istnieć w obiekcie docelowym, wyłącz opcję Ładowanie przyrostowe. Niewybrane rekordy zostaną usunięte w miejscu docelowym.
  5. Kliknij przycisk Dodaj, gdy wszystko będzie gotowe do utworzenia transformacji SQL.

    Wyświetli się okno Edytuj transformację SQL.

  6. W polu Zapytanie SELECT wpisz zapytanie, które zwróci tabelę opartą na SQL.

    Zapytanie może odczytywać tylko wybrane źródłowe zestawy danych, ale możesz dodać więcej źródłowych zestawów danych za pomocą opcji Dodaj.

    Możesz wybierać opcje Zestawy danych i Kolumny.

  7. Jeśli używane jest ładowanie przyrostowe, możesz użyć makr, aby dostosować zapytanie do wykonania, jeśli wykonywane jest ładowanie początkowe lub ładowanie przyrostowe.

    Więcej informacji zawiera temat Używanie makr w celu dostosowania zapytania do typu ładowania.

  8. Kliknij Wyodrębnij parametry, aby przeanalizować parametry zapytania SELECT.

    Parametry należy zamapować na obiekty źródłowe lub docelowe. Możesz mapować do następujących obiektów

    • Struktury historii typu 2 (_history)

    • Obecne struktury

    • Obiekty docelowe

      Obiekty docelowe można mapować tylko wtedy, gdy parametr jest zdefiniowany w makrze przyrostowym.

    WskazówkaMożesz zastąpić parametr referencją, aby uzyskać łatwiejsze do odczytania zapytanie. Zmień wartość w polu Parametr, a zmieni się także odwołanie w polu Zapytanie SELECT.
  9. Kliknij Opisz tabelę, aby uzyskać podgląd metadanych wyjściowych zapytania.

    Możesz także wyświetlić podgląd wyników, korzystając z próbki danych.

    Podgląd danych

  10. Tabela musi mieć klucz główny.

    Możesz także edytować ustawienia metadanych.

    • Ustaw klucze główne w kolumnie Klucz.

    • Określ, czy kolumna ma dopuszczać wartość null w kolumnie Nullowalne.

    • Wybierz kolumnę i kliknij Edytuj, aby ustawić nazwę kolumny, klucz, dopuszczalność wartość null i typ danych.

  11. Jeśli wyniki zapytania będą zadowalające, kliknij OK. Zestaw danych jest teraz dodany do listy celów i możesz wyświetlić jego podgląd.

Podgląd danych

Możesz wyświetlić podgląd wyników, korzystając z próbki danych.

InformacjaPodgląd danych musi być włączony na poziomie dzierżawy w funkcji Konsola zarządzania Qlik. Opcję Wyświetlanie danych w Integracja danych można znaleźć w Ustawieniach, w obszarze Sterowanie funkcją.

Aby móc przeglądać dane, musisz mieć przypisane następujące role:

  • Może przeglądać dane w przestrzeni, w której znajduje się połączenie danych.

  • Może wyświetlać w przestrzeni, w której znajduje się projekt danych.

Aby wyświetlić podgląd wyników:

  • Kliknij Wyświetl dane.

Wyświetlane są wyniki wykorzystujące próbkę danych. Ustawienie Liczba wierszy umożliwia określenie, ile wierszy danych należy uwzględnić w próbce.

Dane przykładowe można filtrować na dwa sposoby:

  • Użyj filtr do filtrowania pobieranych danych przykładowych.

    Jeżeli na przykład użyjesz filtru ${OrderYear}>2023, a Liczba wierszy będzie ustawiona na 10, otrzymasz próbkę 10 zamówień z 2024 roku.

  • Filtruj dane przykładowe według określonej kolumny.

    Wpłynie to tylko na istniejące dane przykładowe. Jeżeli użyto filtr do uwzględnienia tylko zamówień z roku 2024, a filtr kolumny ustawiono tak, by wyświetlać zamówienia z 2022 roku, wynikiem będzie pusta próbka.

Próbkę danych można sortować według określonej kolumny. Sortowanie wpłynie tylko na istniejące dane przykładowe. Jeżeli użyto filtr do uwzględniania tylko zamówień z 2024 roku i odwrócono kolejność sortowania, dane przykładowe będą nadal zawierać tylko zamówienia z 2024 roku.

Używanie makr w celu dostosowania zapytania do typu ładowania

Jeśli używane jest ładowanie przyrostowe, możesz użyć makr, aby dostosować zapytanie do wykonania, jeśli wykonywane jest ładowanie początkowe lub ładowanie przyrostowe.

Wybierz makro i dodaj zapytanie w odpowiedniej klauzuli.

  • Q_RUN_INCREMENTALdodaje klauzulę, w której można umieścić zapytanie wykonywane tylko wtedy, gdy będzie wykonywane ładowanie przyrostowe.

  • Q_RUN_INITIAL_LOAD dodaje klauzulę, w której można umieścić zapytanie wykonywane dopiero po wykonaniu początkowego ładowania.

Nie musisz podawać pełnego zapytania w każdym makrze. Możesz dostosować lub dodać kod w zależności od zastosowania.

Zastosowanie: filtr przyrostowy wykorzystujący zakres dat:

W tym przypadku zestaw danych dotyczących zamówień trzeba przekształcić za pomocą niestandardowego kodu SQL. Ponieważ jest to duży zestaw danych, należy uwzględnić filtrowanie przyrostowe, aby mieć pewność, że ładowanie przyrostowe będzie obejmować tylko zamówienia z ostatnich 12 godzin.

To jest zapytanie podstawowe:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

To jest filtr do zastosowania podczas przebiegu przyrostowego, w którym uwzględniane są tylko zamówienia dodane w ciągu ostatnich 12 godzin:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
WskazówkaW przypadku implementacji tabeli opartej na języku SQL zaleca się zastąpienie nazw tabel notacją ${TABLE}. Zapobiega to kodowaniu na stałe nazw baz danych i schematów, które mogą się zmieniać w różnych środowiskach, na przykład podczas przechodzenia z etapu rozwoju do produkcji.

To jest pełne zapytanie z użyciem makra filtrującego i nazwami tabel zastąpionymi notacją ${TABLE}:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

Wynikiem tego jest początkowe zapytanie ładowania:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

I zapytanie ładowania przyrostowego:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

Zastosowanie: filtr przyrostowy przy użyciu danych w miejscu docelowym:

W tym przypadku zestaw danych dotyczących zamówień trzeba przekształcić za pomocą niestandardowego kodu SQL. Ponieważ zamówienia to duży zestaw danych, należy uwzględnić filtrowanie przyrostowe, aby mieć pewność, że ładowanie przyrostowe będzie obejmować rekordy szczegółów zamówień, które są nowsze niż dane w tabeli docelowej. Chcesz także zaznaczyć, czy wiersz został przetworzony przez ładowanie początkowe, czy ładowanie przyrostowe.

InformacjaJak widać w tym przykładzie, makra można wykorzystać do dostosowania dowolnej części zapytania do ładowania początkowego lub ładowania przyrostowego.

To jest zapytanie podstawowe:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Jest to filtr, który należy zastosować podczas przebiegu przyrostowego. „ORDERS_DERIVED” to nazwa docelowego zestawu danych.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
WskazówkaŁadowanie przyrostowe może również mapować notację ${TABLE} na obiekty docelowe utworzone przez zadanie transformacji.

To jest pełne zapytanie z użyciem makra filtrującego i nazwami tabel zastąpionymi notacją ${TABLE}. LOADED_BY ma wartość INIT, jeśli ładowanie jest początkowe, i INCR, jeśli ładowanie jest przyrostowe:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

Wynikiem tego jest początkowe zapytanie ładowania:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

I zapytanie ładowania przyrostowego:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

Najlepsze praktyki

  • Gdy dodajesz transformację SQL, klucz główny nie jest definiowany automatycznie. Dodaj klucz do zestawu danych w zakładce Zestaw danych.

  • Nie twórz ręcznie nagłówków kolumn w przekształconych danych wyjściowych.

  • Unikaj używania SELECT z *, ponieważ może to powodować zwracanie różnych kolumn przy każdym uruchomieniu zapytania. Jeśli nastąpiła zmiana w schemacie, zmień odpowiednio zapytanie i ponownie wykonaj operację Opisz tabelę. Następnie możesz edytować kolumny i dostosowywać tabele.

Czy ta strona była pomocna?

Jeżeli natkniesz się na problemy z tą stroną lub jej zawartością — literówkę, brakujący krok lub błąd techniczny — daj nam znać, co możemy poprawić!