2017-12-28 27 views
0

매일 밤 Redshift 데이터웨어 하우스에있는 각 테이블의 내용을 S3에 덤프 할 수 있어야합니다.야간에 모든 테이블을 S3에 쉽게 가져올 수 있습니까?

달성하려는 결과는 각 테이블에 대해 수동으로 UNLOAD 명령을 실행하는 것과 같은 결과입니다.

이 간단한 것은 데이터 파이프 라인이나 풀과 같은 것을 사용할 수 있다고 가정했으나 이러한 작업을 쉽게 수행 할 수 없습니다.

이 문제를 잘못보고 있습니까? 이것은 단순해야만하는 것처럼 보입니다.

+0

다른 접근 방법이 있습니다.하나는 Datapipeline이고, SQL 스크립트 (blabla 언로드)를 실행하는 스크립트를 작성할 수 있습니다. 당신은 루비/파이썬/뭐든간에 SQL을 실행하고 crontab이나 lambda와 cloudwatch에 의해 SQL을 실행하지만 아마 데이터 파이프 라인을 실행하는 스크립트를 만들 수 있습니다. – MiloBellano

답변

0

나는이 과정을 거쳤지만 최근에는 역으로 진행되었다. 내 솔루션 : pg_schema를 쿼리하여 (적절한 테이블 이름을 얻기 위해) python 스크립트를 실행 한 다음 INSERT 쿼리의 테이블 이름을 매개 변수로 사용하여 결과를 반복합니다. 스크립트를 EC2에서 cron 작업으로 실행했습니다.

이론 상으로는 Lambda 또는 Pipeline의 ShellCommand를 통해 스크립트를 설정할 수 있습니다. 그러나 나는 cron 작업이 매우 단순한 반면, 나는 그것을 작동시키지 못했습니다.

0

S3에 대한 데이터를 명시 적으로 UNLOAD에게 보낼 구체적인 사용 사례가 있습니까? Spark/Hive에서 해당 데이터를 사용할 수있는 것처럼?

그렇지 않은 경우 매일 Redshift 클러스터의 스냅 샷을 S3로 예약해야합니다. 이것은 어쨌든 기본적으로 발생합니다. 스냅 샷은 S3에도 저장됩니다. 스냅 샷은 증분 속도가 빠릅니다. 스냅 샷을 사용하여 전체 클러스터를 복원 할 수 있습니다.

스냅 샷에서 개별 테이블을 복원 할 수도 있습니다. 여기

그것에 대해 문서입니다 : https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-snapshots.html

0

이 스크립트를 (쉘/파이썬/...) 작성 및 crontab을에 있음을 두는만큼 간단합니다. 어딘가에 (쉘 스크립트에서 조각)의 라인 :

psql -U$username -p $port -h $hostname $database -f path/to/your/unload_file.psql 

하고 unload_file.psql 표준 적색 편이 언로드 문이 포함됩니다 :

unload ('select * from schema.tablename') to 's3://scratchpad_bucket/filename.extension' credentials 'aws_access_key_id=XXXXXXXXXX;aws_secret_access_key=XXXXXXXXXX' [options];

가 크론 탭에서 쉘 스크립트를 넣어하고 실행을 매일 백업을하고 싶을 때. 그러나

는 기억 : 백업을 복용하는 것은 필수 불가결하다

  1. 동안 매일 전체 백업 S3의 거대한 법안을 생성합니다. 로그 파일을 백업/ 로테이션해야합니다. 즉 정기적으로 삭제하거나 s3 및 로컬에 저장합니다.
  2. 일일 전체 백업이 최선의 방법이 아닐 수 있습니다. 점진적으로 할 수 있는지 확인하십시오.
  3. 파일을 tar 및 gzip 한 다음 Excel 또는 CSV를 저장하는 대신 s3으로 보내주는 것이 좋습니다.