2014-02-07 3 views
2

Amazon Redshift에서 특정 테이블을 자동으로 다시 만들어야하는 ETL 프로세스를 구현하려고하는데 이미 해당 테이블 만 삭제할 필요가 있습니다 데이터베이스에 있습니다.테이블이있는 경우 Amazon Redshift에서 테이블을 삭제하는 방법

테이블 존재 여부를 확인할 수있는 테이블 카탈로그가 있습니까? 또는 PSQL의 DROP TABLE IF EXISTS과 유사한 명령을 사용 하시겠습니까?

답변

4

는 업데이트 : IF 절을 존재합니다

지금 Redshift에는 DROP 표를 지원합니다. Redshift에이 DROP TABLE IF EXISTS을 지원하지 않았기 때문에 http://docs.aws.amazon.com/redshift/latest/dg/r_DROP_TABLE.html


, 우리는 기존의 테이블 이름을 얻어서을 처리했다.

Redshift에서 테이블 이름을 가져 오려면 pg_table_def 테이블을 사용하고 있습니다. 예를 들어, 다음 sql을 실행하여 시스템 테이블을 제외한 모든 테이블 이름을 가져옵니다.

SELECT 
    schemaname, tablename 
FROM 
    pg_table_def 
WHERE 
    schemaname <> 'pg_catalog' 
    AND schemaname <> 'information_schema' 
    AND schemaname !~ '^pg_toast' 
GROUP BY 
    schemaname,tablename; 

다음은 샘플 결과입니다.

schemaname | tablename 
------------+----------- 
my_schema | access_log 
my_schema | error_log 
my_schema | vmstats_log 
public  | users 
public  | groups 

자세한 내용은 다음 링크를 참조하십시오. 대신 테이블을 삭제의에 대해 당신이 삽입 덮어 쓰기 할 방법

+0

어떻게 이것을 'IF'와 결합 할 수 있습니까? RedShift에서는 'IF'가 존재하지 않는 것으로 보입니다. 또는 여러 문장을 실행하는 사용자 정의 스크립트에서이 작업을 수행해야합니까? – Mendhak

+0

이제 Redshift는 내 대답을 업데이트하면서 IF EXISTS 절을 지원합니다. 첫 번째 게시물의 내 ​​의도는 SQL 외부에서 처리하는 것이 었습니다. –

1

?

INSERT OVERWRITE INTO target 
SELECT s.* FROM staging s LEFT JOIN target t 
ON s.primaryKey = t.primaryKey AND s.distKey = t.distKey 
WHERE t.primaryKey IS NULL; 

그렇지 않으면 내가하는 일을 왜하고 더 많은 도움으로 업데이트 할 것인지 설명해주십시오. 이것은 적색 변이 디자인으로 보통 당신이 원하는 것을 할 수없는 이유가있는 경우이지만, "적색 변속"방법이 있습니다.

+0

SELECT INTO 문에서이 작업을 수행 할 수있는 방법은 무엇입니까? – DJo

+0

"overwrite"를 쿼리에서 제거하면 "select into" –

관련 문제