Domyślnie każdy plasterek tworzy jeden plik (wyjaśnienie poniżej). Znany jest sposób obejścia tego problemu - dodanie LIMIT
do najbardziej zewnętrznego zapytania zmusi węzeł wiodący do przetworzenia całej odpowiedzi - w ten sposób utworzy tylko jeden plik.
SELECT * FROM (YOUR_QUERY) LIMIT 2147483647;
ta działa tylko tak długo, jak wewnętrzna zapytanie zwraca mniej niż 2^31 - 1 rekordów, jako LIMIT
klauzula bierze całkowitą bez znaku argumentu.
W jaki sposób tworzone są pliki? http://docs.aws.amazon.com/redshift/latest/dg/t_Unloading_tables.html
Amazon Redshift splits the results of a select statement across a set of files, one or more files per node slice, to simplify parallel reloading of the data.
Więc teraz wiemy, że co najmniej jeden plik na plaster jest tworzony. Ale czym jest plaster? http://docs.aws.amazon.com/redshift/latest/dg/t_Distributing_data.html
The number of slices is equal to the number of processor cores on the node. For example, each XL compute node has two slices, and each 8XL compute node has 16 slices.
Wydaje się, że minimalna liczba wynosi 2 kromki i będzie rosnąć większa, gdy więcej węzłów lub bardziej potężne węzły dodaje.
Próbowałem użyć "select ... limit" w klauzuli unload, mówi "ERROR: Klauzula limitu nie jest obsługiwana" – ciphor
@ciphor, to coś nowego, może jakieś zmiany na 1 grudnia? Przetestowałem że owijanie wszystko wewnątrz innej kwerendy select * from() działa, ale nie spędza dużo czasu na to - wiem, że mam jeden plik, ale na jak długo to będzie działać? Nie mam pojęcia ... –
@TomaszTybulewicz Czy masz link Dokumentacja dla Twojego komentarza na temat korzystania limit życie tylko węzeł lidera zrobić przetwarzania i 2^31-1 rekordy? Nie mogę znaleźć go nigdzie w dokumentach. –