Minimieren von SQL Problemen beim Migrieren von Netezza

Dieser Artikel ist der fünfte Teil einer siebenteiligen Serie, die Anleitungen für die Migration von Netezza zu Azure Synapse Analytics enthält. In diesem Artikel werden schwerpunktmäßig bewährte Methoden zum Minimieren von SQL-Problemen behandelt.

Übersicht

Merkmale von Netezza-Umgebungen

Tipp

Netezza war in den frühen 2000er Jahren Pionier des Konzepts der „Data Warehouse-Appliance“.

2003 brachte Netezza sein erstes Data Warehouse-Applianceprodukt auf den Markt. Es senkte die Einstiegskosten und verbesserte die Benutzerfreundlichkeit von MPP-Techniken (Massive Parallel Processing), um Datenverarbeitung in großem Maßstab effizienter zu ermöglichen als die damals verfügbaren Mainframe- oder anderen MPP-Technologien. Seitdem hat sich das Produkt weiterentwickelt und ist bei vielen großen Finanzinstituten sowie Telekommunikations- und Einzelhandelsunternehmen installiert. Die ursprüngliche Implementierung arbeitete mit proprietärer Hardware einschließlich Field Programmable Gate Arrays (FPGAs) und ermöglichte den Zugriff über eine ODBC- oder JDBC-Netzwerkverbindung und TCP/IP.

Die meisten bestehenden Netezza-Installationen sind lokal, sodass viele Benutzer eine Migration einiger oder aller Netezza-Daten zu Azure Synapse Analytics in Erwägung ziehen, um von den Vorteilen einer Umstellung auf eine moderne Cloudumgebung zu profitieren.

Tipp

Viele bestehende Netezza-Installationen sind Data Warehouses mit einem dimensionalen Datenmodell.

Netezza-Technologie dient häufig zur Implementierung eines Data Warehouse, das komplexe analytische Abfragen großer Datenvolumen mittels SQL unterstützt. Dimensionale Datenmodelle wie Stern- oder Schneeflockenschemas sind ebenso üblich wie die Implementierung von Data Marts für einzelne Abteilungen.

Diese Kombination aus SQL und dimensionalen Datenmodellen vereinfacht die Migration zu Azure Synapse, da die grundlegenden Konzepte und SQL-Kenntnisse übertragbar sind. Der empfohlene Ansatz ist die Migration des vorhandenen Datenmodells im Ist-Zustand, um Risiken und Zeitaufwand zu reduzieren. Selbst wenn Sie die Absicht haben, das Datenmodell zu ändern (z. B. auf ein Datentresormodell umzusteigen), sollten Sie zunächst eine Migration des Ist-Zustands durchführen und die Änderungen dann in der Cloudumgebung von Azure vornehmen, um dort die in den Genuss von Leistung, elastischer Skalierbarkeit und Kostenvorteilen zu kommen.

Obwohl die Sprache SQL standardisiert wurde, haben einzelne Anbieter in einigen Fällen proprietäre Erweiterungen implementiert. In diesem Dokument werden potenzielle SQL-Unterschiede hervorgehoben, auf die Sie bei der Migration von einer älteren Netezza-Umgebung stoßen können, und entsprechende Umgehungsmöglichkeiten aufgezeigt.

Verwenden von Azure Data Factory zum Implementieren einer metadatengesteuerten Migration

Tipp

Automatisieren Sie den Migrationsprozess mithilfe der Möglichkeiten von Azure Data Factory.

Automatisieren und orchestrieren Sie den Migrationsprozess, indem Sie die Möglichkeiten der Azure-Umgebung nutzen. Bei dieser Vorgehensweise werden auch die Auswirkungen auf die vorhandene Netezza-Umgebung (die möglicherweise bereits fast voll ausgelastet ist) minimiert.

Azure Data Factory ist ein cloudbasierter Datenintegrationsdienst, mit dem Sie datengesteuerte Workflows in der Cloud erstellen können, um Datenverschiebungen und Datentransformationen zu orchestrieren und zu automatisieren. Mit Data Factory können Sie datengesteuerte Workflows (sog. Pipelines) erstellen und planen, die Daten aus unterschiedlichen Datenspeichern erfassen. Die Anwendung kann diese mithilfe von Computediensten wie Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics und Azure Machine Learning verarbeiten und transformieren.

Indem Sie Metadaten zum Auflisten der zu migrierenden Datentabellen und deren Speicherort erstellen, können Sie die Möglichkeiten von Data Factory zum Verwalten und Automatisieren von Teilen des Migrationsprozesses nutzen. Sie können auch Azure Synapse Pipelines verwenden.

SQL DLL-Unterschiede zwischen Netezza und Azure Synapse

SQL DDL (Data Definition Language, Datendefinitionssprache)

Tipp

Die SQL DDL-Befehle CREATE TABLE und CREATE VIEW haben standardmäßige Kernelemente, werden aber auch zur Definition implementierungsspezifischer Optionen verwendet.

Der ANSI SQL-Standard definiert die grundlegende Syntax für DDL-Befehle wie CREATE TABLE und CREATE VIEW. Diese Befehle werden sowohl in Netezza als auch in Azure Synapse verwendet, sie werden aber auch erweitert, um die Definition implementierungsspezifischer Features wie Indizierung, Tabellenverteilung und Partitionierungsoptionen zu ermöglichen.

In den folgenden Abschnitten werden Netezza-spezifische Optionen erörtert, die Sie bei einer Migration zu Azure Synapse berücksichtigen sollten.

Überlegungen zu Tabellen

Tipp

Verwenden Sie vorhandene Indizes, um einen Hinweis auf mögliche Kandidaten für die Indizierung im migrierten Warehouse zu erhalten.

Bei der Migration von Tabellen zwischen unterschiedlichen Technologien werden nur die Rohdaten und ihre beschreibenden Metadaten physisch zwischen den beiden Umgebungen verschoben. Andere Datenbankelemente aus dem Quellsystem wie Indizes und Protokolldateien werden nicht direkt migriert, da diese möglicherweise nicht benötigt werden oder in der neuen Umgebung anders implementiert werden. Die Option TEMPORARY der CREATE TABLE-Syntax von Netezza entspricht zum Beispiel dem Voranstellen des Zeichens „#“ vor den Tabellennamen in Azure Synapse.

Es ist wichtig zu verstehen, wo Leistungsoptimierungen, wie z. B. Indizes, in der Quellumgebung verwendet wurden. Dadurch werden Hinweise gegeben, wo in der neuen Umgebung Leistungsoptimierungen möglich sind. Wenn beispielsweise Zonenzuordnungen in der Netezza-Quellumgebung erstellt wurden, kann dies ein Hinweis darauf sein, dass ein nicht gruppierter Index in der migrierten Azure Synapse-Datenbank erstellt werden sollte. Andere native Techniken zur Leistungsoptimierung, wie z. B. Tabellenreplikation, sind möglicherweise besser geeignet als eine reine gleichartige Indexerstellung.

Nicht unterstützte Typen von Netezza-Datenbankobjekten

Tipp

Netezza-spezifische Features können durch Azure Synapse-Features ersetzt werden.

Netezza implementiert einige Datenbankobjekte, die in Azure Synapse nicht direkt unterstützt werden. Es gibt jedoch Methoden, um die gleiche Funktionalität innerhalb der neuen Umgebung zu erreichen:

  • Zonenzuordnungen: In Netezza werden Zonenzuordnungen für einige Spaltentypen automatisch erstellt und verwaltet und werden zur Abfragezeit verwendet, um die zu überprüfende Datenmenge einzuschränken. Zonenzuordnungen werden für die folgenden Spaltentypen erstellt:

    • INTEGER Spalten mit einer Länge von 8 Bytes oder weniger.
    • Temporale Spalten. Beispiel: DATE, TIME und TIMESTAMP.
    • CHAR Spalten, wenn diese Teil einer materialisierten Sicht sind und in der ORDER BY-Klausel erwähnt werden.

    Sie können herausfinden, welche Spalten Zonenzuordnungen haben, indem Sie das nz_zonemap-Dienstprogramm verwenden, das Teil des NZ-Toolkits ist. In Azure Synapse sind keine Zonenzuordnungen enthalten. Es ist jedoch möglich, ähnliche Ergebnisse mit anderen benutzerdefinierten Indextypen und/oder Partitionierungen zu erzielen.

  • Geclusterte Basistabellen (CBT): In Netezza werden CBTs häufig für Faktentabellen verwendet, die Milliarden von Datensätzen enthalten können. Das Scannen einer sehr großen Tabelle erfordert viel Verarbeitungszeit, da ein vollständiger Tabellenscan erforderlich sein könnte, um relevante Datensätze zu erhalten. Durch Organisieren von Datensätzen in restriktiven CBT können Datensätze in Netezza in denselben oder angrenzenden Erweiterungen gruppiert werden. Bei diesem Vorgang werden auch Zonenzuordnungen erstellt, die die Leistung durch eine Verkleinerung der zu scannenden Datenmenge verbessern.

    In Azure Synapse können Sie einen ähnlichen Effekt durch die Verwendung der Partitionierung und/oder anderer Indizes erzielen.

  • Materialisierte Sichten: Netezza unterstützt materialisierte Sichten und empfiehlt, dass eine oder mehrere davon über große Tabellen erstellt werden, die über viele Spalten verfügen, in denen nur einige dieser Spalten regelmäßig in Abfragen verwendet werden. Das System verwaltet materialisierte Sichten automatisch, wenn Daten in der Basistabelle aktualisiert werden.

    Azure Synapse unterstützt materialisierte Sichten mit derselben Funktionalität wie Netezza.

Netezza-Datentypzuordnung

Tipp

Bewerten Sie in der Vorbereitungsphase die Auswirkungen nicht unterstützter Datentypen.

In Azure Synapse gibt es eine direkte Entsprechung für die meisten Netezza-Datentypen. In der folgenden Tabelle sind diese Datentypen und die empfohlene Vorgehensweise für deren Zuordnung aufgeführt.

Netezza-Datentyp Azure Synapse-Datentyp
bigint bigint
BINARY VARYING(n) VARBINARY(n)
BOOLEAN BIT
BYTEINT TINYINT
CHARACTER VARYING(n) VARCHAR(n)
CHARACTER(n) CHAR(n)
DATE DATE(date)
DECIMAL(p,s) DECIMAL(p,s)
DOUBLE PRECISION GLEITKOMMAZAHL
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL INTERVAL-Datentypen werden derzeit in Azure Synapse nicht direkt unterstützt, können jedoch mithilfe temporaler Funktionen wie DATEDIFF berechnet werden.
MONEY MONEY
NATIONAL CHARACTER VARYING(n) NVARCHAR(n)
NATIONAL CHARACTER(n) NCHAR(n)
NUMERIC(p,s) NUMERIC(p,s)
real REAL
SMALLINT SMALLINT
ST_GEOMETRY(n) Räumliche Datentypen wie ST_GEOMETRY werden derzeit nicht in Azure Synapse unterstützt, die Daten können allerdings als VARCHAR oder VARBINARY gespeichert werden.
TIME TIME
TIME WITH TIME ZONE DATETIMEOFFSET
timestamp DATETIME

Generierung von DDL-Anweisungen (Data Definition Language, Datendefinitionssprache)

Tipp

Verwenden Sie vorhandene Netezza-Metadaten, um die Generierung von DDL-Anweisungen vom Typ CREATE TABLE und CREATE VIEW für Azure Synapse zu automatisieren.

Bearbeiten Sie die vorhandenen Netezza-Skripts CREATE TABLE und CREATE VIEW, um bei Bedarf die entsprechenden Definitionen mit geänderten Datentypen wie zuvor beschrieben zu erstellen. In der Regel umfasst dies das Entfernen oder Ändern zusätzlicher Netezza-spezifischer Klauseln (z. B. ORGANIZE ON).

Alle Informationen, die sich auf die aktuellen Definitionen von Tabellen und Sichten in der vorhandenen Netezza-Umgebung beziehen, werden jedoch in den Systemkatalogtabellen verwaltet. Dies ist die beste Quelle für diese Informationen, da sie garantiert aktuell und vollständig ist. Beachten Sie, dass die von Benutzern gepflegte Dokumentation möglicherweise nicht mit den aktuellen Tabellendefinitionen synchron ist.

Greifen Sie mithilfe von Hilfsprogrammen wie nz_ddl_table auf diese Informationen zu, und generieren Sie die DDL-Anweisungen des Typs CREATE TABLE. Bearbeiten Sie diese Anweisungen für die entsprechenden Tabellen in Azure Synapse.

Tipp

Tools und Dienste von Drittanbietern können Datenzuordnungsaufgaben automatisieren.

Es gibt Microsoft-Partner, die Tools und Dienste zur Automatisierung der Migration anbieten, einschließlich Datentypzuordnung. Wenn in der Netezza-Umgebung bereits ein ETL-Tool von Drittanbietern wie Informatica oder Talend in Gebrauch ist, können damit außerdem alle erforderlichen Datentransformationen implementiert werden.

SQL DML-Unterschiede zwischen Netezza und Azure Synapse

SQL DML (Data Manipulation Language, Datenbearbeitungssprache)

Tipp

Die SQL DML-Befehle SELECT, INSERT und UPDATE weisen Standardkernelemente auf, können aber auch unterschiedliche Syntaxoptionen implementieren.

Der ANSI SQL-Standard definiert die grundlegende Syntax für DML-Befehle wie SELECT, INSERT, UPDATE und DELETE. Sowohl Netezza als auch Azure Synapse verwenden diese Befehle, aber in einigen Fällen gibt es Implementierungsunterschiede.

In den folgenden Abschnitten werden die Netezza-spezifischen DML-Befehle erläutert, die Sie bei einer Migration zu Azure Synapse berücksichtigen sollten.

Syntaxunterschiede in SQL DML

Berücksichtigen Sie bei der Migration die folgenden Syntaxunterschiede in der SQL-Datenbearbeitungssprache (Data Manipulation Language, DML) zwischen Netezza SQL und Azure Synapse:

  • STRPOS: In Netezza gibt die Funktion STRPOS die Position einer Teilzeichenfolge innerhalb einer Zeichenfolge zurück. Die entsprechende Funktion in Azure Synapse ist CHARINDEX, die Reihenfolge der Argumente ist jedoch umgekehrt. SELECT STRPOS('abcdef','def')... in Netezza entspricht z. B. SELECT CHARINDEX('def','abcdef')... in Azure Synapse.

  • AGE: Netezza unterstützt den AGE-Operator, um das Intervall zwischen zwei temporalen Werten zu ermitteln, z. B. zwischen Zeitstempeln oder Datumsangaben. Beispiel: SELECT AGE('23-03-1956','01-01-2019') FROM.... In Azure Synapse gibt DATEDIFF das Intervall an. Beispiel: SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Notieren Sie sich die Sequenz der Datumsdarstellung.

  • NOW(): Netezza verwendet NOW(), um CURRENT_TIMESTAMP in Azure Synapse darzustellen.

Funktionen, gespeicherte Prozeduren und Sequenzen

Tipp

Beurteilen Sie in der Vorbereitungsphase Anzahl und Typ der zu migrierenden Nicht-Datenobjekte.

Bei Migration von einer ausgereiften Legacy-Data Warehouse-Umgebung wie Netezza müssen häufig noch weitere Elemente als einfache Tabellen und Sichten in die neue Zielumgebung migriert werden. Zu den Beispielen gehören Funktionen, gespeicherte Prozeduren und Sequenzen.

Machen Sie im Rahmen der Vorbereitungsphase eine Bestandsaufnahme der zu migrierenden Objekte, und bestimmen Sie die Methoden für deren Handhabung. Weisen Sie dann im Projektplan entsprechende Ressourcen zu.

Die Azure-Umgebung kann Möglichkeiten bieten, die die als Funktionen oder gespeicherte Prozeduren in der Netezza-Umgebung implementierte Funktionalität ersetzen. In diesem Fall ist es häufig effizienter, die integrierten Azure-Funktionen zu verwenden, statt die Netezza-Funktionen umzuprogrammieren.

Tipp

Produkte und Dienste von Drittanbietern können die Migration von Nicht-Datenelementen automatisieren.

Microsoft-Partner bieten Tools und Dienste zur Automatisierung der Migration, einschließlich Datentypzuordnung. Außerdem können mit ETL-Tools von Drittanbietern wie Informatica oder Talend, die bereits in der IBM Netezza-Umgebung eingesetzt werden, alle erforderlichen Datentransformationen implementiert werden.

Weitere Informationen zu den einzelnen Elementen finden Sie in den folgenden Abschnitten.

Functions

Wie bei den meisten Datenbankprodukten unterstützt Netezza innerhalb der SQL-Implementierung System- und benutzerdefinierte Funktionen. Bei Migration zu einer anderen Datenbankplattform wie Azure Synapse sind gängige Systemfunktionen verfügbar und können ohne Änderung migriert werden. Einige Systemfunktionen weisen möglicherweise eine etwas andere Syntax auf, aber die erforderlichen Änderungen können automatisiert werden. Systemfunktionen, für die es keine Entsprechung gibt, oder etwaige benutzerdefinierte Funktionen müssen möglicherweise mithilfe der in der Zielumgebung verfügbaren Sprachen umprogrammiert werden. In Azure Synapse werden benutzerdefinierte Funktionen mithilfe der weit verbreiteten Sprache „Transact-SQL“ implementiert. Benutzerdefinierte Netezza-Funktionen sind in den Sprachen nzLua oder C++ programmiert.

Gespeicherte Prozeduren

Bei den meisten modernen Datenbankprodukten können Prozeduren in der Datenbank gespeichert werden. Netezza bietet die Sprache NZPLSQL, die auf Postgres PL/pgSQL basiert. Eine gespeicherte Prozedur enthält normalerweise SQL-Anweisungen und prozedurale Logik und kann Daten oder einen Status zurückgeben.

Azure Synapse Analytics unterstützt auch gespeicherte Prozeduren mithilfe von T-SQL. Wenn Sie also gespeicherte Prozeduren migrieren müssen, codieren Sie diese entsprechend neu.

Sequenzen

In Netezza ist eine Sequenz ein mit CREATE SEQUENCE erstelltes benanntes Datenbankobjekt, das den eindeutigen Wert über die NEXT VALUE FOR-Methode bereitstellen kann. Damit können eindeutige Zahlen zur Verwendung als Ersatzschlüsselwerte für Primärschlüsselwerte generiert werden.

In Azure Synapse gibt es CREATE SEQUENCE nicht. Sequenzen werden mithilfe von IDENTITY zum Erstellen von Ersatzschlüsseln oder einer verwalteten Identität unter Verwendung von SQL-Code zur Erstellung der nächsten Sequenznummer in einer Reihe verarbeitet.

Verwenden von EXPLAIN zum Überprüfen von Legacy-SQL

Tipp

Ermitteln Sie potenzielle Probleme bei der Migration mithilfe realer Abfragen aus den vorhandenen Systemabfrageprotokollen.

Erfassen Sie einige typische SQL-Anweisungen aus den Protokollen des bisherigen Abfrageverlaufs, um die Legacy-SQL-Anweisungen von Netezza auf Kompatibilität mit Azure Synapse auszuwerten. Versehen Sie diese Abfragen mit dem Präfix EXPLAIN, und führen Sie diese EXPLAIN-Anweisungen in Azure Synapse aus – sofern in Azure Synapse ein gleichartiges migriertes Datenmodell mit denselben Tabellen- und Spaltennamen vorhanden ist. Bei inkompatiblem SQL-Code wird ein Fehler zurückgegeben. Bestimmen Sie anhand dieser Informationen den Umfang der Umprogrammierung. Bei diesem Ansatz müssen keine Daten in die Azure-Umgebung geladen werden, sondern lediglich die entsprechenden Tabellen und Sichten erstellt werden.

Zuordnung von IBM Netezza zu T-SQL

Die Zuordnung von IBM Netezza zu T-SQL, die mit Azure Synapse SQL-Datentypen kompatibel ist, finden Sie in dieser Tabelle:

IBM Netezza-Datentyp Azure Synapse SQL-Datentyp
array Nicht unterstützt
BIGINT BIGINT
Binary Large Object [(n[K|M|G])] nvarchar [(n|max)]
 blob [(n[K|M|G])] nvarchar [(n|max)]
 byte [(n)] binary [(n)]|varbinary(max)
 byteint SMALLINT
 char varying [(n)] varchar [(n|max)]
character varying [(n)] varchar [(n|max)]
 char [(n)] char [(n)]|varchar(max)
character [(n)] char [(n)]|varchar(max)
 Character Large Object [(n[K|M|G])] varchar [(n|max)
 clob [(n[K|M|G])] varchar [(n|max)
 dataset Nicht unterstützt 
 date date
 dec [(p[,s])] decimal [(p[,s])]
 decimal [(p[,s])] decimal [(p[,s])]
 double precision float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 interval Nicht unterstützt 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 long vargraphic nvarchar(max)
 mbb Nicht unterstützt 
 mbr Nicht unterstützt 
 number [((p|*)[,s])] numeric [(p[,s])]
 numeric [(p [,s])]  numeric [(p[,s])]
 period (Zeitraum) Nicht unterstützt 
 real  real
 SMALLINT SMALLINT
 st_geometry Nicht unterstützt 
 time time
 time with time zone datetimeoffset
 timestamp  datetime2
 timestamp with time zone datetimeoffset
 varbyte varbinary [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray Nicht unterstützt 
 Xml Nicht unterstützt 
 xmltype Nicht unterstützt 

Zusammenfassung

Typische bestehende Legacy-Installationen von Netezza sind so implementiert, dass die Migration zu Azure Synapse problemlos erfolgen kann. Sie nutzen SQL für analytische Abfragen großer Datenvolumen und liegen in Form eines dimensionalen Datenmodells vor. Dadurch sind sie gut für die Migration zu Azure Synapse geeignet.

Um die Aufgabe der Migration des tatsächlichen SQL-Codes zu minimieren, folgen Sie diesen Empfehlungen:

  • Die anfängliche Migration des Data Warehouse sollte im Ist-Zustand erfolgen, um Risiken und Zeitaufwand zu minimieren, auch wenn die endgültige Umgebung ein anderes Datenmodell, wie z. B. einen Datentresor, vorsieht.

  • Machen Sie sich mit den Unterschieden bei der Implementierung von SQL von Netezza und Azure Synapse vertraut.

  • Verwenden Sie Metadaten und Abfrageprotokolle aus der vorhandenen Netezza-Implementierung, um die Auswirkungen der Unterschiede zu bewerten und einen Ansatz zur Abhilfe zu planen.

  • Automatisieren Sie den Prozess so weit wie möglich, um Fehler, Risiken und Zeitaufwand für die Migration zu minimieren.

  • Erwägen Sie das Hinzuziehen spezialisierter Microsoft-Partner und -Dienste, um die Migration zu optimieren.

Nächste Schritte

Weitere Informationen zu Tools von Microsoft und Drittanbietern finden Sie im nächsten Artikel dieser Reihe: Tools für die Data Warehouse-Migration von Netezza zu Azure Synapse Analytics.