CREATE EXTERNAL TABLE - Amazon Redshift

CREATE EXTERNAL TABLE

지정된 스키마에서 새 외부 테이블을 생성합니다. 모든 외부 테이블은 외부 스키마에 생성해야 합니다. 외부 스키마와 외부 테이블에 대해서는 검색 경로가 지원되지 않습니다. 자세한 내용은 CREATE EXTERNAL SCHEMA 단원을 참조하십시오.

CREATE EXTERNAL TABLE 명령을 사용하여 생성되는 외부 테이블 외에도 Amazon Redshift는 AWS Glue 또는 AWS Lake Formation 카탈로그나 Apache Hive 메타스토어에 정의된 외부 테이블을 참조할 수 있습니다. CREATE EXTERNAL SCHEMA 명령을 사용하면 외부 카탈로그에 정의된 외부 데이터베이스를 등록하고 Amazon Redshift에서 외부 테이블을 사용하도록 할 수 있습니다. AWS Glue 또는 AWS Lake Formation 카탈로그 또는 Hive 메타스토어에 외부 테이블이 존재하는 경우 CREATE EXTERNAL TABLE을 사용하여 테이블을 생성하지 않아도 됩니다. 외부 테이블을 보려면 SVV_EXTERNAL_TABLES 시스템 뷰를 쿼리하십시오.

CREATE EXTERNAL TABLE AS 명령을 실행하여 쿼리의 열 정의를 기반으로 외부 테이블을 생성하고 해당 쿼리의 결과를 Amazon S3에 작성할 수 있습니다. 결과는 Apache Parquet 또는 구분된 텍스트 형식입니다. 외부 테이블에 파티션 키가 있는 경우 Amazon Redshift는 해당 파티션 키에 따라 새 파일을 분할하고 새 파티션을 외부 카탈로그에 자동으로 등록합니다. CREATE EXTERNAL TABLE AS에 대한 자세한 내용은 사용 노트 섹션을 참조하세요.

다른 Amazon Redshift 테이블에 사용하는 것과 같은 SELECT 구문을 사용하여 외부 테이블을 쿼리할 수 있습니다. INSERT 구문을 사용하여 Amazon S3의 외부 테이블 위치에 새 파일을 작성할 수도 있습니다. 자세한 내용은 INSERT(외부 테이블) 단원을 참조하십시오.

외부 테이블로 보기를 새로 만들려면 CREATE VIEW 문에 WITH NO SCHEMA BINDING 절을 포함시키십시오.

트랜잭션(BEGIN … END) 내에서 CREATE EXTERNAL TABLE을 실행할 수 없습니다. 버전 관리에 대한 자세한 내용은 직렬화 가능 격리 단원을 참조하십시오.

필수 권한

외부 테이블을 생성하려면 외부 스키마의 소유자이거나 수퍼유저여야 합니다. 외부 스키마의 소유권을 이전하려면 ALTER SCHEMA를 사용해 소유자를 변경합니다. 외부 테이블에 대한 액세스는 외부 스키마에 대한 액세스에 의해 제어됩니다. 외부 테이블에 대한 권한을 GRANT 또는 REVOKE할 수 없습니다. 대신에, 외부 스키마에 대한 USAGE를 허용하거나 취소합니다.

사용 노트에는 외부 테이블의 특정 권한에 대한 추가 정보가 있습니다.

구문

CREATE EXTERNAL TABLE
external_schema.table_name
(column_name data_type [, …] )
[ PARTITIONED BY (col_name data_type [, … ] )]
[ { ROW FORMAT DELIMITED row_format |
  ROW FORMAT SERDE 'serde_name'
  [ WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ] } ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]

다음은 CREATE EXTERNAL TABLE AS의 구문입니다.

CREATE EXTERNAL TABLE
external_schema.table_name
[ PARTITIONED BY (col_name [, … ] ) ]
[ ROW FORMAT DELIMITED row_format ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
 AS
 { select_statement }
         

파라미터

external_schema.table_name

생성한 후 외부 스키마 이름으로 정규화할 테이블의 이름입니다. 외부 테이블은 외부 스키마에 생성해야 합니다. 자세한 내용은 CREATE EXTERNAL SCHEMA 단원을 참조하십시오.

테이블 이름의 최대 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다. 최대 4바이트까지 UTF-8 멀티바이트 문자를 사용할 수 있습니다. Amazon Redshift는 사용자 정의 임시 테이블과 쿼리 처리 또는 시스템 유지 관리 중에 Amazon Redshift에서 생성한 임시 테이블을 포함하여 클러스터당 테이블을 9,900개로 제한합니다. 선택적으로, 데이터베이스 이름으로 테이블 이름을 정규화할 수 있습니다. 다음 예에서는 데이터베이스 이름이 spectrum_db이고, 외부 스키마 이름은 spectrum_schema이며, 테이블 이름은 test입니다.

create external table spectrum_db.spectrum_schema.test (c1 int) stored as parquet location 's3://amzn-s3-demo-bucket/myfolder/';

지정된 데이터베이스 또는 스키마가 존재하지 않는 경우 테이블이 생성되지 않으며, 이 명령문은 오류를 반환합니다. 시스템 데이터베이스 template0, template1, padb_harvest 또는 sys:internal에서 테이블 또는 뷰를 생성할 수 없습니다.

테이블 이름은 지정된 스키마에 대한 고유한 이름이어야 합니다.

유효한 이름에 대한 자세한 내용은 이름 및 식별자 섹션을 참조하세요.

( column_name data_type )

생성되는 각 열의 이름과 데이터 형식입니다.

열 이름의 최대 길이는 127바이트이며, 이보다 긴 이름은 127바이트까지 표시되고 나머지는 잘립니다. 최대 4바이트까지 UTF-8 멀티바이트 문자를 사용할 수 있습니다. 열 이름 "$path" 또는 "$size"는 지정할 수 없습니다. 유효한 이름에 대한 자세한 내용은 이름 및 식별자 섹션을 참조하세요.

기본적으로 Amazon Redshift에서는 가상 열 $path$size가 있는 외부 테이블을 생성합니다. spectrum_enable_pseudo_columns 구성 파라미터를 false로 설정하여 세션에 대해 가상 열 생성을 비활성화할 수 있습니다. 자세한 내용은 가상 열 단원을 참조하십시오.

가상 열이 활성화되어 있으면 단일 테이블에서 정의할 수 있는 최대 열 개수는 1,598개입니다. 가상 열이 활성화되어 있지 않으면 테이블 하나에서 정의할 수 있는 최대 열 개수는 1,600개입니다.

"넓은 테이블"을 생성할 경우에는 로드 및 쿼리 처리 중에 열의 목록이 중간 결과에 대한 행 너비 경계를 초과하지 않도록 주의하십시오. 자세한 내용은 사용 노트 단원을 참조하십시오.

CREATE EXTERNAL TABLE AS 명령의 경우 열이 쿼리에서 파생되기 때문에 열 목록이 필요하지 않습니다.

data_type

다음 모듈을 지원합니다.데이터 타입

  • SMALLINT (INT2)

  • INTEGER (INT, INT4)

  • BIGINT (INT8)

  • DECIMAL (NUMERIC)

  • REAL (FLOAT4)

  • DOUBLE PRECISION (FLOAT8)

  • BOOLEAN (BOOL)

  • CHAR (CHARACTER)

  • VARCHAR (CHARACTER VARYING)

  • VARBYTE(문자 가변) - Parquet 및 ORC 데이터 파일과 함께 사용할 수 있으며 비분할 테이블에만 사용할 수 있습니다.

  • DATE - 텍스트, Parquet 또는 ORC 데이터 파일과 함께 또는 파티션 열로만 사용할 수 있습니다.

  • TIMESTAMP

DATE의 경우 다음과 같은 형식을 사용할 수 있습니다. 숫자를 사용하여 표시되는 월 값의 경우 다음 형식이 지원됩니다.

  • mm-dd-yyyy 예: 05-01-2017. 이 값이 기본값입니다.

  • yyyy-mm-dd - 여기서 연도는 2자리 이상의 숫자로 표시됩니다. 예: 2017-05-01.

세 글자 약어를 사용하여 표시되는 월 값의 경우 다음 형식이 지원됩니다.

  • mmm-dd-yyyy 예: may-01-2017. 이 값이 기본값입니다.

  • dd-mmm-yyyy - 여기서 연도는 2자리 이상의 숫자로 표시됩니다. 예: 01-may-2017.

  • yyyy-mmm-dd - 여기서 연도는 2자리 이상의 숫자로 표시됩니다. 예: 2017-may-01.

지속적으로 100보다 작은 연도 값의 경우 연도는 다음 방식으로 계산됩니다.

  • 연도가 70보다 작은 경우 연도는 연도에 2000을 더한 값으로 계산됩니다. 예를 들어 mm-dd-yyyy 형식의 날짜 05-01-17은 05-01-2017로 변환됩니다.

  • 연도가 100보다 작고 69보다 큰 경우 연도는 연도에 1900을 더한 값으로 계산됩니다. 예를 들어 mm-dd-yyyy 형식의 날짜 05-01-89는 05-01-1989로 변환됩니다.

  • 2자리로 표시되는 연도 값의 경우 앞에 0을 추가하여 연도를 4자리로 표시합니다.

타임스탬프 값 yyyy-mm-dd HH:mm:ss.SSSSSS에서 볼 수 있듯이, 텍스트 파일의 타임스탬프 값은 2017-05-01 11:30:59.000000 형식이어야 합니다.

VARCHAR 열의 길이 단위는 문자 수가 아니라 바이트로 정의됩니다. 예를 들어 VARCHAR(12) 열에는 단일 바이트 문자 12개, 2바이트 문자 6개가 포함될 수 있습니다. 외부 테이블을 쿼리하는 경우 오류를 반환하지 않고 정의된 열 크기에 맞춰 결과가 잘립니다. 자세한 내용은 스토리지 및 범위 단원을 참조하십시오.

최상의 성능을 위해 데이터에 맞춰 가장 작은 열 크기를 지정하는 것이 좋습니다. 열의 값에 대한 최대 크기(바이트)를 찾으려면 OCTET_LENGTH 함수를 사용하십시오. 다음 예에서는 이메일 열 값의 최대 크기를 반환합니다.

select max(octet_length(email)) from users; max --- 62
PARTITIONED BY (col_name data_type [, … ] )

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

분할된 테이블을 생성한 후 ALTER TABLE ... ADD PARTITION 문을 사용하여 테이블을 변경하여 새 파티션을 외부 카탈로그에 등록합니다. 파티션을 추가할 때 Amazon S3에서 파티션 데이터가 들어 있는 하위 폴더의 위치를 정의합니다.

예를 들어, 테이블 spectrum.lineitem_partPARTITIONED BY (l_shipdate date)로 정의되어 있는 경우 다음 ALTER TABLE 명령을 실행하여 파티션을 추가합니다.

ALTER TABLE spectrum.lineitem_part ADD PARTITION (l_shipdate='1992-01-29') LOCATION 's3://spectrum-public/lineitem_partition/l_shipdate=1992-01-29';

CREATE EXTERNAL TABLE AS를 사용하는 경우 ALTER TABLE...ADD PARTITION을 실행할 필요가 없습니다. Amazon Redshift는 외부 카탈로그에 새 파티션을 자동으로 등록합니다. 또한 Amazon Redshift는 테이블에 정의된 파티션 키를 기반으로 Amazon S3의 파티션에 해당 데이터를 자동으로 씁니다.

파티션을 보려면 SVV_EXTERNAL_PARTITIONS 시스템 뷰를 쿼리하십시오.

참고

CREATE EXTERNAL TABLE AS 명령의 경우 이 열은 쿼리에서 파생되므로 파티션 열의 데이터 형식을 지정할 필요가 없습니다.

ROW FORMAT DELIMITED rowformat

기본 데이터의 형식을 지정하는 절입니다. rowformat에 가능한 값은 다음과 같습니다.

  • LINES TERMINATED BY 'delimiter'

  • FIELDS TERMINATED BY 'delimiter'

'delimiter'에 단일 ASCII 문자를 지정합니다. 8진수 문자를 사용해 인쇄되지 않는 ASCII 문자를 '\ddd' 형식으로 지정할 수 있습니다. 여기서 d는 최대 ‘\177’까지의 8진수(0~7)입니다. 다음은 8진수 문자를 사용하여 BEL(bell) 문자를 지정하는 예입니다.

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'

ROW FORMAT이 생략된 경우 기본 형식은 '\A(제목 시작)'로 종료되는 구분된 필드와 '\n(줄 바꿈)'으로 종료되는 행입니다.

ROW FORMAT SERDE 'serde_name'
[WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ]

기본 데이터의 SERDE 형식을 지정하는 절입니다.

'serde_name'

SerDe의 이름입니다. 다음 형식을 지정할 수 있습니다.

  • org.apache.hadoop.hive.serde2.RegexSerDe

  • com.amazonaws.glue.serde.GrokSerDe

  • org.apache.hadoop.hive.serde2.OpenCSVSerde

    이 파라미터는 OpenCSVSerde에 대해 다음 SerDe 속성을 지원합니다.

    'wholeFile' = 'true'

    wholeFile 속성을 true로 설정하여 OpenCSV 요청에 대해 따옴표로 묶인 문자열 내의 줄 바꿈 문자(\in)를 적절하게 구문 분석합니다.

  • org.openx.data.jsonserde.JsonSerDe

    • JSON SERDE는 또한 Ion 파일을 지원합니다.

    • JSON은 올바른 형식을 따라야 합니다.

    • Ion 및 JSON 타임스탬프에서는 ISO8601 형식을 사용해야 합니다.

    • 이 파라미터는 JsonSerDe에 대해 다음 SerDe 속성을 지원합니다.

      'strip.outer.array'='true'

      마치 배열 내에 여러 JSON 레코드가 포함되어 있는 것처럼 대괄호( [ … ] )로 둘러싸인 매우 큰 배열 하나가 포함된 Ion/JSON 파일을 처리합니다.

  • com.amazon.ionhiveserde.IonHiveSerDe

    Amazon ION 형식은 데이터 유형 외에도 텍스트 및 이진 형식을 제공합니다. ION 형식의 데이터를 참조하는 외부 테이블의 경우 외부 테이블의 각 열을 ION 형식 데이터의 해당 요소에 매핑합니다. 자세한 내용은 Amazon Ion을 참조하세요. 또한 입력 및 출력 형식을 지정해야 합니다.

WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ]

경우에 따라 쉼표로 구분된 속성 값 및 이름을 지정합니다.

ROW FORMAT이 생략된 경우 기본 형식은 '\A(제목 시작)'로 종료되는 구분된 필드와 '\n(줄 바꿈)'으로 종료되는 행입니다.

STORED AS file_format

데이터 파일의 파일 형식입니다.

유효한 형식은 다음과 같습니다.

  • PARQUET

  • RCFILE(LazyBinaryColumnarSerDe가 아니라 ColumnarSerDe만 사용하는 데이터의 경우)

  • SEQUENCEFILE

  • TEXTFILE(JSON 파일을 포함한 텍스트 파일의 경우)

  • ORC

  • AVRO

  • INPUTFORMAT 'input_format_classname' OUTPUTFORMAT 'output_format_classname'

CREATE EXTERNAL TABLE AS 명령은 두 가지 파일 형식, 즉 TEXTFILE 및 PARQUET를 지원합니다.

INPUTFORMAT과 OUTPUTFORMAT에 대해 다음 예에 나온 것처럼 클래스 이름을 지정합니다.

'org.apache.hadoop.mapred.TextInputFormat'
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file'}

데이터 파일이 포함된 Amazon S3 버킷 또는 폴더, 혹은 Amazon S3 객체 경로 목록이 포함된 매니페스트 파일까지의 경로. 버킷은 Amazon Redshift 클러스터와 동일한 AWS 리전에 있어야 합니다. 지원되는 AWS 리전 목록은 Amazon Redshift Spectrum 고려 사항 섹션을 참조하세요.

경로가 버킷 또는 폴더를 지정하는 경우(예: 's3://amzn-s3-demo-bucket/custdata/') Redshift Spectrum은 지정된 버킷 또는 폴더와 모든 하위 폴더에서 파일을 스캔합니다. Redshift Spectrum은 마침표나 밑줄로 시작되는 숨겨진 파일과 파일을 무시합니다.

경로가 매니페스트 파일을 지정하는 경우 's3://bucket/manifest_file' 인수는 단일 파일을 명시적으로 참조해야 합니다(예: 's3://amzn-s3-demo-bucket/manifest.txt'). 키 접두사를 참조할 수는 없습니다.

매니페스트란 Amazon S3에서 로드할 개별 파일의 URL과 파일 크기(단위: 바이트)를 JSON 형식으로 나열한 텍스트 파일을 말합니다. URL에는 파일의 버킷 이름과 전체 객체 경로가 포함됩니다. 매니페스트에서 지정되는 파일이 서로 다른 버킷에 있을 수 있지만 모든 버킷은 Amazon Redshift 클러스터와 동일한 AWS 리전에 속해야 합니다. 파일이 두 번 나열되면 마찬가지로 두 번 로드됩니다. 다음은 3개의 파일을 로드하는 매니페스트의 JSON 형식을 나타낸 예입니다.

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "meta": { "content_length": 5956875 } }, {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "meta": { "content_length": 5997091 } }, {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } } ] }

특정 파일의 포함을 필수로 설정할 수 있습니다. 이렇게 하려면 매니페스트의 파일 수준에서 mandatory 옵션을 포함시킵니다. 누락된 필수 파일이 있는 외부 테이블을 쿼리하면 SELECT 문이 실패합니다. 외부 테이블 정의에 포함된 모든 파일이 있는지 확인합니다. 모든 파일이 없으면 찾을 수 없는 첫 번째 필수 파일을 표시하는 오류가 나타납니다. 다음은 mandatory 옵션이 true로 설정된 매니페스트의 JSON 형식을 나타낸 예입니다.

{ "entries": [ {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "mandatory":true, "meta": { "content_length": 5956875 } }, {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "mandatory":false, "meta": { "content_length": 5997091 } }, {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } } ] }

UNLOAD를 사용하여 만든 파일을 참조하기 위해 MANIFEST 파라미터와 함께 UNLOAD를 사용하여 만든 매니페스트를 사용할 수 있습니다. 이 매니페스트 파일은 Amazon S3에서 COPY의 매니페스트 파일과 호환되지만 사용하는 키는 다릅니다. 사용되지 않는 키는 무시됩니다.

TABLE PROPERTIES ( 'property_name'='property_value' [, ...] )

테이블 속성의 테이블 정의를 설정하는 절입니다.

참고

테이블 속성은 대/소문자를 구분합니다.

'compression_type'='value'

파일 이름에 확장자가 포함되지 않은 경우에 사용할 압축 유형을 설정하는 속성입니다. 이 속성을 설정하고 파일 확장자가 존재하는 경우 확장자를 무시하고 속성이 설정한 값을 사용합니다. 압축 유형에 유효한 값은 다음과 같습니다.

  • bzip2

  • gzip

  • 없음

  • gzip

'data_cleansing_enabled'='true / false’

이 속성은 테이블에 대해 데이터 처리가 켜져 있는지 여부를 설정합니다. 'data_cleansing_enabled'가 true로 설정되어 있으면 테이블에 대한 데이터 처리가 켜져 있는 것입니다. 'data_cleansing_enabled'가 false로 설정되어 있으면 테이블에 대한 데이터 처리가 꺼져 있는 것입니다. 이 속성으로 제어되는 테이블 수준 데이터 처리 속성 목록은 다음과 같습니다.

  • column_count_mismatch_handling

  • invalid_char_handling

  • numeric_overflow_handling

  • replacement_char

  • surplus_char_handling

예시는 데이터 처리 예 섹션을 참조하세요.

'invalid_char_handling'='value'

쿼리 결과에 잘못된 UTF-8 문자 값이 포함된 경우 수행할 작업을 지정합니다. 다음 작업을 지정할 수 있습니다.

DISABLED

잘못된 문자 처리를 수행하지 않습니다.

FAIL

잘못된 UTF-8 값이 포함된 데이터를 반환하는 쿼리를 취소합니다.

SET_TO_NULL

잘못된 UTF-8 값을 null로 바꿉니다.

DROP_ROW

행의 각 값을 null로 바꿉니다.

REPLACE

잘못된 문자를 replacement_char을 사용하여 지정한 대체 문자열로 바꿉니다.

'replacement_char'='character

invalid_char_handlingREPLACE로 설정할 경우 사용할 대체 문자를 지정합니다.

'numeric_overflow_handling'='value’

ORC 데이터에 열 정의(예: SMALLINT 또는 int16)보다 큰 정수(예: BIGINT 또는 int64)가 포함된 경우 수행할 작업을 지정합니다. 다음 작업을 지정할 수 있습니다.

DISABLED

잘못된 문자 처리가 꺼져 있습니다.

FAIL

데이터에 잘못된 문자가 포함된 경우 쿼리를 취소합니다.

SET_TO_NULL

잘못된 문자를 null로 설정합니다.

DROP_ROW

행의 각 값을 null로 설정합니다.

'surplus_bytes_handling'='value'

VARBYTE 데이터를 포함하는 열에 대해 정의된 데이터 형식의 길이를 초과하는 데이터 로드를 처리하는 방법을 지정합니다. 기본적으로 Redshift Spectrum에서는 열의 너비를 초과하는 데이터에 대해 값을 null로 설정합니다.

쿼리가 데이터 형식의 길이를 초과하는 데이터를 반환하는 경우 수행할 다음 작업을 지정할 수 있습니다.

SET_TO_NULL

열 너비를 초과하는 데이터를 null로 바꿉니다.

DISABLED

잉여 바이트 처리를 수행하지 않습니다.

FAIL

열 너비를 초과하는 데이터를 반환하는 쿼리를 취소합니다.

DROP_ROW

열 너비를 초과하는 데이터가 포함된 모든 행을 삭제합니다.

TRUNCATE

열에 정의된 최대 문자 수를 초과하는 문자를 제거합니다.

'surplus_char_handling'='value'

VARCHAR, CHAR 또는 문자열 데이터를 포함하는 열에 대해 정의된 데이터 형식의 길이를 초과하는 데이터 로드를 처리하는 방법을 지정합니다. 기본적으로 Redshift Spectrum에서는 열의 너비를 초과하는 데이터에 대해 값을 null로 설정합니다.

쿼리가 열 너비를 초과하는 데이터를 반환하는 경우 수행할 다음 작업을 지정할 수 있습니다.

SET_TO_NULL

열 너비를 초과하는 데이터를 null로 바꿉니다.

DISABLED

잉여 문자 처리를 수행하지 않습니다.

FAIL

열 너비를 초과하는 데이터를 반환하는 쿼리를 취소합니다.

DROP_ROW

행의 각 값을 null로 바꿉니다.

TRUNCATE

열에 정의된 최대 문자 수를 초과하는 문자를 제거합니다.

'column_count_mismatch_handling'='value’

파일에 포함된 행 값이 외부 테이블 정의에 지정된 열 수보다 적거나 많은지 식별합니다. 이 속성은 압축되지 않은 텍스트 파일 형식에만 사용할 수 있습니다. 다음 작업을 지정할 수 있습니다.

DISABLED

열 개수 불일치 처리가 꺼져 있습니다.

FAIL

열 개수 불일치가 감지되면 쿼리에 실패합니다.

SET_TO_NULL

누락된 값을 NULL로 채우고 각 행의 추가 값을 무시합니다.

DROP_ROW

열 수 불일치 오류가 포함된 모든 행을 스캔에서 삭제합니다.

'numRows'='row_count'

테이블 정의를 위해 numRows 값을 설정하는 속성입니다. 외부 테이블의 통계를 명시적으로 업데이트하려면 테이블의 크기를 나타내도록 numRows 속성을 설정합니다. Amazon Redshift는 쿼리 옵티마이저가 쿼리 계획을 생성하는 데 사용하는 테이블 통계를 생성하기 위해 외부 테이블을 분석하지 않습니다. 따라서 외부 테이블에 대한 테이블 통계가 준비되어 있지 않으면 Amazon Redshift가 외부 테이블이 더 큰 테이블이고 로컬 테이블이 더 작은 테이블이라는 가정에 기초하여 쿼리 실행 계획을 생성합니다.

'skip.header.line.count'='line_count'

각 원본 파일의 시작 부분에서 건너 뛸 행 개수를 설정하는 속성입니다.

'serialization.null.format'=' '

필드에 제공된 텍스트와 정확히 일치하는 항목이 있는 경우 Spectrum을 지정하는 속성은 NULL 값을 반환해야 합니다.

'orc.schema.resolution'='mapping_type'

ORC 데이터 형식을 사용하는 테이블의 열 매핑 유형을 설정하는 속성입니다. 모든 데이터 형식의 경우 이 속성은 무시됩니다.

열 매핑 유형에 유효한 값은 다음과 같습니다.

  • name

  • position

orc.schema.resolution 속성을 생략하면 열이 기본적으로 이름별로 매핑됩니다. orc.schema.resolution'name' 또는 'position' 이외 값으로 설정하면 열은 위치별로 매핑됩니다. 열 매핑에 대한 자세한 내용은 외부 테이블 열을 ORC 열에 매핑 섹션을 참조하세요.

참고

COPY 명령은 반드시 위치를 기준으로 ORC 데이터 파일에 매핑됩니다. orc.schema.resolution 테이블 속성은 COPY 명령 동작에 영향을 주지 않습니다.

'write.parallel'='on / off’

CREATE EXTERNAL TABLE AS가 병렬 방식으로 데이터를 작성해야 하는지 여부를 설정하는 속성입니다. 기본적으로 CREATE EXTERNAL TABLE AS는 클러스터의 조각 수에 따라 다수의 파일에 병렬 방식으로 데이터를 작성합니다. 기본 옵션은 on입니다. 'write.parallel'이 꺼짐으로 설정되면 CREATE EXTERNAL TABLE AS는 Amazon S3의 하나 이상의 데이터 파일에 순차적으로 작성합니다. 이 테이블 속성은 동일한 외부 테이블의 모든 후속 INSERT 문에도 적용됩니다.

‘write.maxfilesize.mb’=‘size’

CREATE EXTERNAL TABLE AS에 의해 Amazon S3에 작성된 각 파일의 최대 크기(MB)를 설정하는 속성입니다. 크기는 5에서 6200 사이의 유효한 정수여야 합니다. 기본 최대 파일 크기는 6,200MB입니다. 이 테이블 속성은 동일한 외부 테이블의 모든 후속 INSERT 문에도 적용됩니다.

‘write.kms.key.id’=‘value

AWS Key Management Service 키를 지정하여 Amazon S3 객체에 대해 서버 측 암호화(SSE)를 사용할 수 있습니다. 여기서 은 다음 중 하나입니다.

  • auto - Amazon S3 버킷에 저장된 기본 AWS KMS 키를 사용합니다.

  • 데이터를 암호화하기 위해 지정하는 kms-key입니다.

select_statement

쿼리를 정의하여 외부 테이블에 하나 이상의 행을 삽입하는 문입니다. 쿼리가 생성하는 모든 행은 테이블 정의에 따라 텍스트 또는 Parquet 형식으로 Amazon S3에 작성됩니다.

예제 모음은 예시에서 확인할 수 있습니다.