Blog JSystems - uwalniamy wiedzę!

Szukaj

Power Query w Microsoft Fabric

Dataflow Gen2: błąd zapisu do Lakehouse - typy kolumn i schemat tabeli

W skrócie

  • Dataflow Gen2 kończy się błędem zapisu do Lakehouse albo nie daje się opublikować, choć podgląd zapytania w edytorze wygląda poprawnie.
  • Lakehouse nie przyjmuje kolumn typu Dowolny ani kilku innych typów, Poprawiony schemat nie dopuszcza zmiany kolumn w zapytaniu, a kolumna wykryta jako niedopuszczająca null odrzuca puste wartości.
  • Ustaw typ każdej kolumny przed miejscem docelowym, zamień typy, których Lakehouse nie obsługuje, i wybierz w ustawieniach miejsca docelowego schemat zgodny z tym, jak zmienia się zapytanie.

Błąd zapisu Dataflow Gen2 do Lakehouse pojawia się zwykle wtedy, gdy zapytanie działa w edytorze, a dopiero zapis do tabeli odrzuca dane albo publikację. Przyczyną są typy kolumn albo schemat tabeli docelowej. Zebraliśmy to, co o typach i schemacie mówią lekcja o Fabric i dokumentacja Microsoft, oraz zamiany typów sprawdzone w Excelu.

Jak to wygląda w praktyce

Przepływ uruchomiony poleceniem Zapisz i uruchom kończy się w oknie Ostatnie uruchomienia stanem innym niż Powodzenie, a w szczegółach uruchomienia błąd dotyczy działania zapisu, na przykład sprzedaz_WriteToDataDestination. Dokumentacja Microsoft podaje przykład takiego błędu z kodem E104100: DataFormat.Error z komunikatem, który w polskim brzmieniu silnika Power Query to „Nie można wstawić danych o wartości null do kolumny, która nie dopuszcza wartości null.” (ang. „We can't insert null data into a non-nullable column.”).

Drugi objaw pojawia się przy publikacji: po zmianie zapytania przepływ z ustawieniem Poprawiony schemat nie daje się opublikować, bo schemat zapytania nie zgadza się ze schematem tabeli. Trzeci jest cichy: przy schemacie dynamicznym tabela zostaje usunięta i utworzona od nowa, a relacje i miary dodane wcześniej do tej tabeli mogą zniknąć.

Dlaczego tak się dzieje

Tabela w Lakehouse ma ustalone typy kolumn, a zapytanie Power Query może mieć kolumny bez typu. Kolumna niestandardowa dodana bez podania typu ma typ Dowolny, w nagłówku z ikoną ABC123: w naszym teście w Excelu Table.Schema pokazał dla niej Any.Type. Według tabeli obsługiwanych typów w dokumentacji Microsoft Lakehouse nie przyjmuje typów Any, Binary, Duration, Time i DateTimeZone ani wartości złożonych, czyli list, rekordów i tabel.

Drugi mechanizm to schemat. Przy ustawieniach automatycznych Fabric sam dopasowuje mapowanie kolumn, a przy każdym odświeżeniu usuwa tabelę i tworzy ją od nowa. Po wyłączeniu przełącznika Użyj ustawień automatycznych wybierasz między opcjami Schemat dynamiczny i Poprawiony schemat. Opcje schematu działają tylko z metodą Zastąp: przy metodzie Dołącz zmiana schematu nie jest możliwa.

Trzeci przypadek dokumentacja opisuje osobno: kolumna, w której są wartości null, bywa wykryta jako niedopuszczająca null i w takiej postaci trafia do tabeli docelowej. Pierwszy pusty wiersz przerywa wtedy zapis.

Jak to rozwiązać krok po kroku

  1. Odczytaj błąd zapisu. Otwórz Ostatnie uruchomienia (ikona zegara na wstążce) i szczegóły nieudanego uruchomienia. Komunikat przy działaniu z końcówką _WriteToDataDestination wskaże, czy chodzi o typ, wartość null czy schemat.
  2. Ustaw typ każdej kolumny przed miejscem docelowym. Kliknij ikonę typu w nagłówku każdej kolumny z ikoną ABC123 i wybierz właściwy typ, na przykład Liczba dziesiętna dla kwot. W kolumnach niestandardowych podawaj typ od razu w formule: Table.AddColumn(Źródło, "Wartość brutto", each [Wartość netto] * 1.23, type number). W Excelu taka kolumna dostała typ Number.Type, a ta sama formuła bez typu Any.Type.
  3. Zamień typy, których Lakehouse nie przyjmuje. Datę ze strefą czasową zamień na datę i godzinę: DateTimeZone.RemoveZone zostawia czas lokalny, a DateTimeZone.RemoveZone(DateTimeZone.ToUtc([Kolumna])) czas UTC. Czas trwania przelicz na liczbę, na przykład minut, funkcją Duration.TotalMinutes, a samą godzinę zapisz jako tekst: Time.ToText([Godzina], "HH:mm"). W Excelu wyniki wyniosły 12:00 i 10:00 dla czasu ze strefą +02:00, 90 dla półtorej godziny i 06:30 dla godziny.
  4. Wymuś kolumny dopuszczające null. Przy błędzie o wartości null dokumentacja zaleca usunąć tabelę z Lakehouse, usunąć miejsce docelowe z zapytania, zmienić typy krokiem z typami dopuszczającymi null, na przykład Table.TransformColumnTypes(#"Poprzedni krok", {{"Sklep", type nullable text}}), i dodać miejsce docelowe ponownie. Kolumna IsNullable w wyniku Table.Schema pokazuje, czy typ dopuszcza null: w naszym teście po takim kroku wyniosła true.
  5. Dobierz opcję schematu. Na ekranie ustawień miejsca docelowego wyłącz Użyj ustawień automatycznych, jeśli chcesz sam decydować. Poprawiony schemat zachowuje tabelę wraz z relacjami i miarami, ale publikacja nie przejdzie, gdy kolumny zapytania się zmienią. Schemat dynamiczny dopuszcza zmiany, ale po każdej z nich mapowanie kolumn trzeba zaktualizować w oknie miejsca docelowego, a tabela zostanie utworzona od nowa.
  6. Przy istniejącej tabeli sprawdź mapowanie. Jeśli zapisujesz do tabeli, która już istnieje, sprawdź na ekranie mapowania, czy typ każdej kolumny zapytania pasuje do kolumny tabeli. Przy kolumnach walutowych dokumentacja radzi zmienić w edytorze typ na liczbę dziesiętną, bo ułatwia to dopasowanie do istniejącej kolumny.

Jak sprawdzić, że zadziałało

Uruchom przepływ ponownie poleceniem Zapisz i uruchom i sprawdź w Ostatnich uruchomieniach, czy stan to Powodzenie. Na ekranie mapowania kolumn każda kolumna powinna mieć konkretny typ, tak jak w lekcji o Fabric, gdzie typy Tekst, Data, Pełna liczba i Liczba dziesiętna przeniosły się do tabeli bez zmian. Liczbę wierszy w tabeli porównaj z oczekiwaną zapytaniem w punkcie końcowym analizy SQL.

Żeby problem nie wracał, kończ każde zapytanie wynikowe krokiem ustawiającym typy wszystkich kolumn i nie zostawiaj kolumn z ikoną ABC123. Jeśli do tabeli w Lakehouse dodajesz relacje albo miary, wybierz Poprawiony schemat, a zmiany kolumn w zapytaniu planuj razem ze zmianą tabeli.

Ustawienia miejsca docelowego w Dataflow Gen2: użyj ustawień automatycznych, mapowanie kolumn z typami danych i komunikat o wyłączeniu przemieszczania
Ustawienia automatyczne i mapowanie kolumn. Typy danych z Power Query (Tekst, Data, Pełna liczba, Liczba dziesiętna) przeniosły się do tabeli bez zmian.

Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query

Baner szkolenia Kompleksowe szkolenie Power BI - Desktop, DAX i Online + Copilot w JSystems

Szkolenie Power BI - Desktop, DAX i Online --> Pięć dni od pierwszego raportu do publikacji w usłudze Power BI: Power Query, model danych z wielu tabel, DAX, wizualizacje i Copilot. To szkolenie ma terminy gwarantowane.

To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.

★★★★★Średnia ocena naszych szkoleń w Google: 5/5

Najczęściej zadawane pytania

Dlaczego kolumna niestandardowa w Dataflow Gen2 ma typ Dowolny?
Kolumna niestandardowa dodana bez podania typu dostaje typ Dowolny, oznaczony w nagłówku ikoną ABC123. Typ podasz jako czwarty argument funkcji Table.AddColumn, na przykład type number, albo ustawisz go potem ikoną typu w nagłówku kolumny.
Które typy danych nie trafią do tabeli w Lakehouse?
Według dokumentacji Microsoft Lakehouse nie przyjmuje typów Any, Binary, Duration, Time i DateTimeZone ani list, rekordów i tabel zagnieżdżonych w kolumnach. Takie kolumny zamień przed zapisem na tekst, liczbę albo datę i godzinę.
Czym różni się Schemat dynamiczny od Poprawionego schematu?
Schemat dynamiczny dopuszcza zmiany kolumn: przy różnicy schematów tabela jest usuwana i tworzona od nowa, więc dodane do niej relacje i miary mogą zniknąć. Poprawiony schemat zachowuje tabelę i podmienia tylko wiersze, ale publikacja nie przejdzie, gdy schemat zapytania przestanie pasować do tabeli.
Czy przy metodzie Dołącz mogę dodać nową kolumnę do zapytania?
Nie bez zmiany ustawień. Dokumentacja Microsoft zaznacza, że opcje schematu działają tylko z metodą Zastąp, a przy dołączaniu zmiany schematu nie są możliwe. Nową kolumnę wprowadzisz po przejściu na metodę Zastąp ze schematem dynamicznym.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...