CREATE VIEW - Amazon Redshift

CREATE VIEW

데이터베이스에 뷰를 생성합니다. 뷰는 물리적으로 구체화되는 것은 아닙니다. 뷰를 정의하는 쿼리는 뷰가 쿼리에서 참조될 때마다 실행됩니다. 외부 테이블로 보기를 새로 만들려면 WITH NO SCHEMA BINDING 절을 포함시키십시오.

표준 뷰를 생성하려면 기본 테이블 또는 기본 뷰에 대한 액세스 권한이 있어야 합니다. 표준 보기를 쿼리하려면 보기 자체에 대한 선택 권한이 필요하지만, 기본 테이블에 대한 선택 권한은 필요하지 않습니다. 다른 스키마의 테이블이나 뷰를 참조하는 뷰를 생성하거나 구체화된 뷰를 참조하는 뷰를 생성하는 경우 사용 권한이 필요합니다. 지연 바인딩 뷰를 쿼리하려면 지연 바인딩 뷰 자체에 대한 몇 가지 권한이 필요합니다. 또한 Late Binding 뷰의 소유자에게 참조 객체(테이블, 뷰, 사용자 정의 함수 등)에 대한 선택 권한이 있는지 확인해야 합니다. 지연 바인딩 뷰에 대한 자세한 내용은 사용 노트 섹션을 참조하세요.

필수 권한

CREATE VIEW를 사용하려면 다음 권한 중 하나가 필요합니다.

  • CREATE [ OR REPLACE ] VIEW를 사용하여 뷰를 만들려면 다음을 수행하세요.

    • 수퍼유저

    • CREATE [ REPLACE ] VIEW 권한이 있는 사용자

  • CREATE OR REPLACE VIEW를 사용하여 기존 뷰를 바꾸려면 다음을 수행하세요.

    • 수퍼유저

    • CREATE [ OR REPLACE ] VIEW 권한이 있는 사용자

    • 보기 소유자

사용자가 사용자 정의 함수가 포함된 뷰에 액세스하려는 경우 해당 함수에 대한 EXECUTE 권한이 있어야 합니다.

구문

CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query [ WITH NO SCHEMA BINDING ]

파라미터

OR REPLACE

같은 이름의 뷰가 이미 있는 경우 뷰가 대체됩니다. 같은 열 이름과 데이터 형식을 사용하여 같은 열 집합을 생성하는 새 쿼리로만 뷰를 바꿀 수 있습니다. CREATE OR REPLACE VIEW는 작업 완료 시까지 읽기 및 쓰기를 위한 뷰를 잠급니다.

뷰가 교체될 때 소유권과 부여된 권한 등의 다른 속성은 유지됩니다.

이름

결과의 이름. 스키마 이름이 지정되어 있는 경우(예: myschema.myview), 뷰는 지정된 스키마를 사용하여 생성됩니다. 그렇지 않으면, 뷰가 현재 스키마로 생성됩니다. 보기 이름은 같은 스키마에 있는 다른 보기 또는 테이블의 이름과는 달라야 합니다.

'#'으로 시작하는 보기 이름을 지정하면 보기가 현재 세션에서만 보이는 임시 보기로 생성됩니다.

유효한 이름에 대한 자세한 내용은 이름 및 식별자 섹션을 참조하세요. 시스템 데이터베이스 template0, template1, padb_harvest 또는 sys:internal에서 테이블 또는 뷰를 생성할 수 없습니다.

column_name

뷰에서 열에 사용할 이름의 선택적 목록입니다. 열 이름이 지정되지 않은 경우에는 쿼리에서 파생됩니다. 단일 뷰에서 정의할 수 있는 최대 열 수는 1,600개입니다.

query

테이블로 평가되는 (SELECT 문 형식의) 쿼리입니다. 이 테이블은 뷰에 있는 열과 행을 정의합니다.

WITH NO SCHEMA BINDING

보기가 테이블, 사용자 정의 함수 같은 기본 데이터베이스 객체에 바인딩되지 않도록 지정하는 절입니다. 결과적으로 보기와 보기가 참조하는 객체 사이에 종속성이 없습니다. 참조 객체가 존재하지 않는 경우에도 보기를 새로 만들 수 있습니다. 종속성이 없기 때문에 뷰에 영향을 주지 않고서 참조 객체를 중단하거나 변경할 수 있습니다. Amazon Redshift는 뷰가 쿼리될 때까지 종속성을 확인하지 않습니다. 지연 바인딩 뷰에 대한 자세한 내용을 보려면 PG_GET_LATE_BINDING_VIEW_COLS 함수를 실행합니다.

WITH NO SCHEMA BINDING 절을 포함할 때는 SELECT 문에서 참조한 테이블 및 보기를 스키마 이름으로 정규화해야 합니다. 참조 테이블이 존재하지 않더라도 보기를 새로 만들 때는 스키마가 반드시 존재해야 합니다. 예를 들어 다음과 같은 문은 오류를 반환합니다.

create view myevent as select eventname from event with no schema binding;

다음 문은 성공적으로 실행됩니다.

create view myevent as select eventname from public.event with no schema binding;
참고

뷰를 업데이트하거나 뷰에 삽입하거나 뷰에서 삭제할 수 없습니다.

사용 노트

Late Binding 보기

Late Binding 보기는 자신이 쿼리될 때까지 테이블 및 기타 보기와 같은 기본 데이터베이스 객체를 확인하지 않습니다. 따라서 보기를 삭제한 다음 다시 생성하지 않고 기본 객체를 수정 또는 삭제할 수 있습니다. 기본 객체를 삭제하는 경우 Late Binding 보기에 대한 쿼리가 실패합니다. Late Binding 보기에 대한 쿼리가 기본 객체에 존재하지 않는 열을 참조하는 경우 쿼리가 실패합니다.

Late Binding 보기의 기본 테이블 또는 보기를 삭제한 후 다시 생성하면 기본 액세스 권한을 가진 새 객체가 생성됩니다. 뷰를 쿼리할 사용자에게 기본 객체에 대한 권한을 부여해야 할 수 있습니다.

Late Binding 보기를 생성하려면 WITH NO SCHEMA BINDING 절을 포함시키십시오. 다음 예에서는 스키마 바인딩 없이 보기를 새로 만듭니다.

create view event_vw as select * from public.event with no schema binding;
select * from event_vw limit 1; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

다음은 Late Binding 보기를 다시 생성하지 않고 기본 테이블을 변경할 수 있음을 보여주는 예입니다.

alter table event rename column eventname to title;
select * from event_vw limit 1; eventid | venueid | catid | dateid | title | starttime --------+---------+-------+--------+---------------+-------------------- 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00

Amazon Redshift Spectrum 외부 테이블은 Late Binding 뷰에서만 참조할 수 있습니다. Late Binding 뷰의 애플리케이션 하나가 Amazon Redshift 및 Redshift Spectrum 테이블을 둘 다 쿼리합니다. 예를 들어 UNLOAD 명령을 사용하여 오래된 데이터를 Amazon S3에 보관할 수 있습니다. 그런 다음 Amazon S3의 데이터를 참조하는 Redshift Spectrum 외부 테이블을 생성하고, 두 테이블을 쿼리하는 뷰를 생성합니다. 다음은 UNION ALL 절을 사용하여 Amazon Redshift SALES 테이블과 Redshift Spectrum SPECTRUM.SALES 테이블을 조인하는 예입니다.

create view sales_vw as select * from public.sales union all select * from spectrum.sales with no schema binding;

SPECTRUM.SALES 테이블을 비롯한 Redshift Spectrum 외부 테이블 생성에 대한 자세한 내용은 Amazon Redshift Spectrum 시작하기 섹션을 참조하세요.

지연 바인딩 뷰에서 표준 뷰를 만드는 경우 표준 뷰의 정의에는 표준 뷰가 만들어질 당시 지연 바인딩 뷰의 정의가 포함됩니다. 지연 바인딩 뷰의 종속성은 추적되지 않으므로 지연 바인딩 뷰에 대한 변경 사항은 표준 뷰에서 추적되지 않습니다.

지연 바인딩 뷰의 최신 정의를 참조하도록 표준 뷰를 업데이트하려면 표준 뷰를 만들 때 사용한 초기 뷰 정의와 함께 CREATE OR REPLACE VIEW를 실행하세요.

지연 바인딩 뷰에서 표준 뷰를 만드는 다음 예시를 참조하세요.

create view sales_vw_lbv as select * from public.sales with no schema binding; show view sales_vw_lbv; Show View DDL statement -------------------------------------------------------------------------------- create view sales_vw_lbv as select * from public.sales with no schema binding; (1 row) create view sales_vw as select * from sales_vw_lbv; show view sales_vw; Show View DDL statement --------------------------------------------------------------------------------------------------------------------- SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv; (1 row)

참고로, 표준 뷰의 DDL 문에 표시된 지연 바인딩 뷰는 표준 뷰를 만들 때 정의되며 이후에 지연 바인딩 뷰를 변경해도 업데이트되지 않습니다.

예시

예제 명령은 TICKIT 데이터베이스라는 샘플 객체 및 데이터 세트를 사용합니다. 자세한 내용은 샘플 데이터베이스를 참조하세요.

다음 명령은 EVENT라는 테이블에서 myevent라는 뷰를 생성합니다.

create view myevent as select eventname from event where eventname = 'LeAnn Rimes';

다음 명령은 USERS라는 테이블에서 myuser라는 뷰를 생성합니다.

create view myuser as select lastname from users;

다음 명령은 USERS라는 테이블에서 myuser라는 뷰를 생성하거나 대체합니다.

create or replace view myuser as select lastname from users;

다음 예에서는 스키마 바인딩 없이 보기를 새로 만듭니다.

create view myevent as select eventname from public.event with no schema binding;