2017-03-22 1 views
1

Ich versuche, die Ergebnisse aus einer Rotverschiebung Abfrage in einem Bucket-Ordner, der das Datum von gestern ist, zu entladen.Redshift Entladen in S3 Location, das ist eine verkettete Zeichenfolge

So im folgenden Beispiel sollen die Daten in s3 sein: // mybucket/Reporting/20170321/myreport-000

unload ('select * from #my_report') 
to 's3://mybucket/reporting/' || replace(trunc(current_date - 1),'-','') || '/myreport' 
credentials 'aws_access_key_id=key;aws_secret_access_key=secretkey' 
delimiter ',' 
gzip addquotes null as '' 
PARALLEL off 
allowoverwrite; 

Jedoch habe ich den Fehler

[Amazon](500310) Invalid operation: syntax error at or near "||"; 

Ist die String-Verkettung nicht zuerst bewerten?

Antwort

0

Es ist nicht möglich, die Pfadanweisung UNLOAD dynamisch zu erstellen.

Zwei Methoden, die ich vorschlagen kann:

  • Methode 1: Ich würde vorschlagen, ein Shell-Skript/Python/Javascript zu schreiben, wo Sie Variablen erstellen können, dann in diesen Variablen gehen in eine statement-Abfrage-Verbindung.
  • Methode 2: Oder Sie können RedshiftCopyActivity in AWS Data Pipeline verwenden, um von Redshift zu S3 zu kopieren. Eingabe ist RedshiftDataNode und Ausgabe ist S3DataNode, wo Sie den Ausdruck für DirectoryPath angeben können.

    Wenn ich eine schlechte Annahme gemacht habe, bitte Kommentar und ich werde meine Antwort neu fokussieren.
+0

Könnte es mit PREPARE/EXECUTE getan werden? http://docs.aws.amazon.com/redshift/latest/dg/r_PREPARE.html – systemjack

+0

@systemjack - Von dem, was ich weiß, Nein. Es kann nicht mit PREPARE/EXECUTE Befehl gemacht werden. Ein EXECUTE-Befehl muss für die vorbereitete Anweisung ausgegeben werden, die wiederum der obigen Frage entspricht. –

Verwandte Themen