Amazon Redshift는 2025년 11월 1일부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. Python UDF를 사용하려면 이 날짜 이전에 UDF를 생성하세요. 기존 Python UDF는 정상적으로 계속 작동합니다. 자세한 내용은 블로그 게시물
중첩된 데이터 제한(미리 보기)
이 주제에서는 Redshift Spectrum을 사용하여 중첩된 데이터를 읽을 때의 제한 사항에 대해 설명합니다. 중첩 데이터는 중첩된 필드를 포함하는 데이터입니다. 중첩 필드는 배열, 구조체 또는 객체와 같은 단일 엔터티로 함께 조인되는 필드입니다.
참고
다음 목록에서 (미리 보기)로 표시된 제한 사항은 다음 리전에서 생성된 미리 보기 클러스터에만 적용됩니다.
미국 동부(오하이오)(us-east-2)
미국 동부(버지니아 북부)(us-east-1)
미국 서부(캘리포니아 북부)(us-west-1)
아시아 태평양(도쿄)(ap-northeast-1)
유럽(아일랜드)(eu-west-1)
유럽(스톡홀름)(eu-north-1)
미리 보기 클러스터 설정에 대한 내용은 Amazon Redshift 클러스터 관리 안내서의 미리 보기 클러스터 생성을 참조하세요.
중첩 데이터에는 다음과 같은 제약이 적용됩니다.
-
array또는map유형에는 쿼리가 중첩된arrays에 있거나maps가scalar값을 반환하지 않는 한 다른array또는map유형이 포함될 수 있습니다. (미리 보기) -
Amazon Redshift Spectrum은 외부 테이블의 형태로만 복합 데이터 유형을 지원합니다.
-
하위 쿼리 결과 열은 최상위 수준이어야 합니다. (미리 보기)
-
OUTER JOIN표현식이 중첩 테이블을 참조하는 경우에는 해당 테이블과 테이블의 중첩 배열(및 맵)만 참조할 수 있습니다.OUTER JOIN표현식이 중첩 테이블을 참조하지 않는 경우에는 비중첩 테이블을 무제한 참조할 수 있습니다. -
하위 쿼리의
FROM절이 중첩 테이블을 참조하는 경우에는 다른 테이블을 참조할 수 없습니다. -
하위 쿼리가 상위 테이블을 참조하는 중첩 테이블에 따라 달라지는 경우, 하위 쿼리는
FROM절에서 상위 테이블만 사용할 수 있습니다.SELECT또는WHERE절 같은 다른 절에서는 상위 쿼리를 사용할 수 없습니다. 예를 들어 다음 쿼리는 하위 쿼리의SELECT절이 상위 테이블c를 참조하므로 실행되지 않습니다.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(c.id) FROM c.phones p WHERE p LIKE '858%') > 1;다음 쿼리는 상위 쿼리의
c가 하위 쿼리의FROM절에서만 사용되고 있기 때문에 유효합니다.SELECT c.name.given FROM spectrum.customers c WHERE (SELECT COUNT(*) FROM c.phones p WHERE p LIKE '858%') > 1; -
FROM절이 아닌 다른 곳의 중첩 데이터에 액세스하는 하위 쿼리는 단일 값을 반환해야 합니다.(NOT) EXISTS절의WHERE연산자만 예외입니다. -
(NOT) IN는 지원되지 않습니다. -
모든 중첩 형식의 최대 중첩 깊이는 100입니다. 이러한 제약은 모든 파일 형식(Parquet, ORC, Ion, JSON)에 적용됩니다.
-
중첩 데이터에 액세스하는 집계 하위 쿼리는
arrays의maps및FROM만 참조할 수 있고 외부 테이블은 참조할 수 없습니다. -
Redshift 스펙트럼 테이블에서 중첩된 데이터의 가성 열을 쿼리하는 것은 지원되지 않습니다. 자세한 내용은 가상 열 섹션을 참조하세요.
-
배열이나 맵 열을
FROM절에 지정하여 배열이나 맵에서 데이터를 추출하는 경우 값이scalar인 경우에만 해당 열에서 값을 선택할 수 있습니다. 예를 들어, 다음 쿼리는 모두 배열 내부의 요소에서SELECT작업 수행을 시도합니다.arr.a가scalar값이기 때문에arr.a를 선택하는 쿼리가 작동합니다. 두 번째 쿼리는array가FROM절의s3.nested table에서 추출된 배열이기 때문에 작동하지 않습니다. (미리 보기)SELECT array_column FROM s3.nested_table;array_column ----------------- [{"a":1},{"b":2}]SELECT arr.a FROM s3.nested_table t, t.array_column arr;arr.a ----- 1--This query fails to run. SELECT array FROM s3.nested_table tab, tab.array_column array;다른 배열이나 맵에서 가져온
FROM절에 있는 배열이나 맵은 사용할 수 없습니다. 다른 배열 내에 중첩된 배열 또는 기타 복합 구조를 선택하려면SELECT문에 인덱스를 사용하는 것이 좋습니다.