Athena Create Table 속성

Hoju·2022년 8월 26일
0

Troble Shting

목록 보기
4/13
  • 개요
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에서 Table이 S3에 있는 기본 데이터를 기반으로 함을 지정합니다. Governed Table 또는 Iceberg 테이블을 만들 때를 제외하고 항상 EXTERNAL 키워드를 사용해야합니다. 그 이유지 사용하지 않는다면 Athena에서 오류가 발생합니다.
    즉, Create table을 하면 안되고 Create EXTERNAL table을 해야합니다.
  • IF NOT EXISTS: table_name이라는 테이블이 이미 있는 경우 오류 메시지를 억제합니다.
  • db_name.table_name: 작성할 테이블의 이름을 지정합니다. 선택적 db_name 매개변수는 테이블을 작성할 데이터베이스를 지정합니다. 테이블이름에 숫자가 포함이 된다면 “ “로 묶어줍니다.
  • [(col_name data_type [COMMENT col_comment][, ...] )]
    사용자가 생성할 각 열의 이름과 데이터 형식을 지정합니다. col_name(열 이름)은 로 묶습니다. 즉, Name 이런식으로 해야합니다.
    - Date_type 유형
    - boolean: True and False
    - tinyint: 2의 보수 형식의 8비트 부호가 있는 정수
    - smailint: 2의 보수 형식의 16비트 부호가 있는 정수
    - int: 정수
    - bigint: 2의 보수 형식의 64비트 부호가 있는 정수
    - double: 64비트 부호있는 배정밀도 부동 소수점 숫자
    - float: 소수점 이하 7자리까지 즉, 소수
    - decimal[ (precision, scale) ]: 여기에서 precision은 자릿수의 총 수이며, scale은 소수점 이하 자릿수 입니다. 즉, decimal(11, 5)이런식으로 표기
    - char: 고정 길이 문자 데이터. char(n)은 1~ 255까지의 길이를 지정합니다. 즉, N을 10으로 설정했을때 ABC를 저장하면 앞의 3자리를 사용하고 뒤의 7자리를 빈 채로 둔다.
    - varchar: 가변 길이 문자 데이터이다. varchar(n)은 1~ 65535까지의 길이를 지정한다.
    즉, N을 10이라고 가정하자. 그랬을 때 ABC를 데이터를 저장하면 내부적으로는 3자리만 사용한다. 따라서 CHAR 형식보다 저장 공간을 효율적으로 운영할 수 있다.
    - string: 작은 따옴표 또는 큰 따옴표로 묶인 문자열 리터럴(큰따옴표( " " )로 묶은 소스 문자 집합의 문자 시퀀스)
    - binary: Parquet 데이터 용
    - date: YYYY-MM-DD같은 ISO 형식의 날짜 이다.
    - array<데이터 유형>
    - map<프리미티브 유형, 데이터 유형>
    - struct<col_name: data_type [ comment col_comment][,…]>

  • [COMMENT table_comment]: comment 테이블 속성을 만들고 지정한 table_comment를 추가합니다.
  • [PARTITIONED BY (col_name 데이터 유형 [ COMMENT col_comment ], ... ) ]
    col_name, data_type 및 col_comment가 지정한 하나 이상의 열을 가진 분할된 테이블을 만듭니다. 즉, 파티션을 가질 수 있습니다.
  • [CLUSTERED BY (col_name, col_name, ...) INTO num_buckets BUCKETS]
    파티션의 유무에 관계없이 지정된 col_name 열의 데이터를 버킷이라는 데이터 하위 집합으로 분할합니다. num_buckets 매개변수는 작성할 버킷 수를 지정합니다.
  • [ROW FORMAT 행_형식]: 테이블의 행 형식과 기본 소스 데이터를 지정합니다. 행 형식은 SERDE 절을 사용하여 한 테이블에 대한 사용자 지정 SerDe를 지정합니다.
    • SerDe 사용 방법

      ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 이런식으로 지정한다.
      어디다가? 테이블 생성 Create table table_name ( `Name` string,......) 다음에 지정한다.
💡 SerDe(and FileFormat)는 Hive가 HDFS로 부터 읽어들인 데이터를 테이블 형태로 보여주고, 데이터에 대한 변경을 반영해서 다시 HDFS 저장할 수 있도록 해준다.
  • WITH SERDEPROPERTIES: 절을 사용하면 SerDe에서 허용하는 하나 이상의 사용자 지정 속성을 지정할 수 있습니다.
    • WITH SERDEPROPERTIES 예시

      WITH SERDEPROPERTIES ( 'serialization.format' = '\t',
                  'field.delim' = '\t')
  • [STORED AS file_format]: 테이블 데이터의 파일 형식을 지정합니다. 생략하면 기본 TEXTFILE이 사용됩니다.
  • [Location ‘S3://bucket_name/Forder/’]: 테이블이 생성되는 Amazon S3에서 기본 데이터의 위치를 지정합니다. 파티션을 사용하는 경우 파티션된 데이터의 루트를 지정하빈다.
  • TBLPROPERTIES ( ['has_encrypted_data'='true | false',]['classification'='aws_glue_classification',] property_name=property_value [, ...] ) ]: 미리 정의된 테이블 속성(”comment”등)이외에 테이블 정의의 사용자 지정 메타데이터로 키-값 쌍을 지정합니다. Athena의 내장 속성 has_encrypted_data있습니다. 이 속성을 true로 설정하고, LOCATION로 지정하는 기본 데이터를 암호화하도록 지정합니다.
    ETL 작업을 실행하는 경우 AWS Glue는 테이블 생성 시 classification속성을 설정하고 AWS Glue 데이터 유형 csvparquetorcavrojson중 하나로 지정해야 합니다. 예를 들어, 'classification'='csv'입니다. 이 속성을 지정하지 않으면 ETL 작업이 실패합니다.
profile
Devops가 되고 싶은 청소년

0개의 댓글