0

我一直在Redshift中使用UNLOAD語句一段時間,它可以更容易地將文件轉儲到S3,然後讓人們進行分析。亞馬遜Redshift - 卸載到S3 - 動態S3文件名

現在已經到了嘗試實現自動化的時候了。我們有Amazon Data Pipeline運行幾個任務,我想運行SQLActivity自動執行UNLOAD。我使用S3中的SQL腳本。

查詢本身是正確的,但我一直在試圖找出如何動態分配文件的名稱。例如:

UNLOAD('<the_query>') 
TO 's3://my-bucket/' || to_char(current_date) 
WITH CREDENTIALS '<credentials>' 
ALLOWOVERWRITE 
PARALLEL OFF 

不工作,當然,我懷疑你不能在「TO」行執行功能(to_char)。有什麼其他方式可以做到嗎?

如果UNLOAD是沒有辦法的辦法,我有任何其他選項如何將此類任務結合現有的基礎設施(Redshift + S3 + Data Pipeline,我們Amazon EMR尚未生效)自動化。

,我認爲可以工作(但不知道)的唯一事情是不是不使用腳本,該腳本複製到Script選項SQLActivity(它指向文件的時刻)和基準{@ScheduleStartTime}

回答

1

爲什麼不使用RedshiftCopyActivity從Redshift複製到S3?輸入是RedshiftDataNode,輸出是S3DataNode,您可以在其中指定directoryPath的表達式。

您也可以在RedshiftCopyActivity中指定transformSql屬性來覆蓋默認值:select * from + inputRedshiftTable。

樣品管道:

{ 「對象」:[{ 「ID」: 「CSVId1」, 「名」: 「DefaultCSV1」, 「類型」: 「CSV」 },{ 「ID」: 「RedshiftDatabaseId1」, 「的databaseName」: 「DBNAME」, 「用戶名」: 「用戶」, 「名」: 「DefaultRedshiftDatabase1」, 「*密碼」: 「密碼」, 「類型」: 「RedshiftDatabase」, 「clusterId」:「redshiftclusterId」 },{ 「ID」: 「默認」, 「scheduleType」: 「時間序列」, 「failureAndRerunMode」: 「CASCADE」, 「名」: 「默認」, 「角色」: 「DataPipelineDefaultRole」, 「資源角色」: 「DataPipelineDefaultResourceRole」 },{ 「ID」: 「RedshiftDataNodeId1」, 「時間表」:{ 「裁判」: 「ScheduleId1」 }, 「表名」: 「訂單」, 「名」: 「DefaultRedshiftDataNode1」 , 「type」:「RedshiftDataNode」, 「database」:{ 「ref」:「RedshiftDatabaseId1」 } },{ 「ID」: 「Ec2ResourceId1」, 「時間表」:{ 「裁判」: 「ScheduleId1」 }, 「securityGroups」: 「MySecurityGroup」, 「名」: 「DefaultEc2Resource1」, 「角色」:「 DataPipelineDefaultRole 「 」logUri「: 」S3:// myLogs「, 」資源角色「: 」DataPipelineDefaultResourceRole「, 」類型「: 」Ec2Resource「 },{ 」myComment「:」 這個目的是用來控制任務時間表「, 」id「:」DefaultSchedule1「, 」name「:」RunOnce「, 」occurrences「:」1「, 」period「:」1 Day「, 」type「:」Schedule「 , 「startAt」: 「FIRST_ACTIVATION_DATE_TIME」 },{ 「ID」: 「S3DataNodeId1」, 「時間表」:{ 「REF」: 「ScheduleId1」 }, 「目錄路徑」:「S3://我的 - 桶/#{format(@scheduledStartTime,'YYYY-MM-dd-HH-mm-ss')}「, 」name「:」DefaultS3DataNode1「, 」dataFormat「:{ 」ref「:」CSVId1「 }, 「類型」: 「S3DataNode」 },{ 「ID」: 「RedshiftCopyActivityId1」, 「輸出」:{ 「REF」: 「S3DataNodeId1」 }, 「輸入」:{ 「REF」: 「RedshiftDataNodeId1」 }, 「時間表」:{ 「REF」: 「ScheduleId1」 }, 「名稱」: 「DefaultRedshiftCopyActivity1」, 「runsOn」:{ 「REF」:「Ec2ResourceId1 「 }, 」類型「: 」RedshiftCopyActivity「 }]}

0

您能夠通過SSH進入集羣?如果是這樣,我會建議編寫一個shell腳本,您可以在其中創建變量和內容,然後將這些變量傳遞到連接的語句中 - 查詢