Met het synchronize
SQL-statement kunnen eenvoudig twee tabellen enkelzijdig of dubbelzijdig gesynchroniseerd worden qua inhoud. Zie Synchroniseer uw gegevens met één SQL-statement over meerdere cloudplatformen heen of Exact Online synchroniseren met Visma.net Financials voor meer informatie.
Met bijvoorbeeld het volgende statement wordt met insert
en update
de inhoud van de tabel ist
bijgewerkt zodat die tenminste de inhoud van soll
bevat. Er worden geen rijen verwijderd uit ist
omdat er geen delete
opgegeven is.
In de tabellen ist
en soll
is de kolom nk
de unieke natuurlijke sleutel en uid
de unieke technische sleutel:
synchronize ist
from soll
with insert
or
update all
except created_by, created_at, date_created, session_created, uid
ignore changes to modified_by, modified_at, date_modified, session_modified, created_by, created_at, date_created, session_created, uid
identified
by nk
Voor het laden wordt - waar mogelijk - gebruik gemaakt van bulkloaders op de verschillende platofmren. Bulkloaders zijn bijvoorbeeld beschikbaar op Oracle (C-driver), PostgreSQL en SQL Server.
Bij het gebruik van bulkloaders wordt eerst de te verwerken dataset qua toevoegingen en mutaties samengesteld. De toevoegingen worden in groepen (“batches”) van bijvoorbeeld 1.000 rijen gehakt en dan ingelezen. Het aantal rijen is gelimiteerd per platform en is instelbaar via de driverattribuut bulk-insert-page-size-rows
, gecombineerd met een limiet qua aantal bytes via bulk-insert-page-size-bytes
.
Op de meeste platformen zal een bulkloader stoppen met laden van de gehele groep bij de eerste de beste foutmelding. Vaak zullen zelfs voorgaande rijen in de groep die reeds deels of geheel verwerkt zijn worden teruggedraaid.
Een foutmelding treedt bijvoorbeeld op indien de soll
tabel deels gegevens bevat die niet geladen kunnen worden, zoals bijvoorbeeld te lange tekst voor het tekstveld. Zo’n error ziet er op bijvoorbeeld PostgreSQL als volgt uit:
itgenpsr010: Could not bulk insert rows into the table ‘database.public.ist’.
22001: value too long for type character varying(240).
Het Invantive SQL synchronize
statement kan echter ook ge ïnstrueerd worden om met kleine groepen te werken en foutmeldingen per groep te combineren tot op zekere hoogte.
De groepgrootte kan aangepast worden met de batchsize
clause. Door hier bijvoorbeeld voor 10 of zelfs 1 te kiezen wordt het laden significant langzamer, maar zal een groter percentage van de mutaties verwerkt worden vooraleer een foutmelding optreedt.
Met de clause continue on first ... errors
kan bovendien ingesteld worden dat pas na een aantal foutmeldingen het synchronize
statement vroegtijdig be ëindigd wordt.
De combinatie van deze technieken leidt tot een nieuwe synchronize
statement dat een groter percentage van de gegevens zal laden ondanks fatale fouten in de data:
synchronize ist
from soll
with insert
or
update all
except created_by, created_at, date_created, session_created, uid
ignore changes to modified_by, modified_at, date_modified, session_modified, created_by, created_at, date_created, session_created, uid
identified
by nk
batchsize 1
continue on first 500 errors