Udostępnij za pośrednictwem


Minimalizowanie problemów z bazą danych SQL na potrzeby migracji netezza

Ten artykuł jest częścią piątej części siedmioczęściowej serii, która zawiera wskazówki dotyczące migracji z netezza do usługi Azure Synapse Analytics. Celem tego artykułu są najlepsze rozwiązania dotyczące minimalizowania problemów z programem SQL.

Omówienie

Cechy środowisk Netezza

Porada

Netezza zapoczątkowała koncepcję "urządzenia magazynu danych" na początku lat 2000.

W 2003 roku Netezza początkowo wydała swój produkt urządzenia magazynu danych. Obniżyła koszt wejścia i poprawiła łatwość korzystania z technik masowego przetwarzania równoległego (MPP, massively parallel processing), aby umożliwić przetwarzanie danych na dużą skalę wydajniej niż istniejące komputery mainframe lub inne technologie MPP dostępne w tym czasie. Od tego czasu produkt ewoluował i ma wiele instalacji wśród dużych instytucji finansowych, telekomunikacji i firm detalicznych. Oryginalna implementacja używała zastrzeżonego sprzętu, w tym programowalnych macierzy bramek (lub układów FPGA) i była dostępna za pośrednictwem połączenia sieciowego ODBC lub JDBC za pośrednictwem protokołu TCP/IP.

Większość istniejących instalacji Netezza jest lokalna, więc wielu użytkowników rozważa migrację niektórych lub wszystkich danych Netezza do usługi Azure Synapse Analytics, aby uzyskać korzyści wynikające z przejścia do nowoczesnego środowiska chmury.

Porada

Wiele istniejących instalacji Netezza to magazyny danych korzystające z modelu danych wymiarowych.

Technologia Netezza jest często używana do implementowania magazynu danych, obsługującego złożone zapytania analityczne na dużych ilościach danych przy użyciu języka SQL. Modele danych wymiarowych — schematy gwiazdy lub płatka śniegu — są wspólne, podobnie jak implementacja składnic danych dla poszczególnych działów.

To połączenie modeli danych SQL i wymiarowych upraszcza migrację do Azure Synapse, ponieważ podstawowe pojęcia i umiejętności SQL można przenosić. Zalecanym podejściem jest przeprowadzenie migracji istniejącego modelu danych w miarę upływu czasu i ograniczenia ryzyka. Nawet jeśli ostateczną intencją jest wprowadzenie zmian w modelu danych (na przykład przejście do modelu magazynu danych), przeprowadzenie początkowej migracji zgodnie z rzeczywistym użyciem, a następnie wprowadzenie zmian w środowisku chmury platformy Azure, wykorzystanie wydajności, elastycznej skalowalności i korzyści związanych z kosztami.

Język SQL został ustandaryzowany, ale w niektórych przypadkach dostawcy zaimplementowali zastrzeżone rozszerzenia. W tym dokumencie przedstawiono potencjalne różnice w języku SQL, które mogą wystąpić podczas migracji ze starszego środowiska Netezza, i przedstawiono obejścia.

Używanie Azure Data Factory do implementowania migracji opartej na metadanych

Porada

Automatyzacja procesu migracji przy użyciu funkcji Azure Data Factory.

Automatyzuj i organizuj proces migracji, korzystając z możliwości w środowisku platformy Azure. Takie podejście minimalizuje również wpływ migracji na istniejące środowisko Netezza, które może już działać blisko pełnej pojemności.

Azure Data Factory to oparta na chmurze usługa integracji danych, która umożliwia tworzenie przepływów pracy opartych na danych w chmurze na potrzeby organizowania i automatyzowania przenoszenia i przekształcania danych. Za pomocą usługi Data Factory można tworzyć i planować oparte na danych przepływy pracy — nazywane potokami — które mogą pozyskiwać dane z różnych magazynów danych. Może przetwarzać i przekształcać dane przy użyciu usług obliczeniowych, takich jak Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics i Azure Machine Learning.

Tworząc metadane umożliwiające wyświetlenie listy tabel danych do zmigrowania i ich lokalizacji, można użyć obiektów usługi Data Factory do zarządzania i automatyzowania części procesu migracji. Możesz również użyć Azure Synapse Pipelines.

Różnice języka SQL DDL między platformą Netezza a Azure Synapse

SQL Data Definition Language (DDL)

Porada

Polecenia CREATE TABLE języka SQL DDL i CREATE VIEW mają standardowe podstawowe elementy, ale są również używane do definiowania opcji specyficznych dla implementacji.

Standard ANSI SQL definiuje podstawową składnię poleceń DDL, takich jak CREATE TABLE i CREATE VIEW. Te polecenia są używane zarówno w netezza, jak i Azure Synapse, ale zostały one również rozszerzone, aby umożliwić definiowanie funkcji specyficznych dla implementacji, takich jak indeksowanie, dystrybucja tabel i opcje partycjonowania.

W poniższych sekcjach omówiono opcje specyficzne dla platformy Netezza, które należy wziąć pod uwagę podczas migracji do Azure Synapse.

Zagadnienia dotyczące tabel

Porada

Użyj istniejących indeksów, aby wskazać kandydatów do indeksowania w zmigrowanym magazynie.

Podczas migrowania tabel między różnymi technologiami tylko nieprzetworzone dane i ich opisowe metadane są fizycznie przenoszone między dwoma środowiskami. Inne elementy bazy danych z systemu źródłowego, takie jak indeksy i pliki dziennika, nie są bezpośrednio migrowane, ponieważ mogą nie być potrzebne lub mogą być implementowane inaczej w nowym środowisku docelowym. Na przykład TEMPORARY opcja w składni Netezza CREATE TABLE jest równoważna prefiksowi nazwy tabeli z znakiem "#" w Azure Synapse.

Ważne jest, aby zrozumieć, gdzie optymalizacje wydajności — takie jak indeksy — były używane w środowisku źródłowym. Wskazuje to, gdzie można dodać optymalizację wydajności w nowym środowisku docelowym. Jeśli na przykład mapy stref zostały utworzone w źródłowym środowisku Netezza, może to oznaczać, że w migrowanej bazie danych Azure Synapse należy utworzyć indeks nieklasterowany. Inne natywne techniki optymalizacji wydajności, takie jak replikacja tabel, mogą być bardziej odpowiednie niż proste tworzenie indeksu "like-for-like".

Nieobsługiwane typy obiektów bazy danych Netezza

Porada

Funkcje specyficzne dla platformy Netezza można zastąpić Azure Synapse funkcjami.

Netezza implementuje niektóre obiekty bazy danych, które nie są bezpośrednio obsługiwane w Azure Synapse, ale istnieją metody osiągnięcia tej samej funkcjonalności w nowym środowisku:

  • Mapy stref: w Netezza mapy strefy są automatycznie tworzone i obsługiwane dla niektórych typów kolumn i są używane w czasie wykonywania zapytania w celu ograniczenia ilości danych do skanowania. Mapy strefy są tworzone na następujących typach kolumn:

    • INTEGER kolumn o długości 8 bajtów lub mniej.
    • Kolumny czasowe. Na przykład , DATETIMEi TIMESTAMP.
    • CHAR kolumny, jeśli są one częścią zmaterializowanego widoku i wymienione w klauzuli ORDER BY .

    Możesz dowiedzieć się, które kolumny mają mapy stref, korzystając z nz_zonemap narzędzia , które jest częścią zestawu narzędzi NZ Toolkit. Azure Synapse nie obejmuje map strefowych, ale można osiągnąć podobne wyniki przy użyciu innych typów indeksów zdefiniowanych przez użytkownika i/lub partycjonowania.

  • Klastrowane tabele podstawowe (CBT): w Netezza często używane są tabele faktów, które mogą zawierać miliardy rekordów. Skanowanie tak ogromnej tabeli wymaga dużo czasu przetwarzania, ponieważ może być konieczne pełne skanowanie tabeli w celu uzyskania odpowiednich rekordów. Organizowanie rekordów na restrykcyjne CBT umożliwia Netezza grupowanie rekordów w tych samych lub pobliskich zakresach. Ten proces tworzy również mapy stref, które zwiększają wydajność, zmniejszając ilość danych do przeskanowania.

    W Azure Synapse można osiągnąć podobny efekt, korzystając z partycjonowania i/lub używania innych indeksów.

  • Zmaterializowane widoki: Platforma Netezza obsługuje zmaterializowane widoki i zaleca utworzenie co najmniej jednej z nich w dużych tabelach z wieloma kolumnami, w których tylko kilka z tych kolumn jest regularnie używanych w zapytaniach. System automatycznie zachowuje zmaterializowane widoki po zaktualizowaniu danych w tabeli podstawowej.

    Azure Synapse obsługuje zmaterializowane widoki z taką samą funkcjonalnością jak Netezza.

Mapowanie typu danych Netezza

Porada

Oceń wpływ nieobsługiwanych typów danych w ramach fazy przygotowania.

Większość typów danych Netezza ma bezpośredni odpowiednik w Azure Synapse. W poniższej tabeli przedstawiono te typy danych wraz z zalecanym podejściem do ich mapowania.

Typ danych Netezza typ danych Azure Synapse
BIGINT BIGINT
BINARY VARYING(n) Varbinary(n)
BOOLEAN BITOWYCH
BYTEINT TINYINT
RÓŻNE ZNAKI (n) Varchar(n)
ZNAK(n) CHAR(n)
DATE DATE(date)
LICZBA DZIESIĘTNA(p,s) LICZBA DZIESIĘTNA(p,s)
PODWÓJNA PRECYZJA FLOAT
FLOAT(n) FLOAT(n)
LICZBA CAŁKOWITA INT
INTERWAŁ Typy danych INTERVAL nie są obecnie bezpośrednio obsługiwane w Azure Synapse, ale można je obliczyć przy użyciu funkcji czasowych, takich jak DATEDIFF.
PIENIĄDZE PIENIĄDZE
CHARAKTER NARODOWY RÓŻNIĄCE SIĘ(n) Nvarchar(n)
ZNAK NARODOWY(n) NCHAR(n)
NUMERIC (p,s) NUMERIC (p,s)
LICZBA RZECZYWISTA LICZBA RZECZYWISTA
SMALLINT SMALLINT
ST_GEOMETRY(n) Typy danych przestrzennych, takie jak ST_GEOMETRY, nie są obecnie obsługiwane w Azure Synapse, ale dane mogą być przechowywane jako VARCHAR lub VARBINARY.
CZAS CZAS
CZAS ZE STREFĄ CZASOWĄ DATETIMEOFFSET
TIMESTAMP DATETIME

Generowanie języka DDL (Data Definition Language)

Porada

Użyj istniejących metadanych Netezza, aby zautomatyzować generowanie CREATE TABLE i CREATE VIEW DDL dla Azure Synapse.

Edytuj istniejące netezza CREATE TABLE i CREATE VIEW skrypty, aby utworzyć równoważne definicje ze zmodyfikowanymi typami danych zgodnie z wcześniejszym opisem w razie potrzeby. Zazwyczaj obejmuje to usunięcie lub zmodyfikowanie wszelkich dodatkowych klauzul specyficznych dla platformy Netezza, takich jak ORGANIZE ON.

Jednak wszystkie informacje, które określają bieżące definicje tabel i widoków w istniejącym środowisku Netezza, są przechowywane w tabelach wykazu systemu. Jest to najlepsze źródło tych informacji, ponieważ gwarantuje to aktualność i ukończenie. Należy pamiętać, że dokumentacja przechowywana przez użytkownika może nie być zsynchronizowana z bieżącymi definicjami tabeli.

Uzyskaj dostęp do tych informacji przy użyciu narzędzi, takich jak nz_ddl_table i wygeneruj CREATE TABLE instrukcje DDL. Edytuj te instrukcje dla równoważnych tabel w Azure Synapse.

Porada

Narzędzia i usługi innych firm mogą automatyzować zadania mapowania danych.

Istnieją partnerzy firmy Microsoft , którzy oferują narzędzia i usługi do automatyzacji migracji, w tym mapowanie typów danych. Ponadto jeśli narzędzie ETL innej firmy, takie jak Informatica lub Talend, jest już używane w środowisku Netezza, to narzędzie może zaimplementować wszelkie wymagane przekształcenia danych.

Różnice języka SQL DML między Netezza i Azure Synapse

SQL Data Manipulation Language (DML)

Porada

Polecenia SELECTDML SQL , i UPDATE mają standardowe podstawowe elementy, INSERTale mogą również implementować różne opcje składni.

Standard SQL ANSI definiuje podstawową składnię poleceń DML, takich jak SELECT, , INSERTUPDATEi DELETE. Zarówno Netezza, jak i Azure Synapse używać tych poleceń, ale w niektórych przypadkach istnieją różnice w implementacji.

W poniższych sekcjach omówiono polecenia DML specyficzne dla platformy Netezza, które należy wziąć pod uwagę podczas migracji do Azure Synapse.

Różnice składni języka SQL DML

Należy pamiętać o tych różnicach w składni języka DML (SQL Data Manipulation Language) między programem Netezza SQL i Azure Synapse podczas migracji:

  • STRPOS: w netezza STRPOS funkcja zwraca pozycję podciągów w ciągu. Równoważna funkcja w Azure Synapse to CHARINDEX, z odwrotną kolejnością argumentów. Na przykład SELECT STRPOS('abcdef','def')... w netezza jest odpowiednikiem SELECT CHARINDEX('def','abcdef')... w Azure Synapse.

  • AGE: Netezza obsługuje operator w AGE celu nadania interwału między dwiema wartościami czasowymi, takimi jak znaczniki czasu lub daty. Na przykład SELECT AGE('23-03-1956','01-01-2019') FROM.... W Azure Synapse DATEDIFF daje interwał. Na przykład SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Zanotuj sekwencję reprezentacji daty.

  • NOW(): Netezza używa NOW() funkcji do reprezentowania CURRENT_TIMESTAMP w Azure Synapse.

Funkcje, procedury składowane i sekwencje

Porada

W ramach fazy przygotowania oceń liczbę i typ migrowanych obiektów innych niż dane.

Podczas migracji z dojrzałego starszego środowiska magazynu danych, takiego jak Netezza, często istnieją elementy inne niż proste tabele i widoki, które muszą zostać zmigrowane do nowego środowiska docelowego. Przykłady obejmują funkcje, procedury składowane i sekwencje.

W ramach fazy przygotowania utwórz spis obiektów, które muszą zostać zmigrowane i zdefiniuj metody ich obsługi. Następnie przypisz odpowiednią alokację zasobów w planie projektu.

W środowisku platformy Azure mogą istnieć obiekty, które zastępują funkcje zaimplementowane jako funkcje lub procedury składowane w środowisku Netezza. W takim przypadku często wydajniejsze jest użycie wbudowanych obiektów platformy Azure, a nie ponownego odzyskiwania funkcji Netezza.

Porada

Produkty i usługi innych firm mogą zautomatyzować migrację elementów innych niż dane.

Partnerzy firmy Microsoft oferują narzędzia i usługi, które mogą zautomatyzować migrację, w tym mapowanie typów danych. Ponadto narzędzia ETL innych firm, takie jak Informatica lub Talend, które są już używane w środowisku IBM Netezza, mogą implementować wszelkie wymagane przekształcenia danych.

Więcej informacji na temat każdego z tych elementów można znaleźć w poniższych sekcjach.

Funkcje

Podobnie jak w przypadku większości produktów baz danych, platforma Netezza obsługuje funkcje systemowe i funkcje zdefiniowane przez użytkownika w ramach implementacji języka SQL. Podczas migracji do innej platformy bazy danych, takiej jak Azure Synapse, dostępne są typowe funkcje systemowe i można je migrować bez zmian. Niektóre funkcje systemowe mogą mieć nieco inną składnię, ale wymagane zmiany można zautomatyzować. Funkcje systemowe, w których nie ma odpowiednika, takich jak dowolne funkcje zdefiniowane przez użytkownika, mogą wymagać ponownego zakodowania przy użyciu języków dostępnych w środowisku docelowym. Azure Synapse używa popularnego języka Transact-SQL do implementowania funkcji zdefiniowanych przez użytkownika. Funkcje zdefiniowane przez użytkownika Netezza są kodowane w językach nzlua lub C++.

Procedury składowane

Większość nowoczesnych produktów baz danych umożliwia przechowywanie procedur w bazie danych. Netezza udostępnia język NZPLSQL, który jest oparty na postgres PL/pgSQL. Procedura składowana zwykle zawiera instrukcje SQL i pewną logikę proceduralną oraz może zwracać dane lub stan.

Azure Synapse Analytics obsługuje również procedury składowane przy użyciu języka T-SQL, więc jeśli musisz przeprowadzić migrację procedur składowanych, zakoduj je odpowiednio.

Sekwencje

W netezza sekwencja jest nazwanym obiektem bazy danych utworzonym za pośrednictwem CREATE SEQUENCE , który może podać unikatową wartość za pośrednictwem NEXT VALUE FOR metody . Użyj tych elementów, aby wygenerować unikatowe liczby do użycia jako wartości klucza zastępczego dla wartości klucza podstawowego.

W Azure Synapse nie ma elementu CREATE SEQUENCE. Sekwencje są obsługiwane przy użyciu tożsamości do tworzenia kluczy zastępczych lub tożsamości zarządzanej przy użyciu kodu SQL w celu utworzenia następnego numeru sekwencji w serii.

Sprawdzanie poprawności starszej wersji programu SQL przy użyciu funkcji EXPLAIN

Porada

Znajdź potencjalne problemy z migracją przy użyciu rzeczywistych zapytań z istniejących dzienników zapytań systemowych.

Przechwyć niektóre reprezentatywne instrukcje SQL ze starszych dzienników historii zapytań, aby ocenić starszą usługę Netezza SQL pod kątem zgodności z programem Azure Synapse. Następnie prefiks tych zapytań z EXPLAIN i — przy założeniu, że model danych "like-for-like" został zmigrowany w Azure Synapse z tymi samymi nazwami tabel i kolumn — uruchom te EXPLAIN instrukcje w Azure Synapse. Każdy niezgodny program SQL zwróci błąd. Użyj tych informacji, aby określić skalę zadania recodowania. Takie podejście nie wymaga załadowania danych do środowiska platformy Azure tylko wtedy, gdy zostały utworzone odpowiednie tabele i widoki.

Mapowanie języka T-SQL na platformę IBM Netezza

W tej tabeli znajduje się tabela IBM Netezza zgodna z językiem T-SQL zgodnym z mapowaniem typu danych SQL Azure Synapse:

IBM Netezza — typ danych Azure Synapse typ danych SQL
array Nieobsługiwany
bigint bigint
duży obiekt binarny [(n[K| M|G])] nvarchar [(n|max)]
 blob [(n[K| M|G])] nvarchar [(n|max)]
 byte [(n)] binary [(n)]|varbinary(max)
 byteint smallint
 char różniące się [(n)] varchar [(n|max)]
znak różnicowy [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
znak [(n)] char [(n)]|varchar(max)
 duży obiekt [(n[K| M|G])] varchar [(n|max)
 clob [(n[K| M|G])] varchar [(n|max)
 Dataset Nieobsługiwany 
 data data
 dec [(p[,s])] dziesiętne [(p[,s])]
 dziesiętne [(p[,s])] dziesiętne [(p[,s])]
 podwójna precyzja float(53)
 float [(n)] float [(n)]
 grafika [(n)] nchar [(n)]| Varchar(max)
 interval Nieobsługiwany 
 json [(n)] nvarchar [(n|max)]
 long varchar Nvarchar(max)
 long vargraphic Nvarchar(max)
 Mbb Nieobsługiwany 
 MBR Nieobsługiwany 
 number [((p|*)[,s])] numeryczne [(p[,s])]
 numeryczne [(p [,s])]  numeryczne [(p[,s])]
 period Nieobsługiwany 
 liczba rzeczywista  liczba rzeczywista
 smallint smallint
 st_geometry Nieobsługiwany 
 time time
 czas ze strefą czasową datetimeoffset
 sygnatura czasowa  datetime2
 sygnatura czasowa ze strefą czasową datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray Nieobsługiwany 
 xml Nieobsługiwany 
 Xmltype Nieobsługiwany 

Podsumowanie

Typowe istniejące starsze instalacje Netezza są implementowane w sposób, który ułatwia migrację do Azure Synapse. Używają języka SQL do obsługi zapytań analitycznych na dużych woluminach danych i są w jakiejś formie modelu danych wymiarowych. Czynniki te sprawiają, że są dobrymi kandydatami do migracji do Azure Synapse.

Aby zminimalizować zadanie migracji rzeczywistego kodu SQL, postępuj zgodnie z następującymi zaleceniami:

  • Początkowa migracja magazynu danych powinna być tak samo jak w celu zminimalizowania ryzyka i czasu, nawet jeśli ostateczne środowisko końcowe będzie zawierać inny model danych, taki jak magazyn danych.

  • Zapoznaj się z różnicami między implementacją netezza SQL i Azure Synapse.

  • Użyj dzienników metadanych i zapytań z istniejącej implementacji netezza, aby ocenić wpływ różnic i zaplanować podejście do ograniczenia.

  • Automatyzuj proces wszędzie tam, gdzie to możliwe, aby zminimalizować błędy, ryzyko i czas migracji.

  • Rozważ skorzystanie ze specjalistycznych partnerów i usług firmy Microsoft w celu usprawnienia migracji.

Następne kroki

Aby dowiedzieć się więcej o narzędziach firmy Microsoft i innych firm, zobacz następny artykuł w tej serii: Narzędzia migracji magazynu danych Netezza do usługi Azure Synapse Analytics.