0

我有來自不同生產者的Kinesis流中的數據。根據數據的類型,數據需要轉換爲幾個不同的表格。我試圖從Kinesis Streams讀取Lambda,將數據轉換爲不同的表格,然後使用Kinesis Firehose將批處理和COPY轉換爲Redshift。將數據從單個Kinesis流傳輸到Redshift中的多個表中

但是由於Firehose一次只能傳遞給一個Redhsift表,因此我需要使多個Firehose實例的運行時間與我在Redshift模式中使用的表的數量相等。我發現每個區域有20個Firehose實例的默認上限,我想知道這是否是我嘗試實現的理想數據管道。

+1

您可以使用Kinesis Analystics應用程序來執行流的預處理並將其分成多個流?它看起來像你可以使目標流Kinesis Firehose紅移http://docs.aws.amazon.com/kinesisanalytics/latest/dev/app-tworecordtypes.html – Nathan

+0

@Nathan - 感謝您提出建議。雖然這很有趣,但這並不能解決使用Kinesis Firehose的多個實例的問題 - 我仍然需要與架構中的表數量一樣多的Firehose實例。其次,我的數據轉換更適合用python/javascript編寫,與原始sql相比,因爲我可以使用第三方庫來執行一些複雜的轉換。 –

+1

我不認爲你會找到一種方法來從單個流中填充多個Redshift表,而不是先將原始流加載到stage表中,然後將其分割成Redshift,或者拆分流,並且每個流有一個流表。紅移是否是一項要求?如果不是,雅典娜可能是另一種選擇? – Nathan

回答

1

我設計了類似於您的數據管道。我從kinesis中獲取數據,在數據達到紅移之後轉換數據。所有來自1個流的數據都會通過紅移轉移到一個主表。然後,我運行一個cron作業,它將數據轉換爲不同的表格。

如果我做出了錯誤的假設,請發表評論,我會重新調整我的答案。

+0

你如何運行這個cron工作?根據我的理解,在Redshift或AWS內運行預定的SQL腳本時存在限制和開銷。像Cloudwatch和SQS/SNS或EB實例那樣管理更多事情。另外,我也希望使用COPY命令將數據批量加載到Redshift中,因爲批量批量INSERT是次優的。我還必須將我的結構化數據扁平化爲幾乎非結構化的數據,以創建一個可存儲所有數據的單個表。 –

+0

我在ec2服務器上有一個cron作業,它觸發連接到redshift的python腳本並執行選定的插入。或者你可以使用AWS lambda,它連接到你的redshift並完成這項工作。我必須管理的唯一額外工作是python腳本和cron作業。 Flatten結構 - 是的,根據您的使用情況,這可能會變得複雜,這取決於表的數量和數據流的頻率。請參閱此處比較性能問題 - https://stackoverflow.com/questions/25454477/amazon-redshift-bulk-insert-vs-copying-from-s3 –

相關問題