Athena에서 테이블 생성 - Amazon Athena

Athena에서 테이블 생성

테이블을 생성하려면 Athena 콘솔에서 DDL 문을 실행하거나 Athena 테이블 생성 양식을 사용하거나 JDBC 또는 ODBC 드라이버를 사용할 수 있습니다. Athena는 Apache Hive를 사용하여 테이블을 정의하고 데이터베이스를 생성하며, 이는 테이블의 논리적 네임스페이스입니다. Athena는 특정 데이터 형식의 테이블을 생성하는 데 다양한 SerDe(serializer-deserializer) 라이브러리를 지원합니다. 지원되는 SerDe 라이브러리 목록은 데이터에 적합한 SerDe 선택 단원을 참조하세요.

Athena에서 데이터베이스와 테이블을 생성할 때, 읽기 시간 쿼리를 위해 Amazon S3에서 테이블 데이터가 있는 스키마와 위치를 간단히 설명합니다. Athena는 Amazon S3의 데이터를 수정하지 않습니다. 따라서 데이터베이스와 테이블이 데이터베이스와 테이블의 스키마 정의와 함께 저장되지 않으므로 기존 관계형 데이터베이스 시스템에서와 의미가 약간 다릅니다.

Athena는 AWS Glue Data Catalog에 스키마를 저장하고 사용자가 SQL을 사용하여 테이블을 쿼리할 때 이 스키마를 사용하여 데이터를 읽습니다. 쿼리를 실행할 때 데이터에 스키마를 프로젝션하는 이 스키마 온 리드 접근 방식을 사용하면 데이터를 로드하거나 변환할 필요가 없습니다.

고려 사항 및 제한

Athena의 테이블에 대한 몇 가지 중요한 제한 사항 및 고려 사항은 다음과 같습니다.

Amazon S3 고려 사항

테이블을 만들 때 LOCATION 절을 사용하여 기본 데이터의 Amazon S3 버킷 위치를 지정합니다. 다음을 고려하세요.

  • Athena는 버전이 지정된 Amazon S3 버킷에 있는 최신 버전의 데이터만 쿼리할 수 있으며, 이전 버전의 데이터는 쿼리할 수 없습니다.

  • 이를 위해서는 Amazon S3 위치에서 데이터를 처리할 수 있는 권한이 있어야 합니다. 자세한 내용은 Athena에서 Amazon S3에 대한 액세스 제어 단원을 참조하십시오.

  • Athena는 LOCATION 절에 지정된 동일한 버킷의 여러 스토리지 클래스에 저장된 객체에 대한 쿼리를 지원합니다. 예를 들어 Amazon S3의 서로 다른 스토리지 클래스(Standard, Standard-IA, Intelligent-Tiering)에 저장된 객체의 데이터를 쿼리할 수 있습니다.

  • Athena는 요청자 지불 버킷을 지원합니다. Athena에서 쿼리하려고 하는 소스 데이터가 포함된 버킷에 대해 요청자 지불을 활성화하는 방법에 대한 자세한 내용은 작업 그룹 만들기 단원을 참조하세요.

  • Athena를 사용하여 S3 Glacier Flexible Retrieval(이전의 Glacier) 및 S3 Glacier Deep Archive Amazon S3 스토리지 클래스로부터 복원된 객체를 쿼리할 수 있지만, 이 기능은 테이블별로 활성화해야 합니다. 쿼리를 실행하기 전에 테이블에서 이 기능을 활성화하지 않으면 Athena는 쿼리 실행 중에 테이블의 S3 Glacier Flexible Retrieval 및 S3 Glacier Deep Archive 객체를 모두 건너뜁니다. 자세한 내용은 복원된 Amazon S3 Glacier 객체 쿼리 단원을 참조하십시오.

    스토리지 클래스에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서에서 스토리지 클래스, Amazon S3에서 객체의 스토리지 클래스 변경, GLACIER 스토리지 클래스로 전환(객체 아카이브)요청자 지불 버킷을 참조하세요.

  • 객체가 많은 Amazon S3 버킷에 대해 쿼리를 실행하는데 데이터가 분할되지 않은 경우, 그러한 쿼리는 Amazon S3의 Get 요청 빈도 제한에 영향을 주고 Amazon S3 예외를 발생시킬 수 있습니다. 오류를 방지하려면 데이터를 분할하세요. 또한 Amazon S3 요청 빈도를 조정합니다. 자세한 내용은 요청 빈도 및 성능 고려 사항을 참조하세요.

Amazon S3에서 데이터 위치를 지정하는 방법에 대한 자세한 내용은 Amazon S3의 테이블 위치 지정 섹션을 참조하세요.

기타 고려 사항

  • 트랜잭션 데이터 변환은 지원되지 않음 – Athena는 테이블 데이터에 대한 트랜잭션 기반 작업(예: Hive 또는 Presto에 있는 작업)을 지원하지 않습니다. 지원되지 않는 키워드 전체 목록은 지원되지 않는 DDL을 참조하세요.

  • 테이블에 대한 작업은 ACID - 테이블을 생성하고 업데이트하거나 삭제할 때 이러한 작업은 ACID를 준수합니다. 예를 들어, 여러 사용자 또는 클라이언트가 동시에 테이블을 생성하거나 기존 테이블을 변경하려고 할 경우 그 중 하나만 성공합니다.

  • 테이블이 외부 - Iceberg 테이블을 생성할 때를 제외하고 항상 EXTERNAL 키워드를 사용하세요. Iceberg가 아닌 테이블에 대해 EXTERNAL 키워드 없이 CREATE TABLE을 사용하는 경우 Athena에서 오류가 발생합니다. Athena에 테이블을 놓으면 테이블 메타데이터만 제거됩니다. 데이터는 Amazon S3에 유지됩니다.

  • 최대 쿼리 문자열 길이 - 최대 쿼리 문자열 길이는 256KB입니다.

  • TableType 속성을 지정하지 않고 AWS Glue CreateTable API 작업 또는 AWS CloudFormation AWS::Glue::Table 템플릿을 사용하여 Athena에서 사용할 테이블을 만든 다음 SHOW CREATE TABLE 또는 MSCK REPAIR TABLE 같은 DDL 쿼리를 실행하면, 실패: NullPointerException Name이 null임(FAILED: NullPointerException Name is null)이라는 오류 메시지가 표시될 수 있습니다.

    이 오류를 해결하려면 AWS Glue CreateTable API 호출 또는 AWS CloudFormation 템플릿의 일부로 TableInput TableType 속성의 값을 지정하세요. TableType의 가능한 값은 EXTERNAL_TABLE 또는 VIRTUAL_VIEW입니다.

    이 요구 사항은 AWS Glue CreateTable API 작업 또는 AWS::Glue::Table 템플릿을 사용하여 테이블을 만들 때만 적용됩니다. DDL 문이나 AWS Glue 크롤러를 사용하여 Athena용 테이블을 생성할 경우 TableType 속성이 자동으로 정의됩니다.