Przejdź do głównej zawartości

Zanim przejdziesz do zaawansowanych możliwości Data Mapper, warto krótko przypomnieć podstawową funkcjonalność.

Data Mapper służy do mapowania kolumn danych źródłowych na docelową tabelę danych.

Przycisk menu Sprawdź źródło udostępnia dodatkowe sposoby mapowania kolumn ze źródła na cel:

  • Wypełnij obie tabele mapowania: przenosi wszystkie wartości z tabeli danych źródłowych do docelowej tabeli danych. Jest to zachowanie domyślne.
  • Wypełnij tylko tabelę mapowania źródła: mapuje wyłącznie wszystkie wartości w tabeli danych źródłowych. Jest to przydatne przy modyfikowaniu istniejącego przepływu pracy, gdy zmieniła się struktura kolumn źródła.
  • Wypełnij tylko tabelę mapowania celu: przenosi wszystkie wartości wyłącznie do docelowej tabeli danych.

Jeśli opcje dla kolumn źródłowych i docelowych nie wystarczają, do docelowej tabeli danych można dodać kolejne kolumny na kilka sposobów:

  • Propaguj wszystko wstawia wszystkie kolumny źródłowe do docelowej tabeli danych, niezależnie od tego, czy już w niej istniały.
  • Propaguj zaznaczone wstawia tylko zaznaczone kolumny źródłowe.
  • Kliknij prawym przyciskiem myszy po stronie celu i wybierz Wstaw wiersz, aby wstawić wiersz bezpośrednio nad aktualnie zaznaczonym wierszem.
  • Kliknij prawym przyciskiem myszy po stronie celu i wybierz Dołącz wiersz, aby wstawić wiersz na końcu (po prawej stronie) docelowej tabeli danych.

Aby usunąć kolumny z docelowej tabeli danych, zaznacz wybrane kolumny, kliknij prawym przyciskiem myszy i wybierz Usuń.

Aby zmienić układ kolumn w docelowej tabeli danych, zaznacz wybrane kolumny. Możesz użyć jednej z metod:

  • Strzałki przenoszenia zbiorczego: wybierz odpowiednią opcję przenoszenia ze strzałek w prawym górnym rogu
  • Menu kontekstowe: kliknij prawym przyciskiem myszy i wybierz Przenieś na początek, Przenieś w górę, Przenieś w dół lub Przenieś na koniec.

Aby zwrócić tylko unikalne wartości, wybierz opcję menu Unikalne. Wyświetli to zestaw pól wyboru dla każdej kolumny źródła. Zaznacz pole obok odpowiedniej kolumny, aby zwrócić tylko unikalne wyniki.

Aby zagregować wyniki, wybierz opcję menu Podsumuj. Wyświetli to zestaw pól wyboru listy dla każdej kolumny docelowej tabeli danych. Wybierz odpowiednią metodę podsumowania dla każdej kolumny.

kolumny źródłowecust_idamtdtnotekolumny docelowecustomer_idamountorder_datezmiana nazwyrzutowanie → decimalzmiana nazwyniezmapowana → pominięta
Data Mapper łączy każdą kolumnę źródłową z kolumną docelową — po drodze zmieniając nazwy i rzutując typy. Niezmapowane kolumny źródłowe nie trafiają do wyniku.

Aby zagregować wyniki, wybierz opcję menu Podsumuj. Wyświetli to zestaw pól wyboru listy dla każdej kolumny docelowej tabeli danych. Dostępne są następujące opcje podsumowania:

Funkcja Opis
Grupuj według Grupuje wyniki według wartości
Liczba Liczba niepustych obserwacji w grupie
Liczba (z wartościami pustymi) Liczba obserwacji w grupie
Suma Suma wartości w grupie
Średnia Średnia wartości w grupie
Mediana Mediana wartości w grupie
Dominanta Dominanta wartości w grupie
Minimum Minimum wartości w grupie
Maksimum Maksimum wartości w grupie
Pierwsza Pierwsza wartość w grupie według uporządkowania
Ostatnia Ostatnia wartość w grupie według uporządkowania
Odchylenie standardowe Nieobciążone odchylenie standardowe w grupie
Odchylenie standardowe z próby Odchylenie standardowe z próby w grupie
Odchylenie standardowe z populacji Odchylenie standardowe z populacji w grupie
Wariancja Nieobciążona wariancja w grupie
Wariancja z próby Wariancja z próby w grupie
Wariancja z populacji Wariancja z populacji w grupie
Zaawansowane (bez grupowania) Specjalny wybór agregacji przy użyciu funkcji okna

Wybierz odpowiednią metodę podsumowania dla kolumny.

Gdy konfigurujesz krok przez REST API lub asystenta AI, każda kolumna docelowa przechowuje swoje podsumowanie w agg, a aggregation_type kroku wybiera te same opcje. Każdy krok z Data Mapper akceptuje następujące wartości:

Klucz Podsumowanie
group Grupuj według
dont_group Zaawansowane (bez grupowania): kolumna nie jest ani grupowana, ani agregowana — dla wyrażeń, które same agregują lub używają funkcji okna
count Liczba niepustych obserwacji w grupie
count_null Liczba z wartościami pustymi
count_distinct Liczba unikalnych wartości w grupie
sum Suma
avg Średnia
median Mediana
min Minimum
max Maksimum
stddev Odchylenie standardowe
stddev_samp Odchylenie standardowe z próby
stddev_pop Odchylenie standardowe z populacji
variance Wariancja
var_samp Wariancja z próby

Każda kolumna docelowa może mieć sort: asc, desc lub none, albo obiekt {ascending, order}. ascending przyjmuje wartość true lub false. order to liczba całkowita ustalająca priorytet klucza: kolumny z order są sortowane jako pierwsze, od najniższej liczby, a pozostałe posortowane kolumny następują w kolejności ich położenia.

Gdy używasz funkcji okna, wybierz Zaawansowane (bez grupowania) jako metodę agregacji. Ten specjalny wybór jest wymagany, ponieważ funkcja okna sama w sobie zawiera już agregację.

Podanie wartości w kolumnie Stała zastępuje wartość kolumny źródłowej, jeśli została określona, i wypełnia kolumnę podaną stałą.

Kolumna docelowa pobiera wartość z tego z wymienionych pól, które wypełnisz, w tej kolejności: najpierw wygrywa Stała, następnie Wyrażenie, a na końcu kolumna Źródło.

Kolumna, która sama oblicza swoją wartość, nie potrzebuje więc pola Źródło. Pozostaw je puste przy stałej lub wyrażeniu — stała lub wyrażenie już określa wartość, a Źródło podane obok jest ignorowane. Wypełnij Źródło, gdy przepuszczasz kolumnę wprost z danych przychodzących, zmieniasz jej nazwę lub rzutujesz ją po drodze.

Wyrażenie odczytuje kolumny przychodzące po nazwie, za pomocą get_column(table, 'Column Name'), a nie przez komórkę Źródło.

Data Mapper udostępnia wygodną funkcję czyszczenia obsługiwaną myszą, służącą do stosowania konwersji na danych w kolumnie.

Operacje czyszczenia obejmują następujące kategorie:

  • Przycinanie tekstu
  • Formatowanie tekstu
  • Przekształcenia tekstu
  • Konwersja do wartości NULL i z wartości NULL
  • Formatowanie liczb
  • Analiza dat

Wynik wyborów w czyszczeniu jest przekształcany w jedno zbiorcze wyrażenie, które można zobaczyć w informacjach o wyrażeniu.

Wyrażenia w Data Mapper to jedna z najpotężniejszych i najbardziej elastycznych koncepcji w PlaidCloud. Zapewniają niemal nieograniczoną elastyczność, a jednocześnie działają wyjątkowo wydajnie, nawet na bardzo dużych danych.

Wyrażenia pisze się w składni Python SQLAlchemy wraz z kilkoma dodatkowymi funkcjami pomocniczymi dostępnymi w PlaidCloud. Dzięki temu PlaidCloud udostępnia bezpośrednio pełen zestaw możliwości bazowej hurtowni danych (np. Greenplum, SAP HANA, Redshift itd.). Ponadto publicznie dostępnych jest wiele źródeł z szybkimi ściągawkami dotyczącymi operacji SQLAlchemy. Dzięki standardowej składni SQLAlchemy PlaidCloud unika częstej pułapki tworzenia kolejnej składni specyficznej dla domeny.

Edytor wyrażeń otwiera się po dwukrotnym kliknięciu komórki wyrażenia w kolumnie. Po otwarciu po lewej stronie wyświetlana jest lista kolumn, a po prawej rozbudowana biblioteka funkcji.

Choć wyrażenie można wpisać bezpośrednio w edytorze, zwykle łatwiej zacząć od wyboru funkcji i kolumn myszą. Biblioteka funkcji obejmuje następujące grupy:

  • Warunki
  • Warunki dla określonej kolumny
  • Konwersje
  • Daty
  • Matematyka
  • Tekst
  • Podsumowania
  • Operacje funkcji okna
  • Tablice
  • JSON
  • PostGIS (dane geoprzestrzenne)
  • Trygonometria

Po ukończeniu wyrażenia zapisz je, aby zostało zastosowane do kolumny.

Przykłady i funkcje wyrażeń znajdziesz w obszarze Wyrażenia.

cast(x, Float) zwraca 64-bitową liczbę o podwójnej precyzji w każdej hurtowni danych, więc kwota taka jak 1225541207.71 zachowuje wszystkie cyfry. W StarRocks rzutowanie na Float jest teraz stosowane, choć wcześniej było pomijane, a w Databend jest to podwójna, a nie pojedyncza precyzja. Kolumna Float tworzona przez PlaidCloud z danych zmiennoprzecinkowych również ma podwójną precyzję. Tabela, która ma już kolumnę o pojedynczej precyzji, otrzymuje podwójną precyzję przy następnej przebudowie przez krok z opcją Overwrite.

W StarRocks:

  • Rzutowanie na dużą liczbę całkowitą obsługuje wartości powyżej około 2,1 miliarda.
  • Rzutowanie na Numeric bez podanej precyzji zachowuje miejsca dziesiętne, do 10 miejsc, zamiast zaokrąglać do liczby całkowitej.
  • Rzutowanie na JSON jest stosowane.

W każdej hurtowni danych wartość, której nie można przekonwertować, na przykład tekst nienumeryczny rzutowany na liczbę, staje się wartością pustą (null) zamiast zatrzymywać krok.

sqlalchemy.literal_column przekazuje fragment SQL do hurtowni danych bez zmian i przyjmuje pojedynczą wartość — kolumnę, obliczenie, CASE, wywołanie funkcji, rzutowanie, funkcję okna. literal_column zawierający podzapytanie ((SELECT ... FROM ...)) jest odrzucany, ponieważ podzapytanie sięga do tabeli, której krok nigdy nie zadeklarował.

Reguły z tej sekcji obowiązują wszędzie tam, gdzie pisane jest wyrażenie — tutaj w maperze, w filtrze kroku oraz w zapytaniu składanym gdzie indziej i wysyłanym do platformy. Są sprawdzane przy zapisywaniu kroku i ponownie, gdy wyrażenie jest zamieniane na SQL.

Zamiast tego zbuduj podzapytanie za pomocą sqlalchemy.select(...) — z .scalar_subquery(), gdy potrzebujesz pojedynczej wartości w kolumnie, lub z .subquery(), gdy z niego wybierasz:

# Refused
sqlalchemy.literal_column('(SELECT rate FROM fx WHERE fx.cc = t.cc)')
# Supported — a single value in a column
sqlalchemy.select(fx.c.rate).where(fx.c.cc == t.c.cc).scalar_subquery()
# Supported — a table to select from
sqlalchemy.select(fx.c.rate).subquery()

literal_column, którego najbardziej zewnętrznym operatorem jest OR, również jest odrzucany. PlaidCloud przekazuje tekst bez zmian, więc warunek dodany po nim byłby powiązany tylko z połową — a OR b, a po nim AND region = 'East', jest odczytywane jako a OR (b AND region = 'East'), i wracają wiersze, które chciano wykluczyć.

Dodaj nawiasy, a będzie działać jak dotychczas:

# Refused
sqlalchemy.literal_column("status = 'open' OR status = 'pending'")
# Supported
sqlalchemy.literal_column("(status = 'open' OR status = 'pending')")

Alternatywa w dowolnym miejscu wewnątrz wyrażenia — w CASE lub już ujęta w nawiasy — nie ma wpływu.

XOR jest odrzucany wszędzie, gdzie występuje, z nawiasami lub bez: hurtownie danych różnią się co do tego, jak silnie wiąże, więc nie istnieje odczyt bezpieczny wszędzie. Zapisz go zamiast tego jawnie, jako (a AND NOT b) OR (NOT a AND b).

literal_column zawierający komentarz jest odrzucany z tego samego powodu: komentarz biegnie do końca instrukcji, więc kasuje wszystko, co PlaidCloud dodaje po Twoim wyrażeniu, a nie tylko to, co napisano.

-- jest odrzucane tam, gdzie obejmowałoby resztę instrukcji. # jest odrzucane w dowolnym miejscu tekstu, bez wyjątków — także wewnątrz ciągu w cudzysłowie oraz w operatorach ścieżki JSON #> i #>> z Postgresa:

# Refused
sqlalchemy.literal_column("attrs #> '{a,b}'")
sqlalchemy.literal_column("code || '#'")

# rozpoczyna komentarz w hurtowniach zgodnych z MySQL, takich jak StarRocks, a PlaidCloud nie wie w chwili pisania wyrażenia, która hurtownia je uruchomi — nie ma więc miejsca w tekście, w którym byłoby to niezawodnie bezpieczne, a #, który jeden silnik uzna za ujęty w cudzysłów, dla innego jest początkiem komentarza. Jeśli potrzebujesz tego znaku jako danych, przekaż go jako wartość:

# Supported
sqlalchemy.func.concat(table.code, sqlalchemy.literal('#'))

Te same dwa zapisy są odrzucane w .op('...').

Wszystko inne, do czego zwykle służy literal_column, pozostaje bez zmian — literal_column('current_date'), literal_column("CASE WHEN amount > 0 THEN 'p' ELSE 'n' END") i func.count() działają jak dotychczas. Nazwy kolumn zawierające spacje, kropki lub cudzysłowy również pozostają bez zmian; hurtownia danych ujmie je w cudzysłowy za Ciebie.