Podczas eksportowania dużego zrzutu danych największym zmartwieniem powinno być łagodzenie awarii. Nawet jeśli możesz nasycić połączenie sieciowe GB, przeniesienie 10 TB danych zajmie> 24 godziny. Nie chcesz ponownie uruchamiać tego z powodu awarii (takiej jak przekroczenie limitu czasu połączenia z bazą danych).
Oznacza to, że powinieneś podzielić eksport na wiele części. Możesz to zrobić, dodając zakres identyfikatorów do instrukcji select wewnątrz kopii (właśnie edytowałem Twój przykład, więc mogą wystąpić błędy):
COPY (SELECT (ID, NAME, ADDRESS) FROM CUSTOMERS WHERE ID BETWEEN 0 and 1000000) TO ‘CUSTOMERS_DATA_0.CSV WITH DELIMITER '|' CSV;
Można oczywiście wygenerować te instrukcje za pomocą krótkiego programu; nie zapomnij zmienić nazwy pliku wyjściowego dla każdego z nich. Polecam wybrać zakres identyfikatorów, który daje około gigabajta na plik wyjściowy, co daje 10 000 plików pośrednich.
To, gdzie napiszesz te pliki, zależy od Ciebie. Jeśli S3FS jest wystarczająco niezawodny, myślę, że to dobry pomysł.
Dzieląc rozładunek na wiele mniejszych kawałków, można go również podzielić na wiele instancji EC2. Prawdopodobnie nasycisz przepustowość maszyny bazodanowej tylko kilkoma czytnikami. Należy również pamiętać, że AWS pobiera opłatę w wysokości 0,01 USD za GB za transfer danych między strefami AZ – przy 10 TB to 100 USD – więc upewnij się, że te maszyny EC2 znajdują się w tym samym AZ, co maszyna bazy danych.
Oznacza to również, że możesz wykonać rozładowywanie, gdy baza danych nie jest w inny sposób zajęta (tj. poza normalnymi godzinami pracy).
Na koniec oznacza to, że możesz przetestować swój proces i naprawić wszelkie błędy danych bez konieczności uruchamiania całego eksportu (lub przetwarzania 10 TB danych dla każdej poprawki).
Po stronie importu Redshift może załadować wiele pliki równolegle . Powinno to poprawić Twój ogólny czas, chociaż tak naprawdę nie mogę powiedzieć, jak bardzo.
Jedno zastrzeżenie:użyj pliku manifestu zamiast prefiksu nazwy obiektu. Spotkałem się z przypadkami, w których ostateczna spójność S3 powodowała upuszczanie plików podczas ładowania.