테이블, 데이터베이스 및 열의 이름 - Amazon Athena

테이블, 데이터베이스 및 열의 이름

Athena에서 데이터베이스 객체 명명에 대해 다음 팁을 사용하세요.

데이터베이스, 테이블 및 열 이름 요구 사항

  • AWS Glue의 데이터베이스 이름, 테이블 이름 및 열 이름에 사용할 수 있는 문자는 UTF-8 문자열이어야 합니다. 문자열은 1바이트 미만이거나 255바이트를 초과해서는 안 됩니다. 이 한도를 초과하면 Value at 'name' failed to satisfy constraint: Member must have length less than or equal to 255와 같은 오류가 발생합니다. 사용할 수 있는 문자에는 공백이 포함되고 다음과 같은 한 줄 문자열 패턴으로 정의됩니다.

    [\u0020-\uD7FF\uE000-\uFFFD\uD800\uDC00-\uDBFF\uDFFF\t]*
  • 현재 AWS Glue 정규식 패턴에서는 이름 앞에 선행 공백을 추가할 수 있습니다. 이러한 선행 공백은 탐지하기 어렵고 생성 후 사용성 문제를 일으킬 수 있으므로 선행 공백이 있는 객체 이름을 만들지 마세요.

  • AWS::Glue::Database AWS CloudFormation 템플릿을 사용하여 AWS Glue 데이터베이스를 생성하고 데이터베이스 이름을 지정하지 않으면 AWS Glue는 Athena와 호환되지 않는 resource_name–random_string 형식으로 데이터베이스 이름을 자동으로 생성합니다.

  • AWS Glue 카탈로그 관리자를 사용하여 열 이름을 바꿀 수 있지만 테이블 이름이나 데이터베이스 이름은 바꿀 수 없습니다. 이 제한을 해결하려면 이전 데이터베이스의 정의를 사용하여 새 이름으로 데이터베이스를 생성해야 합니다. 그런 다음 이전 데이터베이스의 테이블 정의를 사용하여 새 데이터베이스에서 테이블을 다시 생성합니다. 이렇게 하려면 AWS CLI 또는 AWS Glue SDK를 사용하면 됩니다. 단계는 AWS CLI를 사용하여 AWS Glue 데이터베이스 및 해당 테이블 다시 생성를 참조하세요.

Athena의 테이블 이름과 테이블 열 이름에는 소문자를 사용합니다.

Athena는 DDL 및 DML 쿼리에서 대소문자 혼용을 허용하지만 쿼리를 실행할 때 이름을 소문자로 사용합니다. 이러한 이유로 테이블 또는 열 이름에 대소문자를 혼용하지 말고, Athena에서 대소문자를 통해서만 이러한 이름을 구별하지 마세요. 예를 들어 DDL 문을 사용하여 Castle이라는 열을 만드는 경우 생성된 열은 castle과 같이 소문자로 표시됩니다. 그런 다음 DML 쿼리에서 열 이름을 Castle 또는 CASTLE로 지정할 경우 Athena는 쿼리를 실행할 이름을 소문자로 표시하지만 쿼리에서 선택한 대소문자를 사용하여 열 머리글을 표시합니다.

데이터베이스, 테이블 및 열 이름은 255자보다 작거나 같아야 합니다.

밑줄로 시작하는 이름

테이블을 만들 때 밑줄로 시작하는 테이블, 뷰 또는 열 이름은 백틱(`)으로 묶습니다. 다음 예를 참조하세요.

CREATE EXTERNAL TABLE IF NOT EXISTS `_myunderscoretable`( `_id` string, `_index` string) LOCATION 's3://my-athena-data/'

숫자로 시작하는 테이블, 뷰 또는 열 이름

SELECT, CTAS 또는 VIEW 쿼리를 실행하는 경우 숫자로 시작하는 테이블, 뷰 또는 열 이름과 같은 식별자를 인용 부호로 묶습니다. 다음 예를 참조하세요.

CREATE OR REPLACE VIEW "123view" AS SELECT "123columnone", "123columntwo" FROM "234table"

열 이름 및 복합 유형

복합 유형의 경우 영숫자, 밑줄(_) 및 기간(.)만 열 이름에 허용됩니다. 제한된 문자가 있는 키에 대한 테이블 및 매핑을 만들 때 사용자 지정 DDL 문을 사용할 수 있습니다. 자세한 내용은 AWS 빅 데이터 블로그Create tables in Amazon Athena from nested JSON and mappings using JSONSerDe를 참조하세요.

예약어

Athena의 특정 예약어는 이스케이프를 해야 합니다. DDL 문에서 예약어를 이스케이프하려면 해당 문을 악센트 부호(`)로 묶습니다. 에 대한 SQL SELECT 문과 쿼리에서 예약어를 이스케이프하려면 예약어를 큰 따옴표('')로 묶습니다.

자세한 내용은 예약어 단원을 참조하십시오.

다음 사항도 참조하십시오.

전체 데이터베이스 및 테이블 생성 구문은 다음 페이지를 참조하세요.

AWS Glue의 데이터베이스 및 테이블에 대한 자세한 내용은 AWS Glue 개발자 안내서의 데이터베이스테이블을 참조하세요.