Share via


SQL-problemen voor Netezza-migraties minimaliseren

Dit artikel is deel vijf van een zevendelige reeks met richtlijnen voor het migreren van Netezza naar Azure Synapse Analytics. De focus van dit artikel ligt op best practices voor het minimaliseren van SQL-problemen.

Overzicht

Kenmerken van Netezza-omgevingen

Tip

In het begin van de jaren 2000 was Netezza een pionier op het gebied van het datawarehouse-apparaat.

In 2003 bracht Netezza voor het eerst hun datawarehouse-apparaat uit. Het verlaagde de toegangskosten en verbeterde het gebruiksgemak van MPP-technieken (Massively Parallel Processing) om gegevensverwerking op schaal efficiënter mogelijk te maken dan de bestaande mainframe of andere MPP-technologieën die op dat moment beschikbaar waren. Sindsdien heeft het product zich ontwikkeld en heeft het veel installaties onder grote financiële instellingen, telecommunicatie en detailhandelsbedrijven. De oorspronkelijke implementatie gebruikte eigen hardware, waaronder veld programmeerbare poortmatrices ( of FPGA's) en was toegankelijk via EEN ODBC- of JDBC-netwerkverbinding via TCP/IP.

De meeste bestaande Netezza-installaties zijn on-premises, dus veel gebruikers overwegen om sommige of al hun Netezza-gegevens te migreren naar Azure Synapse Analytics om de voordelen van een overstap naar een moderne cloudomgeving te profiteren.

Tip

Veel bestaande Netezza-installaties zijn datawarehouses die gebruikmaken van een dimensionale gegevensmodel.

Netezza-technologie wordt vaak gebruikt voor het implementeren van een datawarehouse en ondersteunt complexe analysequery's op grote gegevensvolumes met behulp van SQL. Dimensionale gegevensmodellen, ster- of sneeuwvlokschema's, komen vaak voor, net als de implementatie van datamarts voor afzonderlijke afdelingen.

Deze combinatie van SQL- en dimensionale gegevensmodellen vereenvoudigt de migratie naar Azure Synapse, omdat de basisconcepten en SQL-vaardigheden overdraagbaar zijn. De aanbevolen aanpak is om het bestaande gegevensmodel as-is te migreren om risico's en tijd te verminderen. Zelfs als het uiteindelijk de bedoeling is om wijzigingen aan te brengen in het gegevensmodel (bijvoorbeeld door over te stappen op een gegevenskluismodel), voert u een initiële as-is-migratie uit en voert u vervolgens wijzigingen aan in de Azure-cloudomgeving, waarbij gebruik wordt gemaakt van de prestaties, elastische schaalbaarheid en kostenvoordelen.

Hoewel de SQL-taal is gestandaardiseerd, hebben afzonderlijke leveranciers in sommige gevallen eigen extensies geïmplementeerd. Dit document belicht mogelijke SQL-verschillen die u kunt tegenkomen tijdens het migreren vanuit een verouderde Netezza-omgeving en biedt tijdelijke oplossingen.

Gebruik Azure Data Factory om een migratie op basis van metagegevens te implementeren

Tip

Automatiseer het migratieproces met behulp van Azure Data Factory mogelijkheden.

Automatiseer en beheer het migratieproces door gebruik te maken van de mogelijkheden in de Azure-omgeving. Deze aanpak minimaliseert ook de impact van de migratie op de bestaande Netezza-omgeving, die mogelijk al bijna de volledige capaciteit heeft.

Azure Data Factory is een cloudservice voor gegevensintegratie waarmee gegevensgestuurde werkstromen in de cloud kunnen worden gemaakt voor het organiseren en automatiseren van gegevensverplaatsing en gegevenstransformatie. Met Data Factory kunt u gegevensgestuurde werkstromen maken en plannen, pijplijnen genoemd, die gegevens uit verschillende gegevensarchieven kunnen opnemen. Het kan gegevens verwerken en transformeren met behulp van rekenservices zoals Azure HDInsight Hadoop, Spark, Azure Data Lake Analytics en Azure Machine Learning.

Door metagegevens te maken om de te migreren gegevenstabellen en hun locatie weer te geven, kunt u de Data Factory-faciliteiten gebruiken om delen van het migratieproces te beheren en automatiseren. U kunt ook Azure Synapse Pipelines gebruiken.

SQL DDL-verschillen tussen Netezza en Azure Synapse

SQL Data Definition Language (DDL)

Tip

SQL DDL-opdrachten CREATE TABLE en CREATE VIEW hebben standaard kernelementen, maar worden ook gebruikt om implementatiespecifieke opties te definiëren.

De ANSI SQL-standaard definieert de basissyntaxis voor DDL-opdrachten zoals CREATE TABLE en CREATE VIEW. Deze opdrachten worden gebruikt in zowel Netezza als Azure Synapse, maar ze zijn ook uitgebreid voor het definiëren van implementatiespecifieke functies, zoals indexering, tabeldistributie en partitioneringsopties.

In de volgende secties worden netezza-specifieke opties besproken die u kunt overwegen tijdens een migratie naar Azure Synapse.

Tabeloverwegingen

Tip

Gebruik bestaande indexen om een indicatie te geven van de kandidaten voor indexering in het gemigreerde magazijn.

Bij het migreren van tabellen tussen verschillende technologieën worden alleen de onbewerkte gegevens en de beschrijvende metagegevens fysiek verplaatst tussen de twee omgevingen. Andere database-elementen van het bronsysteem, zoals indexen en logboekbestanden, worden niet rechtstreeks gemigreerd, omdat deze mogelijk niet nodig zijn of anders kunnen worden geïmplementeerd in de nieuwe doelomgeving. De optie in de TEMPORARY syntaxis van CREATE TABLE Netezza is bijvoorbeeld gelijk aan het voorvoegsel van de tabelnaam door een #-teken in Azure Synapse.

Het is belangrijk om te begrijpen waar prestatieoptimalisaties, zoals indexen, zijn gebruikt in de bronomgeving. Dit geeft aan waar prestatieoptimalisatie kan worden toegevoegd in de nieuwe doelomgeving. Als er bijvoorbeeld zonetoewijzingen zijn gemaakt in de Netezza-bronomgeving, kan dit erop wijzen dat er een niet-geclusterde index moet worden gemaakt in de gemigreerde Azure Synapse-database. Andere systeemeigen optimalisatietechnieken voor prestaties, zoals tabelreplicatie, zijn mogelijk meer van toepassing dan het maken van een rechte 'like-for-like'-index.

Niet-ondersteunde Netezza-databaseobjecttypen

Tip

Netezza-specifieke functies kunnen worden vervangen door Azure Synapse functies.

Netezza implementeert een aantal databaseobjecten die niet rechtstreeks worden ondersteund in Azure Synapse, maar er zijn methoden om dezelfde functionaliteit binnen de nieuwe omgeving te bereiken:

  • Zonekaarten: in Netezza worden zonekaarten automatisch gemaakt en onderhouden voor sommige kolomtypen en gebruikt tijdens het uitvoeren van query's om de hoeveelheid gegevens te beperken die moet worden gescand. Zonetoewijzingen worden gemaakt op de volgende kolomtypen:

    • INTEGER kolommen met een lengte van 8 bytes of minder.
    • Tijdelijke kolommen. Bijvoorbeeld , DATETIMEen TIMESTAMP.
    • CHAR kolommen, als deze deel uitmaken van een gerealiseerde weergave en worden vermeld in de ORDER BY -component.

    U kunt nagaan welke kolommen zonetoewijzingen hebben met behulp van het nz_zonemap hulpprogramma, dat deel uitmaakt van de NZ Toolkit. Azure Synapse bevat geen zonetoewijzingen, maar u kunt vergelijkbare resultaten bereiken door andere door de gebruiker gedefinieerde indextypen en/of partitionering te gebruiken.

  • Geclusterde basistabellen (CBT): in Netezza worden CGT's vaak gebruikt voor feitentabellen, die miljarden records kunnen bevatten. Het scannen van zo'n enorme tabel vergt veel verwerkingstijd, omdat een volledige tabelscan mogelijk nodig is om relevante records te verkrijgen. Door records te ordenen op beperkende CBT kan Netezza records groeperen in dezelfde of nabijgelegen gebieden. Met dit proces worden ook zonetoewijzingen gemaakt die de prestaties verbeteren door de hoeveelheid te scannen gegevens te verminderen.

    In Azure Synapse kunt u een vergelijkbaar effect bereiken door het gebruik van partitionering en/of het gebruik van andere indexen.

  • Gerealiseerde weergaven: Netezza ondersteunt gerealiseerde weergaven en raadt aan om een of meer van deze weergaven te maken voor grote tabellen met veel kolommen, waarbij slechts enkele van deze kolommen regelmatig worden gebruikt in query's. Het systeem onderhoudt automatisch gerealiseerde weergaven wanneer gegevens in de basistabel worden bijgewerkt.

    Azure Synapse ondersteunt gerealiseerde weergaven, met dezelfde functionaliteit als Netezza.

Toewijzing van Netezza-gegevenstypen

Tip

Beoordeel de impact van niet-ondersteunde gegevenstypen als onderdeel van de voorbereidingsfase.

De meeste Netezza-gegevenstypen hebben een direct equivalent in Azure Synapse. In de volgende tabel ziet u deze gegevenstypen, samen met de aanbevolen methode voor het toewijzen ervan.

Netezza-gegevenstype Azure Synapse gegevenstype
BIGINT BIGINT
BINAIR VARIËREND(n) VARBINARY(n)
BOOLEAN BEETJE
BYTEINT TINYINT
TEKEN VARIËREND(n) VARCHAR(n)
TEKEN(n) TEKEN(n)
DATE DATUM(datum)
DECIMAAL(p,s) DECIMAAL(p,s)
DUBBELE PRECISIE FLOAT
FLOAT(n) FLOAT(n)
INTEGER INT
INTERVAL INTERVAL-gegevenstypen worden momenteel niet rechtstreeks ondersteund in Azure Synapse, maar kunnen worden berekend met tijdelijke functies zoals DATEDIFF.
GELD GELD
NATIONAAL TEKEN VARIEERT(n) NVARCHAR(n)
NATIONAAL KARAKTER(n) NCHAR(n)
GETAL(p;s) GETAL(p;s)
REAL REAL
SMALLINT SMALLINT
ST_GEOMETRY(n) Ruimtelijke gegevenstypen zoals ST_GEOMETRY worden momenteel niet ondersteund in Azure Synapse, maar de gegevens kunnen worden opgeslagen als VARCHAR of VARBINARY.
TIME TIME
TIJD MET TIJDZONE DATETIMEOFFSET
TIMESTAMP DATETIME

DDL-generatie (Data Definition Language)

Tip

Gebruik bestaande Netezza-metagegevens om het genereren van CREATE TABLE en CREATE VIEW DDL voor Azure Synapse te automatiseren.

Bewerk bestaande Netezza CREATE TABLE en CREATE VIEW scripts om de equivalente definities te maken met gewijzigde gegevenstypen zoals eerder beschreven, indien nodig. Dit omvat meestal het verwijderen of wijzigen van eventuele extra Netezza-specifieke componenten, zoals ORGANIZE ON.

Alle informatie die de huidige definities van tabellen en weergaven binnen de bestaande Netezza-omgeving specificeert, wordt echter bewaard in systeemcatalogustabellen. Dit is de beste bron van deze informatie, omdat deze gegarandeerd up-to-date en volledig is. Houd er rekening mee dat door de gebruiker onderhouden documentatie mogelijk niet is gesynchroniseerd met de huidige tabeldefinities.

Open deze informatie met behulp van hulpprogramma's zoals nz_ddl_table en genereer de CREATE TABLE DDL-instructies. Bewerk deze instructies voor de equivalente tabellen in Azure Synapse.

Tip

Hulpprogramma's en services van derden kunnen taken voor gegevenstoewijzing automatiseren.

Er zijn Microsoft-partners die hulpprogramma's en services bieden voor het automatiseren van migratie, waaronder toewijzing van gegevenstypen. En als een ETL-hulpprogramma van derden, zoals Informatica of Talend, al in gebruik is in de Netezza-omgeving, kan dat hulpprogramma alle vereiste gegevenstransformaties implementeren.

SQL DML-verschillen tussen Netezza en Azure Synapse

SQL Data Manipulation Language (DML)

Tip

SQL DML-opdrachten SELECT, INSERTen UPDATE hebben standaard kernelementen, maar kunnen ook verschillende syntaxisopties implementeren.

De ANSI SQL-standaard definieert de basissyntaxis voor DML-opdrachten zoals SELECT, INSERT, UPDATEen DELETE. Zowel Netezza als Azure Synapse deze opdrachten gebruiken, maar in sommige gevallen zijn er implementatieverschillen.

In de volgende secties worden de Netezza-specifieke DML-opdrachten besproken waarmee u rekening moet houden tijdens een migratie naar Azure Synapse.

Verschillen in SQL DML-syntaxis

Houd rekening met deze verschillen in DML-syntaxis (SQL Data Manipulation Language) tussen Netezza SQL en Azure Synapse bij het migreren:

  • STRPOS: in Netezza retourneert de STRPOS functie de positie van een subtekenreeks binnen een tekenreeks. De equivalente functie in Azure Synapse is CHARINDEX, waarbij de volgorde van de argumenten is omgekeerd. In Is Netezza bijvoorbeeld SELECT STRPOS('abcdef','def')... gelijk aan SELECT CHARINDEX('def','abcdef')... in Azure Synapse.

  • AGE: Netezza ondersteunt de AGE operator om het interval tussen twee tijdelijke waarden, zoals tijdstempels of datums, op te geven. Bijvoorbeeld SELECT AGE('23-03-1956','01-01-2019') FROM.... Geeft in Azure Synapse DATEDIFF het interval op. Bijvoorbeeld SELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM.... Noteer de volgorde van de datumweergave.

  • NOW(): Netezza gebruikt NOW() om te vertegenwoordigen CURRENT_TIMESTAMP in Azure Synapse.

Functies, opgeslagen procedures en reeksen

Tip

Als onderdeel van de voorbereidingsfase evalueert u het aantal en het type niet-gegevensobjecten die worden gemigreerd.

Wanneer u migreert vanuit een verouderde datawarehouse-omgeving, zoals Netezza, zijn er vaak andere elementen dan eenvoudige tabellen en weergaven die moeten worden gemigreerd naar de nieuwe doelomgeving. Voorbeelden hiervan zijn functies, opgeslagen procedures en reeksen.

Maak als onderdeel van de voorbereidingsfase een inventaris van de objecten die moeten worden gemigreerd en definieer de methoden voor het verwerken ervan. Wijs vervolgens een geschikte toewijzing van resources toe in het projectplan.

Er kunnen faciliteiten in de Azure-omgeving zijn die de functionaliteit vervangen die is geïmplementeerd als functies of opgeslagen procedures in de Netezza-omgeving. In dit geval is het vaak efficiënter om de ingebouwde Azure-faciliteiten te gebruiken in plaats van de Netezza-functies opnieuw te gebruiken.

Tip

Producten en services van derden kunnen de migratie van niet-gegevenselementen automatiseren.

Microsoft-partners bieden hulpprogramma's en services waarmee de migratie kan worden geautomatiseerd, inclusief het toewijzen van gegevenstypen. Daarnaast kunnen ETL-hulpprogramma's van derden, zoals Informatica of Talend, die al in de IBM Netezza-omgeving worden gebruikt, alle vereiste gegevenstransformaties implementeren.

Zie de volgende secties voor meer informatie over elk van deze elementen.

Functions

Netezza ondersteunt net als bij de meeste databaseproducten systeemfuncties en door de gebruiker gedefinieerde functies binnen de SQL-implementatie. Wanneer u migreert naar een ander databaseplatform, zoals Azure Synapse, zijn algemene systeemfuncties beschikbaar en kunnen deze zonder wijzigingen worden gemigreerd. Sommige systeemfuncties hebben mogelijk iets andere syntaxis, maar de vereiste wijzigingen kunnen worden geautomatiseerd. Systeemfuncties waarvoor er geen equivalent is, zoals willekeurige door de gebruiker gedefinieerde functies, moeten mogelijk opnieuw worden gecodeerd met behulp van de talen die beschikbaar zijn in de doelomgeving. Azure Synapse gebruikt de populaire Transact-SQL-taal om door de gebruiker gedefinieerde functies te implementeren. Netezza door de gebruiker gedefinieerde functies zijn gecodeerd in nzlua- of C++-talen.

Opgeslagen procedures

De meeste moderne databaseproducten maken het mogelijk om procedures in de database op te slaan. Netezza biedt de NZPLSQL-taal, die is gebaseerd op Postgres PL/pgSQL. Een opgeslagen procedure bevat doorgaans SQL-instructies en bepaalde procedurelogica, en kan gegevens of een status retourneren.

Azure Synapse Analytics ondersteunt ook opgeslagen procedures met behulp van T-SQL, dus als u opgeslagen procedures moet migreren, moet u deze dienovereenkomstig opnieuw coderen.

Reeksen

In Netezza is een reeks een benoemd databaseobject dat is gemaakt via CREATE SEQUENCE dat de unieke waarde kan leveren via de NEXT VALUE FOR methode. Gebruik deze om unieke getallen te genereren voor gebruik als surrogaatsleutelwaarden voor primaire sleutelwaarden.

In Azure Synapse is er geen CREATE SEQUENCE. Reeksen worden verwerkt met behulp van IDENTITEIT om surrogaatsleutels of beheerde identiteiten te maken met behulp van SQL-code om het volgende reeksnummer in een reeks te maken.

EXPLAIN gebruiken om verouderde SQL te valideren

Tip

Potentiële migratieproblemen vinden met behulp van echte query's uit de bestaande systeemquerylogboeken.

Leg enkele representatieve SQL-instructies vast uit de verouderde querygeschiedenislogboeken om verouderde Netezza SQL te evalueren op compatibiliteit met Azure Synapse. Voeg deze query's vervolgens toe aan EXPLAIN en voer deze EXPLAIN instructies uit in Azure Synapse, uitgaande van een 'like-for-like' gemigreerd gegevensmodel in Azure Synapse met dezelfde tabel- en kolomnamen. Elke incompatibele SQL retourneert een fout. Gebruik deze informatie om de schaal van de heroderende taak te bepalen. Deze benadering vereist niet dat gegevens in de Azure-omgeving worden geladen, maar alleen dat de relevante tabellen en weergaven zijn gemaakt.

IBM Netezza naar T-SQL-toewijzing

De ibm netezza naar T-SQL compatibel met Azure Synapse SQL-gegevenstypetoewijzing bevindt zich in deze tabel:

IBM Netezza-gegevenstype Azure Synapse SQL-gegevenstype
matrix Niet ondersteund
bigint bigint
binair groot object [(n[K| M|G])] nvarchar [(n|max)]
 blob [(n[K| M|G])] nvarchar [(n|max)]
 byte [(n)] binair [(n)]|varbinary(max)
 byteint smallint
 teken varieert [(n)] varchar [(n|max)]
teken varieert [(n)] varchar [(n|max)]
 teken [(n)] char [(n)]|varchar(max)
teken [(n)] char [(n)]|varchar(max)
 teken groot object [(n[K| M|G])] varchar [(n|max)
 clob [(n[K| M|G])] varchar [(n|max)
 Dataset Niet ondersteund 
 datum datum
 dec [(p[,s])] decimaal [(p[,s])]
 decimaal [(p[,s])] decimaal [(p[,s])]
 dubbele precisie float(53)
 float [(n)] float [(n)]
 graphic [(n)] nchar [(n)]| varchar(max)
 interval Niet ondersteund 
 json [(n)] nvarchar [(n|max)]
 long varchar nvarchar(max)
 lange vargraphic nvarchar(max)
 Mbb Niet ondersteund 
 Mbr Niet ondersteund 
 getal [(p|*)[,s])] numeriek [(p[,s])]
 numeriek [(p [,s])]  numeriek [(p[,s])]
 period Niet ondersteund 
 werkelijk  werkelijk
 smallint smallint
 st_geometry Niet ondersteund 
 tijd tijd
 tijd met tijdzone datetimeoffset
 tijdstempel  datetime2
 tijdstempel met tijdzone datetimeoffset
 varbyte varbinair [(n|max)]
 varchar [(n)]  varchar [(n)]
 vargraphic [(n)] nvarchar [(n|max)]
 varray Niet ondersteund 
 xml Niet ondersteund 
 xmltype Niet ondersteund 

Samenvatting

Typische bestaande verouderde Netezza-installaties worden geïmplementeerd op een manier die migratie naar Azure Synapse eenvoudig maakt. Ze gebruiken SQL voor analytische query's op grote gegevensvolumes en hebben een vorm van dimensionale gegevensmodellen. Deze factoren maken ze goede kandidaten voor migratie naar Azure Synapse.

Volg deze aanbevelingen om de migratie van de werkelijke SQL-code te minimaliseren:

  • De initiële migratie van het datawarehouse moet zijn zoals het is om risico's en tijd te minimaliseren, zelfs als de uiteindelijke uiteindelijke omgeving een ander gegevensmodel, zoals gegevenskluis, bevat.

  • Inzicht in de verschillen tussen netezza SQL-implementatie en Azure Synapse.

  • Gebruik metagegevens en querylogboeken uit de bestaande Netezza-implementatie om de impact van de verschillen te beoordelen en een aanpak te plannen om de verschillen te verhelpen.

  • Automatiseer het proces waar mogelijk om fouten, risico's en tijd voor de migratie te minimaliseren.

  • Overweeg het gebruik van gespecialiseerde Microsoft-partners en -services om de migratie te stroomlijnen.

Volgende stappen

Zie het volgende artikel in deze reeks voor meer informatie over hulpprogramma's van Microsoft en derden: Hulpprogramma's voor migratie van Netezza-datawarehouse naar Azure Synapse Analytics.