0

異なるプロデューサからのキネシスストリームにデータが入っています。データは、そのデータのタイプに応じて、いくつかの異なるテーブルに変換する必要があります。私はKinesisストリームからLambdaを読み込み、データを別のテーブルに変換してから、Kinesis Firehoseを使用してRedshiftにバッチしてコピーします。単一のキネシスストリームからレッドシフトの複数のテーブルにデータをストリーミング

Firehoseは一度に1つのRedhsiftテーブルにしか配信できないため、Redshiftスキーマで使用するテーブルの数と同じ数のFirehoseインスタンスを実行する必要があります。私は地域ごとに20 Firehoseのインスタンスのデフォルトキャップがあることを私は、これが私が達成しようとしているもののための理想的なデータパイプラインかどうか疑問に思っています。

+1

Kinesis Analysticsアプリケーションを使用してストリームの前処理を行い、それを複数のストリームに分割できますか?あなたが目的地ストリームをRedshiftへのKinesis Firehoseにすることができるように見えるhttp://docs.aws.amazon.com/kinesisanalytics/latest/dev/app-tworecordtypes.html – Nathan

+0

@Nathan - 事を提案してくれてありがとう。これは面白いですが、これはKinesis Firehoseの複数のインスタンスを使用する問題を解決するものではありません - 私はスキーマ内のテーブルの数と同じ数のFirehoseインスタンスを必要とします。第2に、私のデータ変換は、サードパーティのライブラリを使用して複雑な変換を行うことができるので、raw SQLと比べてpython/javascriptで書く方が適しています。 –

+1

元のストリームを最初にステージテーブルにロードしてからRedshiftで分割するか、ストリームを分割して1つのストリームを持つことなく、複数のRedshiftテーブルを1つのストリームから読み込む方法はありません表。 Redshiftは必須条件ですか?もしかしたら、アテナは別のものでしょうか? – Nathan

答えて

1

私はあなたのようにほぼ同じデータパイプラインを設計しました。私はキネシスからデータを得て、それが赤方偏移に達した後にデータを変換する。 1ストリームからのすべてのデータはredshiftの1つのマスターテーブルに送られます。次に、データを別のテーブルに変換するcronジョブを実行します。

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

+0

どのようにこのcronジョブを実行しますか?私が理解していることから、RedshiftまたはAWS内でスケジュールされたSQLスクリプトを実行する上での制限とオーバーヘッドがあります。 CloudwatchやSQS/SNS、EBインスタンスのような管理が必要なものまた、バッチ一括INSERTを行うのが最適でないため、COPYコマンドを使用してRedshiftにデータをバッチしてロードしたいと考えています。また、構造化されたデータをほぼ非構造化されたデータにフラット化して、このすべてを格納できる単一のテーブルを作成する必要があります。 –

+0

私はec2サーバー上で、pythonスクリプトをredshiftに接続し、選択した挿入をトリガーするcronジョブを持っています。または、あなたの赤方偏移に接続して仕事をするAWSラムダを使うこともできます。私が管理しなければならない唯一の余分な仕事は、pythonスクリプトとcronジョブです。構造のフラット化 - はい、ユースケースによっては、テーブルの数やデータストリームの頻度によっては複雑になることがあります。これを参照してパフォーマンスの問題を比較してください - https://stackoverflow.com/questions/25454477/amazon-redshift-bulk-insert-vs-copying-from-s3 –

関連する問題