중첩된 데이터 제한(미리 보기)
이 주제에서는 Redshift Spectrum을 사용하여 중첩된 데이터를 읽을 때의 제한 사항에 대해 설명합니다. 중첩 데이터는 중첩된 필드를 포함하는 데이터입니다. 중첩 필드는 배열, 구조체 또는 객체와 같은 단일 엔터티로 함께 조인되는 필드입니다.
참고
다음 목록에서 (미리 보기)로 표시된 제한 사항은 다음 리전에서 생성된 미리 보기 클러스터 및 미리 보기 작업 그룹에만 적용됩니다.
미국 동부(오하이오)(us-east-2)
미국 동부(버지니아 북부)(us-east-1)
미국 서부(캘리포니아 북부)(us-west-1)
아시아 태평양(도쿄)(ap-northeast-1)
유럽(아일랜드)(eu-west-1)
유럽(스톡홀름)(eu-north-1)
미리 보기 클러스터 설정에 대한 내용은 Amazon Redshift 클러스터 관리 안내서의 미리 보기 클러스터 생성을 참조하세요. 미리 보기 작업 그룹을 설정하는 방법에 대한 내용은 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
절이 아닌 다른 곳의 중첩 데이터에 액세스하는 하위 쿼리는 단일 값을 반환해야 합니다.WHERE
절의(NOT) EXISTS
연산자만 예외입니다. -
(NOT) IN
는 지원되지 않습니다. -
모든 중첩 형식의 최대 중첩 깊이는 100입니다. 이러한 제약은 모든 파일 형식(Parquet, ORC, Ion, JSON)에 적용됩니다.
-
중첩 데이터에 액세스하는 집계 하위 쿼리는
FROM
의arrays
및maps
만 참조할 수 있고 외부 테이블은 참조할 수 없습니다. -
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
문에 인덱스를 사용하는 것이 좋습니다.