Standardmäßig erstellt jede Scheibe eine Datei (Erklärung unten). Es gibt eine bekannte Problemumgehung: Durch das Hinzufügen einer LIMIT
zur äußersten Abfrage wird der Führungsknoten gezwungen, die gesamte Antwort zu verarbeiten - daher wird nur eine Datei erstellt.
SELECT * FROM (YOUR_QUERY) LIMIT 2147483647;
Dies funktioniert nur, solange Sie Ihre innere Abfrage gibt weniger als 2^31-1 Aufzeichnungen, wie eine LIMIT
Klausel ein unsigned integer Argument.
Wie werden Dateien erstellt? 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.
So, jetzt wissen wir, dass mindestens eine Datei pro Scheibe erzeugt wird. Aber was ist eine Scheibe? 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.
Es scheint, dass die minimale Anzahl der Scheiben 2, und es wird größer werden, wenn mehrere Knoten oder leistungsstärkere Knoten hinzugefügt wird.
Ich habe versucht, "select ... limit" in unload-Klausel zu verwenden, es heißt "FEHLER: Limit-Klausel wird nicht unterstützt" – ciphor
@ciphor, das ist etwas Neues, vielleicht einige Änderungen am 1. Dezember? Ich habe getestet, dass das Wrapping aller Abfrage in einem anderen SELECT * FROM() funktioniert, aber ich habe nicht viel Zeit damit verbracht - ich weiß, dass ich eine einzelne Datei habe, aber für wie lange wird es funktionieren? Ich habe keine Ahnung ... –
@TomaszTybulewicz Haben Sie einen Dokumentationslink für Ihren Kommentar über die Verwendung eines LIMIT, um nur den Führungsknoten zu zwingen, die Verarbeitung und die 2^31-1 Datensätze zu machen? Ich kann es nirgends in den Dokumenten finden. –