0

다른 제작자의 Kinesis 스트림으로 들어오는 데이터가 있습니다. 데이터 유형에 따라 데이터를 여러 테이블로 변환해야합니다. 나는 Kinesis Streams에서 Lambda를 읽으려고하고 데이터를 다른 테이블로 변환 한 다음 Kinesis Firehose를 사용하여 Redshift로 배치하고 COPY합니다.하나의 Kinesis 스트림에서 Redshift의 여러 테이블로 데이터 스트리밍

그러나 Firehose는 한 번에 하나의 Redhsift 테이블에만 전달할 수 있기 때문에 Redhift 스키마에있는 테이블 수와 동일한 여러 Firehose 인스턴스를 실행해야합니다. 나는 영역 당 20 Firehose 인스턴스의 기본 뚜껑이 있고 이것이 내가 성취하려는 것을위한 이상적인 데이터 파이프 라인인지 궁금해하고 있습니다.

+1

Kinesis Analystics Application을 사용하여 스트림의 사전 처리를 수행하고이를 여러 스트림으로 분할 할 수 있습니까? 대상 스트림을 Redshift로 이동시키는 Kinesis Firehose를 만들 수있는 것처럼 보입니다. http://docs.aws.amazon.com/kinesisanalytics/latest/dev/app-tworecordtypes.html – Nathan

+0

@Nathan - 제안 해 주셔서 감사합니다. 흥미 롭긴하지만 이것은 Kinesis Firehose의 다중 인스턴스 사용 문제를 해결하지 못합니다. 스키마의 테이블 개수만큼 많은 Firehose 인스턴스가 필요합니다. 둘째, 필자의 데이터 변환은 타사 라이브러리를 사용하여 복잡한 변환을 수행 할 수 있기 때문에 파이썬/자바 스크립트로 원시 SQL에 비해 작성하는 것이 더 적합합니다. –

+1

원본 스트림을 먼저 스테이지 테이블에로드 한 다음 Redshift에서 분할하거나 스트림을 분할하지 않고 하나의 스트림을 사용하지 않고 단일 스트림에서 여러 개의 Redshift 테이블을 채우는 방법을 찾지는 않을 것입니다 표. Redshift는 필수 요건입니까? 아마 아테나는 대안인가? – Nathan

답변

1

나는 당신과 비슷한 거의 비슷한 데이터 파이프 라인을 설계했습니다. 나는 kinesis에서 데이터를 얻고, 적색 변이에 도달 한 후 데이터를 변환합니다. 1 스트림의 모든 데이터는 redshift에서 하나의 마스터 테이블로 이동합니다. 그런 다음 데이터를 다른 테이블로 변환하는 cron 작업을 실행합니다.

잘못된 가정을 한 경우 의견을 보내 주시면 답변을 다시 작성하겠습니다.

+0

이 cron 작업을 어떻게 실행합니까? 알 수 있듯이 일반적으로 Redshift 또는 AWS에서 예약 된 SQL 스크립트를 실행하는 데는 제한 사항과 오버 헤드가 있습니다. Cloudwatch 및 SQS/SNS 또는 EB 인스턴스와 같은 더 많은 것들을 관리 할 수 ​​있습니다. 또한 일괄 처리 INSERT를 수행하는 것이 최적이 아니기 때문에 COPY 명령을 사용하여 일괄 처리하고 Redshift에 데이터를로드하려고합니다. 또한 구조화 된 데이터를 거의 체계화되지 않은 데이터로 전개하여이 모든 것을 저장할 수있는 단일 테이블을 만들어야합니다. –

+0

redshift에 연결하고 선택한 삽입 작업을 수행하는 python 스크립트를 실행하는 ec2 서버에서 cron 작업을 수행했습니다. 또는 빨간색 시프트에 연결하고 작업을 수행하는 AWS 람다를 사용할 수 있습니다. 내가 관리해야하는 유일한 추가 작업은 python 스크립트와 cron 작업입니다. 구조 단순화 - 네, 사용 사례에 따라 테이블 수와 데이터 스트림 빈도에 따라 복잡해질 수 있습니다. 성능 문제를 비교하려면이 부분을 참조하십시오 - https://stackoverflow.com/questions/25454477/amazon-redshift-bulk-insert-vs-copying-from-s3 –