2013-08-14 2 views
5

Wenn ich eine Tabelle von Amazon redshift auf S3 entlade, teilt sie die Tabelle immer in zwei Teile auf, egal wie klein die Tabelle ist. Ich habe die Redshift-Dokumentation bezüglich des Entladens gelesen, aber keine anderen Antworten als es sagt, manchmal teilt es die Tabelle auf (ich habe es noch nie gesehen). Ich habe zwei Fragen:beim Entladen einer Tabelle von Amazon redshift zu s3, wie erzeuge ich nur eine Datei

  • Hat jemand einen Fall gesehen, in dem nur eine Datei erstellt wird?

  • Gibt es eine Möglichkeit, Rotverschiebung in eine einzelne Datei zu entladen?

Antwort

4

Amazon hat kürzlich die Unterstützung für das Entladen in eine einzelne Datei hinzugefügt, indem PARALLEL OFF in der UNLOAD-Anweisung verwendet wurde. Beachten Sie, dass Sie immer noch mehr als eine Datei erhalten können, wenn sie größer als 6,2 GB ist.

0

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.

+0

Ich habe versucht, "select ... limit" in unload-Klausel zu verwenden, es heißt "FEHLER: Limit-Klausel wird nicht unterstützt" – ciphor

+0

@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 ... –

+0

@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. –

1

Ab dem 6. Mai 2014 UNLOAD Abfragen unterstützen eine neue PARALLEL Optionen. Übergeben PARALLEL OFF wird eine einzige Datei ausgeben, wenn Ihre Daten weniger als 6,2 Gigs (Daten in 6,2 GB Chunks aufgeteilt ist).

Verwandte Themen