CREATE TABLE - Amazon Athena

CREATE TABLE

지정한 파라미터와 이름으로 테이블을 생성합니다.

시놉시스

CREATE EXTERNAL TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment] [, ...] )] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [WITH SERDEPROPERTIES (...)] [LOCATION 's3://bucket_name/[folder]/'] [TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

파라미터

EXTERNAL

테이블이 사용자가 지정한 LOCATION의 Amazon S3에 있는 기본 데이터 파일을 기반으로 하도록 지정합니다. CTAS를 사용해 생성된 테이블을 제외하고 Athena에서 생성된 모든 테이블은 EXTERNAL이어야 합니다. 외부 테이블을 만들 때 참조되는 데이터는 기본 형식 또는 ROW FORMAT, STORED AS, WITH SERDEPROPERTIES 절로 지정한 형식을 준수해야 합니다.

[IF NOT EXISTS]

table_name이라는 테이블이 이미 있으면 오류 메시지가 억제되도록 합니다.

[db_name.]table_name

테이블의 이름이 생성되도록 지정합니다. 옵션 db_name 파라미터는 테이블이 있는 데이터베이스를 지정합니다. 생략하면 현재 데이터베이스로 가정됩니다. 테이블 이름에 숫자가 포함되어 있는 경우 table_name을 인용 부호로 묶습니다(예: "table123"). table_name이 밑줄로 시작하는 경우 백틱을 사용합니다(예: `_mytable`). 밑줄 이외의 특수 문자는 지원되지 않습니다.

Athena 테이블 이름은 대소문자를 구분하지 않으나 Apache Spark로 작업하는 경우 Spark에는 소문자 테이블 이름이 필요합니다.

[ ( col_name data_type [COMMENT col_comment] [, ...] ) ]

열의 데이터 형식과 함께, 작성될 각 열의 이름을 지정합니다. 열 이름은 밑줄 (_) 이외의 특수 문자를 허용하지 않습니다. col_name이 밑줄로 시작하는 경우 열 이름을 악센트 부호(`)로 묶습니다(예: `_mycolumn`).

data_type 값은 다음 중 하나일 수 있습니다.

  • boolean – 값은 truefalse입니다.

  • tinyint - 2의 보수 형식의 부호 있는 8비트 정수이며, 최솟값은 -2^7이고 최댓값은 2^7-1입니다.

  • smallint - 2의 보수 형식의 부호 있는 16비트 정수이며, 최솟값은 -2^15이고 최댓값은 2^15-1입니다.

  • int - CREATE TABLE과 같은 DDL(데이터 정의 언어) 쿼리에서는 int 키워드를 사용하여 정수를 나타냅니다. 다른 쿼리에서 키워드 integer를 사용합니다. 여기에서 integer는 2의 보수 형식의 부호 있는 32비트 값으로 표현되며, 최솟값은 -2^31, 최댓값은 2^31-1입니다. JDBC 드라이버의 경우 비즈니스 분석 애플리케이션과 호환될 수 있도록 integer이(가) 반환됩니다.

  • bigint - 2의 보수 형식의 부호 있는 64비트 정수이며, 최솟값은 -2^63이고 최댓값은 2^63-1입니다.

  • double – 64비트 부호 포함 배정밀도 부동 소수점 숫자입니다. 범위는 4.94065645841246544e-324d ~ 1.79769313486231570e+308d, 양수 또는 음수입니다. double은 부동 소수점 산술에 대한 IEEE 표준(IEEE 754)을 따릅니다.

  • float – 32비트 부호 포함 단정밀도 부동 소수점 숫자입니다. 범위는 1.40129846432481707e-45 ~ 3.40282346638528860e+38, 양수 또는 음수입니다. float는 부동 소수점 산술에 대한 IEEE 표준(IEEE 754)을 따릅니다. Presto의 real에 해당합니다. Athena에서는 CREATE TABLE 등의 DDL 문에서 float을(를) 사용하고, SELECT CAST 등의 SQL 함수에서 real을(를) 사용합니다. 이 AWS Glue 크롤러는 float로 값을 반환하며, Athena는 내부에서 realfloat 형식을 번역합니다(2018년 6월 5일 릴리스 정보 참조).

  • decimal [ (precision, scale) ], 여기에서 precision은 총 자릿수이고, scale(선택 사항)은 소수부의 자릿수이며, 기본값은 0입니다. 예를 들어 decimal(11,5), decimal(15) 형식 정의를 사용합니다. precision 최대값은 38이고, scale 최대값은 38입니다.

    쿼리 DDL 표현식에서 특정 10진수 값이 있는 행을 선택하는 경우와 같이 10진수 값을 리터럴로 지정하려면 decimal 형식 정의를 지정하고, 쿼리에서 10진수 값을 (작은따옴표로 묶인) 리터럴로 나열합니다(예: decimal_value = decimal '0.12').

  • char – 길이가 1~255자로 지정된 고정 길이 문자 데이터입니다(예: char(10)). 자세한 내용은 CHAR Hive 데이터 형식을 참조하세요.

  • varchar – 길이가 1~65535자로 지정된 가변 길이 문자 데이터입니다(예: varchar(10)). 자세한 내용은 VARCHAR Hive 데이터 형식을 참조하세요.

  • string – 작은따옴표 또는 큰따옴표로 묶인 문자열 리터럴입니다.

    참고

    비 문자열 데이터 유형은 Athena에서 string으로 캐스팅할 수 없습니다. 대신 varchar로 캐스팅합니다.

  • binary - (Parquet의 데이터용)

  • date – ISO 형식의 날짜(예: YYYY-MM-DD)입니다. 예: date '2008-09-15'. 단, OpenCSVSerDe는 예외적으로 1970년 1월 1일 이후 경과된 일 수를 사용합니다. 자세한 내용은 CSV 처리를 위한 OpenCSVSerDe 단원을 참조하세요.

  • timestampjava.sql.Timestamp 호환 형식의 날짜 및 시간 인스턴트로, 최대 해상도는 밀리초입니다(예: yyyy-MM-dd HH:mm:ss[.f...]). 예: timestamp '2008-09-15 03:04:05.324'. 단, OpenCSVSerDe는 예외적으로 UNIX 숫자 형식의 TIMESTAMP 데이터를 사용합니다(예: 1579059880000). 자세한 내용은 CSV 처리를 위한 OpenCSVSerDe 단원을 참조하세요.

  • array < data_type >

  • map < primitive_type, data_type >

  • struct < col_name : data_type [comment col_comment] [, ...] >

[COMMENT table_comment]

comment 테이블 속성을 만들고, 지정한 table_comment로 채웁니다.

[PARTITIONED BY (col_name data_type [ COMMENT col_comment ], ... ) ]

col_name, data_typecol_comment가 지정되어 있으며 하나 이상의 파티션 열로 분할된 테이블을 생성합니다. 테이블에는 고유한 열 이름과 값 조합으로 구성된 하나 이상의 파티션이 있을 수 있습니다. 지정된 각각의 조합에 별개의 데이터 디렉터리가 생성되어 상황에 따라 쿼리 성능을 개선할 수 있습니다. 분할된 열은 테이블 데이터 자체 내에는 존재하지 않습니다. 테이블 열과 동일한 col_name에 대한 값을 사용하는 경우 오류가 발생합니다. 자세한 내용은 데이터 파티셔닝을 참조하세요.

참고

파티션이 있는 테이블을 만든 후 MSCK REPAIR TABLE 절로 구성된 후속 쿼리를 실행하여 파티션 메타데이터(예: MSCK REPAIR TABLE cloudfront_logs;)를 새로 고칩니다. Hive와 호환되지 않는 파티션의 경우 데이터를 쿼리할 수 있도록 파티션을 로드하려면 ALTER TABLE ADD PARTITION을 사용합니다.

[CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]

파티셔닝 여부와 상관없이 지정된 col_name 열을 버킷(buckets)이라는 데이터 하위 집합으로 나눕니다. 이 num_buckets 파라미터는 생성할 버킷 수를 지정합니다. 버킷팅은 대용량 데이터 집합에 대한 일부 쿼리의 성능을 향상시킬 수 있습니다.

[ROW FORMAT row_format]

해당되는 경우 테이블의 행 형식과 기본 소스 데이터를 지정합니다. row_format의 경우 DELIMITED 절을 이용해 하나 이상의 구분 기호를 지정하거나 아래 설명된 대로 SERDE 절을 사용합니다. ROW FORMAT을 생략하거나 ROW FORMAT DELIMITED를 지정하면 기본 SerDe가 사용됩니다.

  • [DELIMITED FIELDS TERMINATED BY char [ESCAPED BY char]]

  • [DELIMITED COLLECTION ITEMS TERMINATED BY char]

  • [MAP KEYS TERMINATED BY char]

  • [LINES TERMINATED BY char]

  • [NULL DEFINED AS char]

    SATES AS 파일 형식이 TEXTFILE인 경우 Hive 0.13에서만 사용할 수 있습니다.

--또는--

  • SERDE 'serde_name' [WITH SERDEPROPERTIES ("property_name" = "property_value", "property_name" = "property_value" [, ...] )]

    serde_name은 사용할 SerDe를 나타냅니다. WITH SERDEPROPERTIES 절을 사용하면 SerDe에서 허용하는 하나 이상의 사용자 지정 속성을 제공할 수 있습니다.

[STORED AS file_format]

테이블 데이터의 파일 형식을 지정합니다. 지정하지 않을 경우, TEXTFILE이 기본값입니다. file_format 옵션은 다음과 같습니다.

  • SEQUENCEFILE

  • TEXTFILE

  • RCFILE

  • ORC

  • PARQUET

  • AVRO

  • ION

  • INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

[LOCATION 's3://bucket_name/[folder]/']

테이블을 생성할 Amazon S3의 기본 데이터 위치를 지정합니다. 위치 경로는 버킷 이름 또는 버킷 이름과 하나 이상의 폴더여야 합니다. 파티션을 사용하는 경우 분할된 데이터의 루트를 지정합니다. 테이블 위치에 대한 자세한 내용은 Amazon S3에서 테이블 위치 단원을 참조하세요. 데이터 형식 및 권한에 대한 자세한 내용은 Athena의 테이블 및 Amazon S3의 데이터 요구 사항을 참조하세요.

폴더 또는 버킷에 후행 슬래시를 사용합니다. 파일 이름이나 glob 문자를 사용하지 마세요.

다음 사용:

s3://mybucket/

s3://mybucket/folder/

s3://mybucket/folder/anotherfolder/

사용 금지:

s3://path_to_bucket

s3://path_to_bucket/*

s3://path_to-bucket/mydatafile.dat

[TBLPROPERTIES ( ['has_encrypted_data'='true | false',] ['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]

사전 정의된 테이블 속성 외에 테이블 정의에 사용할 사용자 지정 메타데이터 키-값 페어를 지정합니다(예: "comment").

Athena에는 기본 속성인 has_encrypted_data가 있습니다. 이 속성을 true로 설정하면 LOCATION에서 지정한 기본 데이터 세트가 암호화된다는 뜻입니다. 생략할 경우 작업 그룹의 설정이 클라이언트 측 설정을 재정의하지 않으면, false로 간주됩니다. 기본 데이터가 암호화되는데 false로 설정하거나 생략되면, 쿼리 결과가 오류가 됩니다. 자세한 내용은 저장된 데이터 암호화 단원을 참조하세요.

AWS Glue에서 ETL 작업을 실행하려면 csv, parquet, orc, avro, 또는 json 등 AWS Glue의 데이터 형식을 나타내기 위해 classification 속성이 포함된 테이블을 생성해야 합니다. 예: 'classification'='csv'. 이 속성을 지정하지 않으면 ETL 작업에 실패합니다. 이어서 AWS Glue 콘솔, API 또는 CLI를 사용해 이를 지정할 수 있습니다. 자세한 내용은 AWS Glue 개발자 안내서에서 Athena와 함께 ETL의 AWS Glue 작업 사용Glue에 작업 작성을 참조하세요.

테이블 생성에 대한 자세한 내용은 Athena에서 테이블 생성 단원을 참조하세요.