

# Athena에서 Data Catalog 뷰 사용
<a name="views-glue"></a>

Amazon Athena에서 Data Catalog 뷰를 생성하려면 특수한 `CREATE VIEW` 문이 필요합니다. 쿼리할 때는 일반적인 SQL `SELECT` 구문을 사용합니다. Data Catalog 뷰를 *다중 언어* 뷰 또는 MDV라고 합니다.

## Data Catalog 뷰 생성
<a name="views-glue-creating-a-data-catalog-view"></a>

Athena에서 Data Catalog 뷰를 생성하려면 다음 구문을 사용합니다.

```
CREATE [ OR REPLACE ] PROTECTED MULTI DIALECT VIEW view_name 
SECURITY DEFINER 
[ SHOW VIEW JSON ]
AS athena-sql-statement
```

**참고**  
`SHOW VIEW JSON` 옵션은 Data Catalog 뷰에만 적용되며 Athena 뷰에는 적용되지 않습니다. `SHOW VIEW JSON` 옵션을 사용하면 입력의 유효성을 검사하는 ‘테스트 실행’이 수행되고, 검사가 성공하면 뷰를 나타내는 AWS Glue 테이블 객체의 JSON이 반환됩니다. 실제 뷰는 생성되지 않습니다. `SHOW VIEW JSON` 옵션을 지정하지 않으면 유효성 검사가 수행되고 데이터 카탈로그에 평소와 같이 뷰가 생성됩니다.

다음 예제 구문은 `Definer` 역할의 사용자가 `orders_by_date` Data Catalog 뷰를 생성하는 방법을 보여줍니다. 이 예제에서는 `Definer` 역할에 `default` 데이터베이스의 `orders` 테이블에 대한 전체 `SELECT` 권한이 있다고 가정합니다.

```
CREATE PROTECTED MULTI DIALECT VIEW orders_by_date 
SECURITY DEFINER 
AS 
SELECT orderdate, sum(totalprice) AS price 
FROM orders 
WHERE order_city = 'SEATTLE' 
GROUP BY orderdate
```

구문 정보는 [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) 섹션을 참조하세요.

## Data Catalog 뷰 쿼리
<a name="views-glue-querying-a-data-catalog-view"></a>

뷰가 생성된 후 `Lake Formation` 관리자는 Data Catalog 뷰에 대한 `Invoker` 권한을 `SELECT` 보안 주체에게 부여할 수 있습니다. 그러면 `Invoker` 보안 주체는 뷰에서 참조하는 기본 테이블에 액세스하지 않고도 뷰를 쿼리할 수 있습니다. 다음은 `Invoker` 쿼리의 예입니다.

```
SELECT * from orders_by_date where price > 5000
```

## 고려 사항 및 제한 사항
<a name="views-glue-limitations"></a>

다음 Data Catalog 뷰 제한 사항은 대부분 Athena에만 해당됩니다. 다른 서비스에도 적용되는 추가 Data Catalog 뷰 제한 사항은 Lake Formation 설명서를 참조하세요.
+ Data Catalog 뷰는 다른 뷰, 데이터베이스 리소스 링크 또는 테이블 리소스 링크를 참조할 수 없습니다.
+ 뷰 정의에서 최대 10개의 테이블을 참조할 수 있습니다.
+ 테이블에는 Lake Formation의 `IAMAllowedPrincipals` 데이터 레이크 권한이 없어야 합니다. 이 권한이 있는 경우 다중 언어 뷰는 IAMAllowedPrincipals 권한이 없는 테이블만 참조라는 오류가 발생할 수 있습니다.
+ 테이블의 Amazon S3 위치를 Lake Formation 데이터 레이크 위치로 등록해야 합니다. 테이블이 등록되지 않은 경우 다중 언어 뷰는 Lake Formation 관리형 테이블만 참조 오류가 발생할 수 있습니다. Lake Formation에 Amazon S3 위치를 등록하는 자세한 방법은 *AWS Lake Formation 개발자 가이드*에서 [ Amazon S3 위치 등록](https://docs.aws.amazon.com/lake-formation/latest/dg/register-location.html)을 참조하세요.
+ AWS Glue [GetTables](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTables.html) 및 [SearchTables](https://docs.aws.amazon.com/glue/latest/webapi/API_SearchTables.html) API 직접 호출은 `IsRegisteredWithLakeFormation` 파라미터를 업데이트하지 않습니다. 이 파라미터의 올바른 값을 보려면 AWS Glue [GetTable](https://docs.aws.amazon.com/glue/latest/webapi/API_GetTable.html) API를 사용하세요. 자세한 내용은 *AWS Lake Formation 개발자 가이드*에서 [GetTables 및 SearchTables API가 IsRegisteredWithLakeFormation 파라미터 값을 업데이트하지 않음](https://docs.aws.amazon.com/lake-formation/latest/dg/limitations.html#issue-GetTables-value)을 참조하세요.
+ `DEFINER` 보안 주체는 IAM 역할만 될 수 있습니다.
+ `DEFINER` 역할에는 기본 테이블에 대한 전체 `SELECT`(부여 가능) 권한이 있어야 합니다.
+ `UNPROTECTED` Data Catalog 뷰는 지원되지 않습니다.
+ 사용자 정의 함수(UDF)는 뷰 정의에서 지원되지 않습니다.
+ Athena 페더레이션 데이터 소스는 Data Catalog 뷰에서 사용할 수 없습니다.
+ 외부 Hive 메타스토어에는 Data Catalog 뷰가 지원되지 않습니다.
+ Athena는 기한 경과 뷰를 감지하면 오류 메시지를 표시합니다. 다음 중 하나가 발생하면 기한 경과 뷰가 보고됩니다.
  + 뷰가 존재하지 않는 테이블 또는 데이터베이스를 참조합니다.
  + 스키마 또는 메타데이터 변경이 참조된 테이블에서 이루어집니다.
  + 참조된 테이블이 삭제되고 다른 스키마 또는 구성으로 재생성됩니다.

## 권한
<a name="views-glue-permissions"></a>

Data Catalog 뷰에는 `Lake Formation Admin`, `Definer` 및 `Invoker`의 세 가지 역할이 필요합니다.
+ **`Lake Formation Admin`** - 모든 Lake Formation 권한을 구성할 수 있는 액세스 권한이 있습니다.
+ **`Definer`** - Data Catalog 뷰를 생성합니다. `Definer` 역할에는 뷰 정의가 참조하는 모든 기본 테이블에 대해 부여 가능한 전체 `SELECT` 권한이 있어야 합니다.
+ **`Invoker`** - Data Catalog 뷰를 쿼리하거나 해당 메타데이터를 확인할 수 있습니다. 쿼리 호출자를 표시하려면 `invoker_principal()` DML 함수를 사용할 수 있습니다. 자세한 내용은 [invoker\$1principal()](functions-env3.md#functions-env3-invoker-principal) 섹션을 참조하세요.

`Definer` 역할의 신뢰 관계는 AWS Glue 및 Lake Formation 서비스 보안 주체에게 `sts:AssumeRole` 작업을 허용해야 합니다. 자세한 내용은 *AWS Lake Formation 개발자 안내서*의 [뷰 생성을 위한 사전 조건](https://docs.aws.amazon.com/lake-formation/latest/dg/working-with-views.html#views-prereqs)을 참조하세요.

Athena 액세스를 위한 IAM 권한도 필요합니다. 자세한 내용은 [Amazon Athena의 AWS 관리형 정책](security-iam-awsmanpol.md) 섹션을 참조하세요.

# Data Catalog 뷰 관리
<a name="views-glue-managing"></a>

DDL 명령을 사용하여 Data Catalog 뷰를 업데이트하고 관리할 수 있습니다.

## Data Catalog 뷰 업데이트
<a name="views-glue-updating-a-data-catalog-view"></a>

`Lake Formation` 관리자 또는 정의자는 `ALTER VIEW UPDATE DIALECT` 구문을 사용하여 뷰 정의를 업데이트할 수 있습니다. 다음 예제에서는 `orders` 테이블 대신 `returns` 테이블에서 열을 선택하도록 뷰 정의를 수정합니다.

```
ALTER VIEW orders_by_date UPDATE DIALECT
AS
SELECT return_date, sum(totalprice) AS price
FROM returns
WHERE order_city = 'SEATTLE'
GROUP BY orderdate
```

## AWS Glue Data Catalog 뷰에 지원되는 DDL 작업
<a name="views-glue-supported-actions"></a>

Athena는 AWS Glue Data Catalog 뷰에 대해 다음 작업을 지원합니다.


| 문 | 설명 | 
| --- | --- | 
| [ALTER VIEW DIALECT](alter-view-dialect.md) |  엔진 언어를 추가하거나 기존 엔진 언어를 업데이트 또는 삭제하여 Data Catalog 뷰를 업데이트합니다.  | 
| [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) |  지정된 `SELECT` 쿼리에서 Data Catalog 뷰를 생성합니다. 자세한 내용은 [CREATE PROTECTED MULTI DIALECT VIEW](create-view.md#create-protected-multi-dialect-view) 섹션을 참조하세요. 선택적 `OR REPLACE` 절을 사용하여 기존 뷰를 바꿔 업데이트할 수 있습니다.  | 
| [DESCRIBE VIEW](describe-view.md) |  명명된 뷰의 열 목록을 보여 줍니다. 이를 통해 복잡한 뷰의 속성을 검사할 수 있습니다.  | 
| [DROP VIEW](drop-view.md) |  기존 뷰를 삭제합니다. 뷰가 없는 경우 선택적 `IF EXISTS` 절이 오류를 억제합니다.  | 
| [SHOW CREATE VIEW](show-create-view.md) |  지정된 뷰를 생성하는 SQL 문을 보여 줍니다.  | 
| [SHOW VIEWS](show-views.md) |  지정된 데이터베이스 또는 현재 데이터베이스(데이터베이스 이름이 생략된 경우)의 뷰를 나열합니다. 선택적 `LIKE` 절을 정규식과 함께 사용하여 뷰 이름 목록을 제한합니다. 콘솔의 왼쪽 창에서 뷰 목록을 볼 수도 있습니다.  | 
| [SHOW COLUMNS](show-columns.md) |  뷰에 대한 스키마에 열을 나열합니다.  | 