데이터 변환 파라미터 - Amazon Redshift

데이터 변환 파라미터

COPY 명령은 테이블에 데이터를 로드할 때 원본 데이터의 문자열을 묵시적으로 대상 열의 데이터 형식으로 변환합니다. 기본 동작과 다른 변환을 지정해야 하거나, 혹은 기본 변환이 오류를 일으킬 때는 다음 파라미터를 지정하여 데이터 변환을 관리할 수 있습니다. 이러한 파라미터 구문에 대한 자세한 내용은 COPY 구문을 참조하세요.

데이터 변환 파라미터
ACCEPTANYDATE

00/00/00 00:00:00 같이 잘못된 형식을 포함하여 모든 데이터 형식을 오류 없이 로드할 수 있도록 허용합니다. 이 파라미터는 TIMESTAMP 및 DATE 열에만 적용됩니다. ACCEPTANYDATE는 항상 DATEFORMAT 파라미터와 함께 사용합니다. 데이터의 날짜 형식이 DATEFORMAT 명세와 일치하지 않는 경우에는 Amazon Redshift가 NULL 값을 해당 필드에 삽입합니다.

ACCEPTINVCHARS [AS] ['replacement_char']

데이터에 잘못된 UTF-8 문자가 포함되어 있어도 VARCHAR 열에 데이터를 로드할 수 있습니다. ACCEPTINVCHARS를 지정하면 COPY가 잘못된 UTF-8 문자를 각각 replacement_char에서 지정하는 문자로 구성된, 동일한 길이의 문자열로 변경합니다. 예를 들어 변경 문자가 '^'라면 잘못된 3바이트 문자는 '^^^'로 변경됩니다.

변경 문자는 NULL을 제외한 모든 ASCII 문자가 될 수 있습니다. 기본 문자는 물음표(?)입니다. 잘못된 UTF-8 문자에 대한 자세한 내용은 멀티바이트 문자 로드 오류 섹션을 참조하세요.

COPY는 잘못된 UTF-8 문자가 포함된 행의 수를 반환한 후 해당하는 행마다 STL_REPLACEMENTS 시스템 테이블에 항목을 추가합니다. 이때 각 노드 조각에서 항목이 추가되는 행의 최대 수는 100개입니다. 이후 추가되는 잘못된 UTF-8 문자 역시 변경되지만 이러한 문자의 변경 이벤트는 기록되지 않습니다.

ACCEPTINVCHARS를 지정하지 않으면 COPY가 잘못된 UTF-8 문자를 발견할 때마다 오류를 반환합니다.

ACCEPTINVCHARS는 VARCHAR 열에서만 유효합니다.

BLANKSASNULL

공백 문자로만 구성된 빈 필드를 NULL로 로드합니다. 이 옵션은 CHAR 및 VARCHAR 열에만 적용됩니다. INT 같이 다른 데이터 형식의 빈 필드는 항상 NULL로 로드됩니다. 예를 들어 공백 문자 3개가 다른 문자 없이 연이어 포함된 문자열은 NULL로 로드됩니다. 이 옵션을 사용하지 않으면 기본 동작으로 공백 문자를 있는 그대로 로드합니다.

DATEFORMAT [AS] {'dateformat_string' | 'auto' }

인수를 지정하지 않을 경우 기본값은 'YYYY-MM-DD'입니다. 예를 들어 이를 대신할 수 있는 유효 형식은 'MM-DD-YYYY'입니다.

COPY 명령이 날짜 또는 시간 값의 형식을 인식하지 못하거나, 혹은 날짜 또는 시간 값이 다른 형식인 경우에는 DATEFORMAT 또는 TIMEFORMAT 파라미터에 'auto' 인수를 사용하십시오. 'auto' 인수는 DATEFORMAT 및 TIMEFORMAT 문자열 사용 시 지원되지 않는 몇 가지 형식을 인식합니다. 'auto'' 키워드는 대/소문자를 구분합니다. 자세한 내용은 DATEFORMAT 및 TIMEFORMAT 옵션의 자동 인식 사용 단원을 참조하십시오.

날짜 형식에 시간 정보(시, 분, 초)가 포함될 수는 있지만 이 정보는 무시됩니다. AS 키워드는 옵션입니다. 자세한 내용은 DATEFORMAT 및 TIMEFORMAT 문자열 단원을 참조하십시오.

EMPTYASNULL

Amazon Redshift가 비어있는 CHAR 및 VARCHAR 필드를 NULL로 로드하도록 지정합니다. INT 같이 다른 데이터 형식의 빈 필드는 항상 NULL로 로드됩니다. 빈 필드는 2개의 구분자가 사이에 아무런 문자도 없이 연이어 데이터에 포함되어 있을 때 발생합니다. EMPTYASNULL과 NULL AS '' (empty string)는 동작이 동일합니다.

ENCODING [AS] file_encoding

로드 데이터의 인코딩 유형을 지정합니다. COPY 명령은 로딩 도중 데이터를 지정된 인코딩에서 UTF-8로 변환합니다.

file_encoding의 유효 값은 다음과 같습니다.

  • UTF8

  • UTF16

  • UTF16LE

  • UTF16BE

기본값은 UTF8입니다.

원본 파일 이름은 UTF-8 인코딩을 사용해야 합니다.

다음 파일은 로드 데이터로 다른 인코딩이 지정되어 있더라도 UTF-8 인코딩을 사용해야 합니다.

  • 매니페스트 파일

  • JSONPaths 파일

다음 파라미터와 함께 입력되는 인수 문자열은 UTF-8을 사용해야 합니다.

  • FIXEDWIDTH 'fixedwidth_spec'

  • ACCEPTINVCHARS 'replacement_char'

  • DATEFORMAT 'dateformat_string'

  • TIMEFORMAT 'timeformat_string'

  • NULL AS 'null_string'

고정 폭 데이터 파일은 UTF-8 인코딩을 사용해야 합니다. 필드 폭은 바이트 수가 아니라 문자 수를 기준으로 하기 때문입니다.

로드 데이터는 모두 지정된 인코딩을 사용해야 합니다. COPY가 다른 인코딩을 만나면 파일을 건너뛰고 오류를 반환합니다.

UTF16을 지정한 경우에는 데이터에 바이트 순서 표식(BOM)이 있어야 합니다. UTF-16 데이터가 리틀 엔디안(LE)인지, 빅 엔디안(BE)인지 알고 있다면 BOM 유무에 상관없이 UTF16LE 또는 UTF16BE를 사용할 수 있습니다.

ESCAPE

이 파라미터를 지정하면 입력 데이터의 백슬래시 문자(\)가 이스케이프 문자로 처리됩니다. 그러면 백슬래시 문자 바로 뒤에 있는 문자가 일반적으로 특정 용도로 사용되는 문자라고 해도 현재 열 값의 일부로 테이블에 로드됩니다. 예를 들어 이 파라미터를 사용하여 구분자 문자, 인용 부호, 줄 바꿈 문자 또는 이스케이프 문자 자체를 이스케이프 처리할 수 있습니다. 단, 이러한 문자가 모두 열 값에서 유효해야 합니다.

ESCAPE 파라미터를 REMOVEQUOTES 파라미터와 함께 지정하면 그 외에 삭제될 수도 있는 인용 부호(' 또는 ")를 이스케이프 처리하여 유지할 수 있습니다. 기본 NULL 문자열인 \N은 있는 그대로 유효하지만 입력 데이터에서는 \\N로 이스케이프 처리할 수도 있습니다. NULL AS 파라미터를 사용해 대체 NULL 문자열을 지정하지만 않는다면 \N\\N은 동일한 결과를 산출합니다.

참고

제어 문자 0x00(NUL)은 이스케이프 처리할 수 없기 때문에 입력 데이터에서 삭제하거나, 혹은 변환해야 합니다. 이 문자는 레코드 끝(EOR) 마커로 처리되어 나머지 레코드는 모두 잘립니다.

FIXEDWIDTH 로드 시 ESCAPE 파라미터를 사용할 수 없으며, 이스케이프 문자 자체를 지정하는 것도 안 됩니다. 이스케이프 문자는 항상 백슬래시 문자입니다. 또한 입력 데이터에는 적절한 자리에 이스케이프 문자가 포함되어야 합니다.

여기 몇 가지 입력 데이터를 비롯해 ESCAPE 파라미터를 지정했을 때 로드되는 데이터의 예가 있습니다. 행 4의 결과는 REMOVEQUOTES 파라미터 역시 지정된다는 것을 가정합니다. 입력 데이터는 다음과 같이 파이프로 구분된 필드 2개로 구성됩니다.

1|The quick brown fox\[newline] jumped over the lazy dog. 2| A\\B\\C 3| A \| B \| C 4| 'A Midsummer Night\'s Dream'

열 2로 로드되는 데이터는 다음과 같습니다.

The quick brown fox jumped over the lazy dog. A\B\C A|B|C A Midsummer Night's Dream
참고

로드 시 입력 데이터에 대한 이스케이프 문자의 적용 여부는 사용자에게 책임이 있습니다. 이러한 요건의 한 가지 예외라면 이전에 ESCAPE 파라미터를 사용해 언로드되었던 데이터를 다시 로드할 때입니다. 이때는 데이터에 이미 필요한 이스케이프 문자가 포함되어 있기 때문입니다.

ESCAPE 파라미터는 8진수, 16진수, Unicode 또는 기타 이스케이프 시퀀스 표기법을 해석하지 않습니다. 예를 들어 원본 데이터에 8진수 라인 피드 값(\012)이 포함되어 있을 때 ESCAPE 파라미터를 사용해 이 데이터를 로드하려고 하면 Amazon Redshift가 값 012를 테이블로 로드하는 동시에 이 값을 이스케이프 처리되는 라인 피드로 해석하지 않습니다.

Microsoft Windows 플랫폼에서 작성된 데이터의 줄 바꿈 문자를 이스케이프 처리하려면 캐리지 리턴용 하나와 라인 피드용 하나, 총 2개의 이스케이프 문자를 사용해야 할 수도 있습니다. 그 밖에 파일을 로드하기 전에 dos2unix 유틸리티 등을 사용해 캐리지 리턴을 삭제하는 방법도 있습니다.

EXPLICIT_IDS

원본 데이터 파일에서 명시적인 값을 사용해 자동 생성된 값을 재정의하려면 IDENTITY 열이 포함된 테이블에서 EXPLICIT_IDS를 사용하십시오. 명령에 열 목록을 추가하는 경우에는 해당 목록에 이 파라미터를 사용할 IDENTITY 열도 포함되어야 합니다. EXPLICIT_IDS 값의 데이터 형식은 CREATE TABLE 정의에서 지정한 IDENTITY 형식과 일치해야 합니다.

EXPLICIT_IDS 옵션을 사용하여 테이블에 대해 COPY 명령을 실행할 때, Amazon Redshift는 테이블에서 IDENTITY 열의 고유성을 확인하지 않습니다.

열이 GENERATED BY DEFAULT AS IDENTITY로 정의된 경우 복사할 수 있습니다. 값이 새로 생성되거나 입력한 값으로 업데이트됩니다. EXPLICIT_IDS 옵션은 필요하지 않습니다. COPY는 자격 증명 하이 워터마크를 업데이트하지 않습니다.

EXPLICIT_ID를 사용하는 COPY 명령의 예는 IDENTITY 열의 명시적인 값을 사용한 VENUE 로드을 참조하십시오.

FILLRECORD

서로 인접한 열들이 일부 레코드 끝에서 누락되었을 때도 데이터 파일의 로드를 허용합니다. 누락된 열은 NULL로 로드됩니다. 텍스트 및 CSV 형식의 경우 누락된 열이 VARCHAR 열이면 NULL 대신 길이가 0인 문자열이 로드됩니다. 텍스트 및 CSV에서 VARCHAR 열로 NULL을 로드하려면 EMPTYASNULL 키워드를 지정합니다. NULL 치환은 열 정의가 NULL을 허용할 때만 유효합니다.

예를 들어 테이블 정의에 NULL을 허용하는 CHAR 열이 4개 포함되어 있고, 레코드에 포함된 값이 apple, orange, banana, mango라고 가정한다면 COPY 명령은 apple, orange 값만 포함된 레코드를 로드하여 채울 수 있습니다. 이때 누락된 CHAR 값은 NULL 값으로 로드됩니다.

IGNOREBLANKLINES

데이터 파일에서 라인 피드만 포함된 빈 라인을 무시하고 로드하지 않습니다.

IGNOREHEADER [ AS ] number_rows

지정하는 number_rows를 파일 헤더로 처리하고 로드하지 않습니다. IGNOREHEADER는 병렬 로드에서 모든 파일의 헤더를 건너뛸 때 사용됩니다.

NULL AS 'null_string'

null_string과 일치하는 필드를 NULL로 로드합니다. 여기에서 null_string은 어떤 문자열이든 가능합니다. 데이터에 NUL(UTF-8 0000) 또는 이진 0(0x000)으로도 불리는 null 종결자가 포함되어 있으면 COPY는 이를 다른 문자로 취급합니다. 예를 들어 '1' || NUL || '2'를 포함하는 레코드는 길이가 3바이트인 문자열로 복사됩니다. 필드에 NUL만 포함된 경우 NULL AS로 '\0' 또는 '\000'을 지정(예: NULL AS '\0' 또는 NULL AS '\000')하여 null 종결자를 NULL로 바꿀 수 있습니다. 필드에 NUL로 끝나는 문자열이 있을 때 NULL AS를 지정하면 끝에서 NUL과 함께 문자열이 삽입됩니다. null_string 값에 '\n'(줄 바꿈)을 사용하지 않습니다. Amazon Redshift는 줄 구분 기호로 사용하기 위해 '\n'을 예약합니다. 기본 null_string'\N'입니다.

참고

NULL을 NOT NULL로 정의된 열에 로드하려고 하면 COPY 명령이 실패합니다.

REMOVEQUOTES

입력 데이터의 문자열에서 묶고 있는 인용 부호를 제거합니다. 인용 부호 안의 문자는 구분자를 포함하여 모두 유지됩니다. 문자열에 선행하는 작은 또는 큰 따옴표만 있고 후행하는 인용 부호가 없는 경우에는 COPY 명령이 해당 행을 로드하지 못하고 오류를 반환합니다. 다음 표는 인용 부호로 묶인 문자열과 이 옵션으로 로드되는 값의 몇 가지 예를 보여줍니다.

입력 문자열 REMOVEQUOTES 옵션으로 로드되는 값
"The delimiter is a pipe (|) character" The delimiter is a pipe (|) character
'Black' 검은색
"흰색" 흰색
파란색' 파란색'
'파란색 값이 로드되지 않음: 오류 조건
"파란색 값이 로드되지 않음: 오류 조건
' ' 'black' ' ' ' 'black' '
' ' <공백>
ROUNDEC

입력 값의 소수점 자릿수가 열 값의 소수점 자릿수보다 큰 경우 숫자 값을 반올림합니다. 기본적으로 COPY는 열 값의 소수점 자릿수에 맞출 필요가 있을 때 값을 자릅니다. 예를 들어 20.259 값을 DECIMAL(8,2) 열에 로드한다고 가정할 때 기본적으로 COPY가 이 값을 20.25로 자릅니다. 하지만 ROUNDEC를 지정하면 COPY가 값을 20.26으로 반올림합니다. INSERT 명령은 열 값의 소수점 자릿수와 일치시켜야 할 때마다 항상 값을 반올림합니다. 따라서 ROUNDEC 파라미터가 지정된 COPY 명령은 INSERT 명령과 똑같이 동작합니다.

TIMEFORMAT [AS] {'timeformat_string' | 'auto' | 'epochsecs' | 'epochmillisecs' }

시간 형식을 지정합니다. TIMEFORMAT을 지정하지 않았을 때 기본 형식은 TIMESTAMP 열의 경우 YYYY-MM-DD HH:MI:SS이고, 그리고 TIMESTAMPTZ 열의 경우 YYYY-MM-DD HH:MI:SSOF입니다. 여기에서 OF는 협정 세계시(UTC)의 오프셋을 말합니다. timeformat_string에는 시간대 지정자를 추가할 수 없습니다. 기본 형식과 다른 형식의 TIMESTAMPTZ 데이터를 로드하려면 'auto'를 지정해야 합니다. 자세한 내용은 DATEFORMAT 및 TIMEFORMAT 옵션의 자동 인식 사용 섹션을 참조하세요. timeformat_string에 대한 자세한 내용은 DATEFORMAT 및 TIMEFORMAT 문자열 섹션을 참조하세요.

'auto' 인수는 DATEFORMAT 및 TIMEFORMAT 문자열 사용 시 지원되지 않는 몇 가지 형식을 인식합니다. COPY 명령이 날짜 또는 시간 값의 형식을 인식하지 못하거나, 혹은 날짜 및 시간 값이 서로 다른 형식인 경우에는 DATEFORMAT 또는 TIMEFORMAT 파라미터에 'auto' 인수를 사용하십시오. 자세한 내용은 DATEFORMAT 및 TIMEFORMAT 옵션의 자동 인식 사용 단원을 참조하십시오.

원본 데이터가 epoch 시간, 즉 1970년 1월 1일 00:00:00 UTC 이후의 시간(초 또는 밀리초)으로 표현되는 경우에는 'epochsecs' 또는 'epochmillisecs'를 지정합니다.

'auto', 'epochsecs''epochmillisecs' 키워드는 대/소문자를 구분합니다.

AS 키워드는 옵션입니다.

TRIMBLANKS

VARCHAR 문자열에서 후행 공백 문자를 제거합니다. 이 파라미터는 VARCHAR 데이터 형식의 열에만 적용됩니다.

TRUNCATECOLUMNS

열의 데이터를 열 명세에 따라 적합한 수의 문자로 자릅니다. VARCHAR 또는 CHAR 데이터 형식의 열에만 적용되며, 행의 크기는 4MB 이하입니다.