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 ,
DATE
TIME
enTIMESTAMP
. -
CHAR
kolommen, als deze deel uitmaken van een gerealiseerde weergave en worden vermeld in deORDER 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
, INSERT
en UPDATE
hebben standaard kernelementen, maar kunnen ook verschillende syntaxisopties implementeren.
De ANSI SQL-standaard definieert de basissyntaxis voor DML-opdrachten zoals SELECT
, INSERT
, UPDATE
en 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 deSTRPOS
functie de positie van een subtekenreeks binnen een tekenreeks. De equivalente functie in Azure Synapse isCHARINDEX
, waarbij de volgorde van de argumenten is omgekeerd. In Is Netezza bijvoorbeeldSELECT STRPOS('abcdef','def')...
gelijk aanSELECT CHARINDEX('def','abcdef')...
in Azure Synapse.AGE
: Netezza ondersteunt deAGE
operator om het interval tussen twee tijdelijke waarden, zoals tijdstempels of datums, op te geven. BijvoorbeeldSELECT AGE('23-03-1956','01-01-2019') FROM...
. Geeft in Azure SynapseDATEDIFF
het interval op. BijvoorbeeldSELECT DATEDIFF(day, '1956-03-26','2019-01-01') FROM...
. Noteer de volgorde van de datumweergave.NOW()
: Netezza gebruiktNOW()
om te vertegenwoordigenCURRENT_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.