

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# 중첩된 데이터 제한(미리 보기)
<a name="nested-data-restrictions"></a>

이 주제에서는 Redshift Spectrum을 사용하여 중첩된 데이터를 읽을 때의 제한 사항에 대해 설명합니다. 중첩 데이터는 중첩된 필드를 포함하는 데이터입니다. 중첩 필드는 배열, 구조체 또는 객체와 같은 단일 엔터티로 함께 조인되는 필드입니다.

**참고**  
다음 목록에서 (미리 보기)로 표시된 제한 사항은 다음 리전에서 생성된 미리 보기 클러스터에만 적용됩니다.  
미국 동부(오하이오)(us-east-2)
미국 동부(버지니아 북부)(us-east-1)
미국 서부(캘리포니아 북부)(us-west-1)
아시아 태평양(도쿄)(ap-northeast-1)
유럽(아일랜드)(eu-west-1)
유럽(스톡홀름)(eu-north-1)
미리 보기 클러스터 설정에 대한 내용은 **Amazon Redshift 클러스터 관리 안내서의 [미리 보기 클러스터 생성](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#cluster-preview)을 참조하세요.

중첩 데이터에는 다음과 같은 제약이 적용됩니다.
+ `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 스펙트럼 테이블에서 중첩된 데이터의 가성 열을 쿼리하는 것은 지원되지 않습니다. 자세한 내용은 [가상 열](c-spectrum-external-tables.md#c-spectrum-external-tables-pseudocolumns) 섹션을 참조하세요.
+ 배열이나 맵 열을 `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` 문에 인덱스를 사용하는 것이 좋습니다.