데이터 형식 파라미터
COPY 명령에서는 기본적으로 원본 데이터가 문자로 구분된 UTF-8 텍스트 형식입니다. 기본 구분자는 파이프 문자(|)입니다. 원본 데이터가 다른 형식인 경우에는 다른 파라미터를 사용하여 데이터 형식을 지정합니다:
COPY는 표준 데이터 형식 외에도 Amazon S3에서 COPY를 실행할 때 다음과 같은 열 기반 데이터 형식을 지원합니다.
열 기반 형식에서의 COPY는 지원되지만 특정 제한이 따릅니다. 자세한 내용은 열 기반 데이터 형식에서 COPY 명령 단원을 참조하십시오.
데이터 형식 파라미터
- FORMAT [AS]
-
(선택 사항) 데이터 형식 키워드를 식별합니다. FORMAT 인수는 다음과 같습니다.
- CSV [ QUOTE [AS] 'quote_character' ]
-
입력 데이터에서 CSV 형식을 사용할 수 있습니다. 구분자와 줄 바꿈 문자, 그리고 캐리지 리턴을 자동으로 이스케이프하려면 QUOTE 파라미터에서 지정한 문자로 묶습니다. 기본 인용 부호는 큰따옴표(")입니다. 필드 안에서 인용 부호를 사용할 때는 추가 인용 부호로 이스케이프 처리해야 합니다. 예를 들어 인용 부호로 큰따옴표를 사용한다고 가정할 때 문자열
A "quoted" word
는 입력 파일에 문자열"A ""quoted"" word"
로 삽입해야 합니다. CSV 파라미터를 사용할 때는 기본 구분자가 쉼표(,)입니다. DELIMITER 파라미터를 사용하여 다른 구분자를 지정할 수도 있습니다.필드가 인용 부호로 묶이면 구분자와 인용 부호 사이의 공백은 무시됩니다. 구분자가 탭과 같은 공백 문자라면 구분자를 공백으로 처리하지 않습니다.
CSV는 FIXEDWIDTH, REMOVEQUOTES 또는 ESCAPE와 함께 사용할 수 없습니다.
- QUOTE [AS] 'quote_character'
-
선택 사항입니다. CSV 파라미터 사용 시 인용 부호로 사용할 문자를 지정합니다. 기본 문자는 큰 따옴표(")입니다. QUOTE 파라미터를 사용하여 큰따옴표 이외의 다른 인용 부호를 정의하는 경우 필드 내에서 큰따옴표를 이스케이프 처리할 필요는 없습니다. QUOTE 파라미터는 CSV 파라미터하고만 사용할 수 있습니다. AS 키워드는 옵션입니다.
- DELIMITER [AS] ['delimiter_char']
-
파이프 문자(
|
), 쉼표(,
), 탭(\t
) 또는|~|
기호 등의 여러 문자와 같이 입력 파일의 필드를 구분하는 데 사용되는 문자를 지정합니다. 인쇄할 수 없는 문자가 지원됩니다. 문자를 UTF-8 코드 단위로 8진수로 표시할 수도 있습니다. 8진수로는 '\ddd' 형식을 사용하는데, 여기서 'd'는 8진수(0~7)를 나타냅니다. 기본 구분자는 CSV 파라미터를 사용하지 않는 한 파이프 문자(|
)입니다. CSV 파라미터를 사용할 경우에는 쉼표(,
)가 기본 구분자입니다. AS 키워드는 옵션입니다. DELIMITER는 FIXEDWIDTH와 함께 사용할 수 없습니다. - FIXEDWIDTH 'fixedwidth_spec'
-
각 열이 구분자로 구분되지 않고, 폭의 길이가 고정되어 있는 파일에서 데이터를 로드합니다. fixedwidth_spec은 열의 레이블과 폭을 사용자 지정하는 문자열입니다. 열 레이블은 사용자 선택에 따라 문자열 또는 정수가 될 수 있습니다. 열 레이블은 열 이름과 관계가 없습니다. 레이블/폭 페어의 순서는 테이블 열의 순서와 정확히 일치해야 합니다. FIXEDWIDTH는 CSV 또는 DELIMITER와 함께 사용할 수 없습니다. Amazon Redshift에서는 CHAR 및 VARCHAR 열의 길이가 바이트로 표현됩니다. 따라서 로드할 파일을 준비할 때는 지정하는 열의 폭이 멀티바이트 문자의 이진 길이를 수용할 정도로 충분한지 확인해야 합니다. 자세한 내용은 문자 형식 단원을 참조하십시오.
fixedwidth_spec의 형식은 다음과 같습니다.
'colLabel1:colWidth1,colLabel:colWidth2, ...'
- SHAPEFILE [ SIMPLIFY [AUTO] ['tolerance'] ]
-
입력 데이터에서 SHAPEFILE 형식을 사용할 수 있습니다. 기본적으로 shapefile의 첫 번째 열은
GEOMETRY
또는IDENTITY
열입니다. 모든 후속 열은 shapefile에 지정된 순서를 따릅니다.FIXEDWIDTH, REMOVEQUOTES 또는 ESCAPE와 함께 SHAPEFILE을 사용할 수 없습니다.
COPY FROM SHAPEFILE
과 함께GEOGRAPHY
객체를 사용하려면 먼저GEOMETRY
열로 수집한 다음 객체를GEOGRAPHY
객체로 캐스팅합니다.- SIMPLIFY [tolerance]
-
(옵션) Ramer-Douglas-Peucker 알고리즘과 주어진 허용치를 사용하여 수집 프로세스 동안 모든 지오메트리를 단순화합니다.
- SIMPLIFY AUTO [tolerance]
-
(옵션) 최대 지오메트리 크기보다 큰 지오메트리만 단순화합니다. 이 단순화는 Ramer-Douglas-Peucker 알고리즘과 자동으로 계산된 허용치(지정된 허용치를 초과하지 않는 경우)를 사용합니다. 이 알고리즘은 지정된 허용치 내에서 객체를 저장할 크기를 계산합니다. 허용치 값은 옵션입니다.
shapefile 로드의 예는 Amazon Redshift에 shapefile 로드 섹션을 참조하세요.
- AVRO [AS] 'avro_option'
-
원본 데이터를 Avro 형식으로 지정합니다.
Avro 형식은 다음과 같은 서비스 및 프로토콜을 통해 COPY에 지원됩니다.
-
Amazon S3
-
Amazon EMR
-
원격 호스트(SSH)
Avro는 DynamoDB에서 COPY에 대해 지원되지 않습니다.
Avro는 데이터 직렬화 프로토콜입니다. Avro 원본 파일에는 데이터 구조를 정의하는 스키마가 저장되어 있습니다. Avro 스키마 형식은
record
가 되어야 합니다. COPY에서는 기본 비압축 코덱과deflate
및snappy
압축 코덱을 사용하여 생성된 Avro 파일이 허용됩니다. Avro에 대한 자세한 내용은 Apache Avro에서 확인할 수 있습니다. avro_option의 유효 값은 다음과 같습니다.
-
'auto'
-
'auto ignorecase'
-
's3://
jsonpaths_file
'
기본값은
'auto'
입니다.COPY는 Avro 원본 데이터의 데이터 요소를 대상 테이블의 열에 자동으로 매핑합니다. 이는 Avro 스키마의 필드 이름을 대상 테이블의 열 이름과 일치시키는 방식으로 수행됩니다. 일치는
'auto'
의 경우 대/소문자를 구분하고'auto ignorecase'
의 경우 대/소문자를 구분하지 않습니다.Amazon Redshift 테이블의 열 이름은 항상 소문자이기 때문에
'auto'
옵션을 사용할 때는 일치하는 필드 이름 역시 소문자가 되어야 합니다. 필드 이름이 모두 소문자가 아닌 경우'auto ignorecase'
옵션을 사용할 수 있습니다. 기본'auto'
인수를 사용하면 COPY는 구조에서 첫 번째 수준의 필드 또는 외부 필드만 인식합니다.열 이름을 Avro 필드 이름에 명시적으로 매핑하려면 JSONPaths 파일를 사용합니다.
기본적으로 COPY는 대상 테이블의 모든 열을 Avro 필드 이름과 일치시키려고 합니다. 열의 하위 집합까지 로드하려면 옵션으로 열 목록을 지정할 수도 있습니다. 대상 테이블의 열이 열 목록에서 빠져있으면 COPY가 대상 열의 DEFAULT 표현식을 로드합니다. 대상 열에 기본값이 없으면 COPY가 NULL을 로드하려고 합니다. 열 목록에 임의의 열이 포함되어 있다고 할 때 COPY가 Avro 데이터에서 일치하는 필드를 찾지 못할 경우에는 COPY가 해당 열에 NULL을 로드하려고 합니다.
NOT NULL로 정의된 열에 COPY가 NULL을 할당하려고 하면 COPY 명령이 실패합니다.
Avro 스키마
Avro 원본 데이터 파일에는 데이터 구조를 정의하는 스키마가 저장되어 있습니다. COPY는 Avro 원본 데이터 파일에 저장된 스키마를 읽어서 데이터 요소를 대상 테이블 열에 매핑합니다. 다음은 Avro 스키마의 예입니다.
{ "name": "person", "type": "record", "fields": [ {"name": "id", "type": "int"}, {"name": "guid", "type": "string"}, {"name": "name", "type": "string"}, {"name": "address", "type": "string"}] }
Avro 스키마는 JSON 형식으로 정의됩니다. 최상위 JSON 객체에는 이름, 즉 키가 포함된 이름-값 페어 3개인
"name"
,"type"
및"fields"
가 있습니다."fields"
키는 데이터 구조에서 각 필드의 이름과 데이터 형식을 정의하는 객체 배열과 쌍을 이룹니다. 기본적으로 COPY는 필드 이름을 열 이름과 자동으로 일치시킵니다. 열 이름은 항상 소문자이므로‘auto ignorecase’
옵션을 지정하지 않는 한 일치하는 필드 이름도 소문자여야 합니다. 열 이름과 일치하지 않는 필드 이름은 모두 무시됩니다. 순서는 중요하지 않습니다. 위의 예에서는 COPY가 열 이름id
,guid
,name
및address
에 매핑하고 있습니다.기본값인
'auto'
인수를 사용하면 COPY가 첫 번째 레벨의 객체만 열과 일치시킵니다. 스키마에서 더욱 깊숙한 레벨까지 매핑하려면, 혹은 필드 이름과 열 이름이 일치하지 않는 경우에는 JSONPaths 파일을 사용하여 매핑을 정의할 수 있습니다. 자세한 내용은 JSONPaths 파일 단원을 참조하십시오.키와 연결된 값이 바이트, 배열, 레코드, 맵 또는 링크 같이 복잡한 Avro 데이터 형식인 경우에는 COPY가 이 값을 문자열로 로드합니다. 여기서 문자열은 데이터의 JSON 표현입니다. 열거형(enum)인 Avro 데이터 형식은 COPY에서 문자열로 로드되며, 이때 열거되는 내용은 형식 이름입니다. 예시는 JSON 형식의 COPY 지원을 확인하세요.
스키마와 파일 메타데이터가 저장되는 Avro 파일 헤더의 최대 크기는 1MB입니다.
단일 Avro 데이터 블록의 최대 크기는 4MB입니다. 이는 최대 행 크기와는 완전히 다릅니다. 단일 Avro 데이터 블록의 최대 크기를 초과하면 이에 따른 행 크기가 최댓값인 4MB보다 작더라도 COPY 명령이 중단됩니다.
Amazon Redshift가 행 크기를 계산할 때는 내부적으로 파이프 문자(|)를 두 번 계산합니다. 따라서 입력 데이터에 파이프 문자가 다수 포함되어 있으면 데이터 블록이 4MB 미만이더라도 행 크기가 4MB를 초과할 수도 있습니다.
-
- JSON [AS] 'json_option'
-
원본 데이터가 JSON 형식입니다.
JSON 형식은 다음과 같은 서비스 및 프로토콜을 통해 COPY에 지원됩니다.
-
Amazon S3
-
Amazon EMR에서 COPY
-
SSH 연결을 통한 COPY
JSON은 DynamoDB를 통한 COPY에서는 지원되지 않습니다.
json_option의 유효 값은 다음과 같습니다.
-
'auto'
-
'auto ignorecase'
-
's3://
jsonpaths_file
' -
'noshred'
기본값은
'auto'
입니다. Amazon Redshift는 JSON 문서를 로드하는 동안 JSON 구조의 속성을 여러 열로 나누지 않습니다.기본적으로 COPY는 대상 테이블의 모든 열을 JSON 필드 이름 키와 일치시키려고 합니다. 열의 하위 집합까지 로드하려면 옵션으로 열 목록을 지정할 수도 있습니다. JSON 필드 이름 키가 모두 소문자가 아닌 경우에도
'auto ignorecase'
옵션이나 JSONPaths 파일를 사용하여 열 이름을 명시적으로 JSON 필드 이름 키로 매핑할 수 있습니다.대상 테이블의 열이 열 목록에서 빠져있으면 COPY가 대상 열의 DEFAULT 표현식을 로드합니다. 대상 열에 기본값이 없으면 COPY가 NULL을 로드하려고 합니다. 열 목록에 임의의 열이 포함되어 있다고 할 때 COPY가 JSON 데이터에서 일치하는 필드를 찾지 못할 경우에는 COPY가 해당 열에 NULL을 로드하려고 합니다.
NOT NULL로 정의된 열에 COPY가 NULL을 할당하려고 하면 COPY 명령이 실패합니다.
COPY는 JSON 원본 데이터의 데이터 요소를 대상 테이블의 열에 매핑합니다. 이는 원본 이름-값 페어의 객체 키 또는 이름을 대상 테이블의 열 이름과 일치시키는 방식으로 수행됩니다.
각 json_option 값에 대한 다음 세부 정보를 참조하세요.
- 'auto'
-
이 옵션을 사용하면 일치에서 대/소문자를 구분합니다. Amazon Redshift 테이블의 열 이름은 항상 소문자이기 때문에
'auto'
옵션을 사용할 때는 일치하는 JSON 필드 이름 역시 소문자가 되어야 합니다. - 'auto ignorecase'
-
이 옵션을 사용하면 일치에서 대/소문자를 구분하지 않습니다. Amazon Redshift 테이블의 열 이름은 항상 소문자이기 때문에
'auto ignorecase'
옵션을 사용할 때는 해당 JSON 필드 이름은 소문자, 대문자 또는 대/소문자 혼합일 수 있습니다. - 's3://jsonpaths_file'
-
이 옵션을 사용하면 COPY가 여기서 지정하는 JSONPaths 파일을 사용하여 JSON 원본 데이터의 데이터 요소를 대상 테이블의 열에 매핑합니다.
s3://jsonpaths_file
인수는 단일 파일을 명시적으로 참조하는 Amazon S3 객체 키여야 합니다. 예를 들면's3://amzn-s3-demo-bucket/jsonpaths.txt
'입니다. 인수는 키 접두사가 될 수 없습니다. JSONPaths 파일 사용에 대한 자세한 내용은 JSONPaths 파일 섹션을 참조하세요.경우에 따라
jsonpaths_file
로 지정된 파일은 데이터 파일에 대해copy_from_s3_objectpath
로 지정된 경로와 동일한 접두사를 갖습니다. 그러면 COPY는 JSONPaths 파일을 데이터 파일로 읽고 오류를 반환합니다. 예를 들어 데이터 파일이 객체 경로s3://amzn-s3-demo-bucket/my_data.json
을 사용하고 JSONPaths 파일이s3://amzn-s3-demo-bucket/my_data.jsonpaths
라고 가정합니다. 이 경우 COPY는my_data.jsonpaths
를 데이터 파일로 로드하려고 합니다. - 'noshred'
-
이 옵션을 사용하면 Amazon Redshift가 JSON 문서를 로드하는 동안 JSON 구조의 속성을 여러 열로 나누지 않습니다.
-
JSON 데이터 파일
JSON 데이터 파일에는 객체 또는 배열 집합이 저장됩니다. COPY는 저장되어 있는 JSON 객체 또는 배열을 각각 대상 테이블의 행 하나로 로드합니다. 행으로 로드되는 객체 또는 배열은 각각 독립된 루트 레벨 구조이어야 합니다. 즉 다른 JSON 구조의 멤버가 되어서는 안됩니다.
JSON 객체는 중괄호({ })로 시작해서 끝나며 이름-값 페어 집합이 순서에 상관없이 포함되어 있습니다. 쌍을 이루는 이름과 값은 각각 콜론으로 구분되며, 페어는 서로 쉼표로 구분됩니다. 기본적으로 이름-값 페어에서 객체 키 또는 이름은 테이블의 해당 열 이름과 일치해야 합니다. Amazon Redshift 테이블의 열 이름은 항상 소문자이기 때문에 일치하는 JSON 필드 이름 키 역시 소문자가 되어야 합니다. 열 이름과 JSON 키가 일치하지 않을 때는 JSONPaths 파일을 사용하여 명시적으로 열을 키로 매핑하십시오.
JSON 객체의 순서는 중요하지 않습니다. 열 이름과 일치하지 않는 이름은 모두 무시됩니다. 다음은 간단한 JSON 객체의 구조를 나타낸 예입니다.
{ "column1": "value1", "column2": value2, "notacolumn" : "ignore this value" }
JSON 배열은 대괄호([ ])로 시작해서 끝나며 쉼표로 구분된 값 집합이 순서에 따라 포함되어 있습니다. 데이터 파일이 배열을 사용하는 경우에는 JSONPaths 파일을 지정하여 값과 열을 일치시켜야 합니다. 다음은 간단한 JSON 배열의 구조를 나타낸 예입니다.
["value1", value2]
JSON은 올바른 형식을 따라야 합니다. 예를 들어 객체나 배열은 공백을 제외하고 쉼표나 기타 다른 문자로 구분할 수 없습니다. 문자열은 큰따옴표로 묶어야 합니다. 인용 부호는 기울어진 인용 부호나 "스마트" 인용 부호가 아닌 단순 인용 부호(0x22)가 되어야 합니다.
중괄호 또는 대괄호를 포함하여 단일 JSON 객체 및 배열의 최대 크기는 4MB입니다. 이는 최대 행 크기와는 완전히 다릅니다. 단일 JSON 객체 또는 배열의 최대 크기를 초과하면 이에 따른 행 크기가 최댓값인 4MB보다 작더라도 COPY 명령이 중단됩니다.
Amazon Redshift가 행 크기를 계산할 때는 내부적으로 파이프 문자(|)를 두 번 계산합니다. 따라서 입력 데이터에 파이프 문자가 다수 포함되어 있으면 객체 크기가 4MB 미만이더라도 행 크기가 4MB를 초과할 수도 있습니다.
COPY는 줄 바꿈 문자로 \n
을, 그리고 탭 문자로 \t
를 로드합니다. 백슬래시를 로드하려면 백슬래시(\\
)로 이스케이프하십시오.
COPY는 지정한 JSON 원본에서 올바른 형식의 유효 JSON 객체 또는 배열을 검색합니다. COPY가 사용 가능한 JSON 구조를 찾기 전에 또는 유효한 JSON 객체 또는 배열 사이에서 공백이 아닌 문자를 발견하면 COPY는 각 인스턴스에 대해 오류를 반환합니다. 이러한 오류는 MAXERROR 오류로 가산되며, 오류 수가 MAXERROR와 같거나 이를 초과하면 COPY는 중단됩니다.
Amazon Redshift는 STL_LOAD_ERRORS 시스템 테이블의 행에 오류를 일일이 기록합니다. LINE_NUMBER 열에는 오류를 일으킨 JSON 객체의 마지막 라인이 기록됩니다.
IGNOREHEADER를 지정하면 COPY가 지정한 만큼 JSON 데이터의 라인 수를 무시합니다. JSON 데이터의 줄 바꿈 문자도 항상 IGNOREHEADER 계산에 포함됩니다.
COPY는 기본적으로 빈 문자열을 빈 필드의 형태로 로드합니다. 이때 EMPTYASNULL을 지정하면 COPY가 CHAR 및 VARCHAR 필드의 빈 문자열을 NULL로 로드합니다. INT 같이 다른 데이터 형식의 빈 문자열은 항상 NULL로 로드됩니다.
다음 옵션은 JSON에서 지원되지 않습니다.
-
CSV
-
DELIMITER
-
ESCAPE
-
FILLRECORD
-
FIXEDWIDTH
-
IGNOREBLANKLINES
-
NULL AS
-
READRATIO
-
REMOVEQUOTES
자세한 내용은 JSON 형식의 COPY 지원 단원을 참조하십시오. JSON 데이터 구조에 대한 자세한 내용은 www.json.org
JSONPaths 파일
JSON 형식 또는 Avro 원본 데이터에서 로드하는 경우에는 기본적으로 COPY가 원본 데이터의 첫 번째 수준 데이터 요소를 대상 테이블의 열에 매핑합니다. 이는 이름-값 페어의 각 이름 또는 객체 키를 대상 테이블의 열 이름과 일치시키는 방식으로 수행됩니다.
열 이름과 객체 키가 일치하지 않는 경우, 혹은 데이터 계층에서 더욱 깊숙한 레벨까지 매핑하려면 JSONPaths 파일을 사용하여 JSON 또는 Avro 데이터 요소를 명시적으로 열까지 매핑할 수 있습니다. JSONPaths 파일은 대상 테이블 또는 열 목록의 열 순서를 일치시켜 JSON 데이터 요소를 열로 매핑합니다.
JSONPaths 파일에는 배열이 아닌 단일 JSON 객체만 저장되어야 합니다. JSON 객체는 이름-값 페어입니다. 이름-값 페어에서 이름에 해당하는 객체 키는 "jsonpaths"
가 되어야 합니다. 이름-값 페어에서 값은 JSONPath 표현식의 배열입니다. JSONPath 표현식은 각각 JSON 데이터 계층 또는 Avro 스키마의 단일 요소를 참조합니다. 이는 XPath 표현식이 XML 문서의 요소를 참조하는 방식과 비슷합니다. 자세한 내용은 JSONPath 표현식 단원을 참조하십시오.
JSONPaths 파일을 사용하려면 COPY 명령에 JSON 또는 AVRO 키워드를 추가합니다. 다음 형식을 사용하여 JSONPaths 파일의 S3 버킷 이름과 객체 경로를 지정합니다.
COPY tablename FROM 'data_source' CREDENTIALS '
credentials-args
' FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
값은 s3://jsonpaths_file
's3://amzn-s3-demo-bucket/jsonpaths.txt'
와 같은 단일 파일을 명시적으로 참조하는 Amazon S3 객체 키여야 합니다. 키 접두사일 수 없습니다.
경우에 따라 경우에 따라 Amazon S3에서 로드하는 경우 jsonpaths_file
로 지정된 파일은 데이터 파일에 대해 copy_from_s3_objectpath
로 지정된 경로와 동일한 접두사를 갖습니다. 그러면 COPY는 JSONPaths 파일을 데이터 파일로 읽고 오류를 반환합니다. 예를 들어 데이터 파일이 객체 경로 s3://amzn-s3-demo-bucket/my_data.json
을 사용하고 JSONPaths 파일이 s3://amzn-s3-demo-bucket/my_data.jsonpaths
라고 가정합니다. 이 경우 COPY는 my_data.jsonpaths
를 데이터 파일로 로드하려고 합니다.
키 이름이 "jsonpaths"
가 아닌 다른 문자열이라면 COPY 명령이 오류를 반환하지는 않습니다. 하지만 jsonpaths_file을 무시하고 'auto'
인수를 사용합니다.
다음 중 한 가지라도 발생하면 COPY 명령이 중단됩니다.
-
JSON 형식이 잘못된 경우
-
JSON 객체가 2개 이상인 경우
-
공백을 제외한 문자가 객체 외부에 존재하는 경우
-
배열 요소가 빈 문자열이거나, 혹은 문자열이 아닌 경우
JSONPaths 파일에는 MAXERROR가 적용되지 않습니다.
ENCRYPTED 옵션을 지정하더라도 JSONPaths 파일을 암호화해서는 안 됩니다.
자세한 내용은 JSON 형식의 COPY 지원 단원을 참조하십시오.
JSONPath 표현식
JSONPaths 파일은 JSONPath 표현식을 사용하여 데이터 필드를 대상 열로 매핑합니다. 각 JSONPath 표현식은 Amazon Redshift 대상 테이블의 열 하나에 해당합니다. JSONPath 배열 요소의 순서는 대상 테이블의 열 순서와, 혹은 열 목록을 사용하는 경우 열 목록의 열 순서와 일치해야 합니다.
표시된 대로 필드 이름과 값 모두에 큰따옴표가 필요하며, 기울어진 따옴표나 "스마트" 따옴표가 아닌 단순한 따옴표(0x22)여야 합니다.
JSONPath 표현식에서 참조하는 객체 요소가 JSON 데이터에서 발견되지 않으면 COPY가 NULL 값을 로드하려고 합니다. 참조 객체의 형식이 잘못되면 COPY가 로드 오류를 반환합니다.
JSONPath 표현식에서 참조하는 배열 요소가 JSON 또는 Avro 데이터에서 발견되지 않으면 COPY가 다음 오류와 함께 중단됩니다. Invalid JSONPath format: Not
an array or index out of range.
이때 원본 데이터에 존재하지 않는 배열 요소는 JSONPaths에서 모두 제거한 후 원본 데이터의 배열이 올바른 형식인지 확인하십시오.
JSONPath 표현식은 대괄호 또는 점 표기법을 사용할 수 있지만 표기법을 혼용할 수는 없습니다. 다음은 대괄호 표기법을 사용한 JSONPath 표현식 예입니다.
{ "jsonpaths": [ "$['venuename']", "$['venuecity']", "$['venuestate']", "$['venueseats']" ] }
다음은 점 표기법을 사용한 JSONPath 표현식 예입니다.
{ "jsonpaths": [ "$.venuename", "$.venuecity", "$.venuestate", "$.venueseats" ] }
Amazon Redshift COPY 구문 컨텍스트에서 JSONPath 표현식은 JSON 또는 Avro 계층적 데이터 구조의 단일 이름 요소에 대한 명시적 경로를 지정해야 합니다. Amazon Redshift는 모호한 경로 또는 여러 이름 요소로 해석될 수 있는 와일드카드 문자 또는 필터 표현식과 같은 JSONPath 요소를 지원하지 않습니다.
자세한 내용은 JSON 형식의 COPY 지원 단원을 참조하십시오.
Avro 데이터의 JSONPaths 사용
다음은 다중 레벨의 Avro 스키마를 나타낸 예입니다.
{ "name": "person", "type": "record", "fields": [ {"name": "id", "type": "int"}, {"name": "guid", "type": "string"}, {"name": "isActive", "type": "boolean"}, {"name": "age", "type": "int"}, {"name": "name", "type": "string"}, {"name": "address", "type": "string"}, {"name": "latitude", "type": "double"}, {"name": "longitude", "type": "double"}, { "name": "tags", "type": { "type" : "array", "name" : "inner_tags", "items" : "string" } }, { "name": "friends", "type": { "type" : "array", "name" : "inner_friends", "items" : { "name" : "friends_record", "type" : "record", "fields" : [ {"name" : "id", "type" : "int"}, {"name" : "name", "type" : "string"} ] } } }, {"name": "randomArrayItem", "type": "string"} ] }
다음은 AvroPath 표현식을 사용하여 위의 스키마를 참조하는 JSONPaths 파일의 예입니다.
{ "jsonpaths": [ "$.id", "$.guid", "$.address", "$.friends[0].id" ] }
위의 JSONPaths 예에는 다음과 같은 요소가 포함되어 있습니다.
- jsonpaths
-
AvroPath 표현식이 포함된 JSON 객체의 이름입니다.
- [ … ]
-
경로 요소가 포함된 JSON 배열을 묶는 대괄호입니다.
- $
-
Avro 스키마에서
"fields"
배열에 해당하는 루트 요소를 참조하는 달러 기호입니다. - "$.id",
-
AvroPath 표현식의 대상입니다. 위 예에서 대상은
"fields"
배열에서 이름으로"id"
가 포함된 요소입니다. 표현식은 쉼표로 구분됩니다. - "$.friends[0].id"
-
대괄호는 배열 인덱스를 나타냅니다. JSONPath 표현식은 0부터 시작되는 인덱싱을 사용하기 때문에 이 표현식에서는
"friends"
배열에서 이름으로"id"
가 포함된 첫 번째 요소를 참조합니다.
Avro 스키마 구문에서는 안쪽 필드를 사용하여 레코드 및 배열 데이터 형식의 구조를 정의해야 합니다. AvroPath 표현식에서는 안쪽 필드가 무시됩니다. 예를 들어 "friends"
필드는 "inner_friends"
라는 이름의 배열을 정의하고, 이 배열은 "friends_record"
라는 이름의 레코드를 정의합니다. "id"
필드를 참조하는 AvroPath 표현식은 추가되는 필드를 무시하고 대상 필드를 직접 참조할 수 있습니다. 다음은 "friends"
배열에 속한 두 필드를 참조하는 AvroPath 표현식입니다.
"$.friends[0].id" "$.friends[0].name"
열 기반 데이터 형식 파라미터
COPY는 표준 데이터 형식 외에도 Amazon S3에서 COPY를 실행할 때 다음과 같은 열 기반 데이터 형식을 지원합니다. 열 기반 형식에 대한 COPY는 지원되지만 특정 제한이 따릅니다. 자세한 내용은 열 기반 데이터 형식에서 COPY 명령 단원을 참조하십시오.
- ORC
-
ORC(Optimized Row Columnar) 파일 형식을 사용하는 파일에서 데이터를 불러옵니다.
- PARQUET
-
Parquet 파일 형식을 사용하는 파일에서 데이터를 불러옵니다.