2017-03-22 20 views
1

赤いシフトクエリの結果を昨日のバケットフォルダにアンロードしようとしています。Redshift S3にアンロード連結された文字列である場所

ので、以下の例では、データはS3にする必要があります:// mybucket /レポーティング/ 20170321/MyReportという-000

私はエラー

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

を得るしかし

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; 

がい文字列の連結最初に評価しない?

答えて

0

UNLOADパスステートメントを動的に構築することはできません。私が提案することができます

二つの方法:

  • 方法1:私は、接続のステートメントのクエリにそれらの変数を渡し、その後、変数を作成することができ、シェルスクリプト/ Pythonの/ Javascriptを書いてお勧めします。
  • 方法2:AWS Data PipelineRedshiftCopyActivityを使用すると、RedshiftからS3にコピーできます。入力はRedshiftDataNodeで、出力はS3DataNodeで、ここではdirectoryPathの式を指定できます。

    私が間違った仮定をした場合は、コメントしてください。
+0

PREPARE/EXECUTEで実行できますか? http://docs.aws.amazon.com/redshift/latest/dg/r_PREPARE.html – systemjack

+0

@systemjack - 私が知っている通り、いいえ。PREPARE/EXECUTEコマンドでは実行できません。 EXECUTEコマンドは、準備されたステートメントに対して発行する必要があります。これは、上記の質問と同じです。 –