Bij het exporteren van een grote datadump zou uw grootste zorg het beperken van fouten moeten zijn. Zelfs als u een GB-netwerkverbinding zou kunnen verzadigen, duurt het verplaatsen van 10 TB aan gegevens> 24 uur. U wilt dat niet opnieuw moeten starten vanwege een storing (zoals een time-out voor een databaseverbinding).
Dit houdt in dat u de export in meerdere stukken moet opsplitsen. U kunt dit doen door een ID-bereik toe te voegen aan de select-instructie in de kopie (ik heb zojuist uw voorbeeld bewerkt, dus er kunnen fouten zijn):
COPY (SELECT (ID, NAME, ADDRESS) FROM CUSTOMERS WHERE ID BETWEEN 0 and 1000000) TO ‘CUSTOMERS_DATA_0.CSV WITH DELIMITER '|' CSV;
U zou deze verklaringen natuurlijk genereren met een kort programma; vergeet niet de naam van het uitvoerbestand voor elk bestand te wijzigen. Ik raad aan een ID-bereik te kiezen dat ongeveer een gigabyte per uitvoerbestand oplevert, wat resulteert in 10.000 tussenbestanden.
Waar u deze bestanden schrijft, is aan u. Als S3FS voldoende betrouwbaar is, denk ik dat het een goed idee is.
Door de lossing in meerdere kleinere stukken te splitsen, kunt u deze ook verdelen over meerdere EC2-instanties. U zult waarschijnlijk de bandbreedte van de databasemachine verzadigen met slechts een paar lezers. Houd er ook rekening mee dat AWS $ 0,01 per GB in rekening brengt voor cross-AZ-gegevensoverdracht -- met 10 TB is dat $ 100 -- dus zorg ervoor dat deze EC2-machines zich in dezelfde AZ bevinden als de databasemachine.
Het betekent ook dat u het uitladen kunt uitvoeren terwijl de database op een andere manier niet bezet is (dwz buiten de normale werkuren).
Ten slotte betekent dit dat u uw proces kunt testen en dat u eventuele gegevensfouten kunt herstellen zonder dat u de volledige export hoeft uit te voeren (of 10 TB aan gegevens voor elke reparatie hoeft te verwerken).
Aan de importkant kan Redshift meerdere bestanden parallel . Dit zou je totale tijd moeten verbeteren, hoewel ik niet echt kan zeggen hoeveel.
Een waarschuwing:gebruik een manifestbestand in plaats van een voorvoegsel voor de objectnaam. Ik ben gevallen tegengekomen waarin de uiteindelijke consistentie van S3 ervoor zorgde dat bestanden werden weggelaten tijdens het laden.