메인 콘텐츠로 건너뛰기

질문

맵 타입을 사용하는 컬럼에 다양한 속성이 있을 때, 이를 어떻게 추출해 쿼리에서 사용할 수 있습니까?

답변

이는 가변적인 속성 필드에서 키와 값을 추출하는 기본 예시입니다. 이 메서드는 소스/raw 테이블의 각 행에서 겉보기에는 중복처럼 보이는 항목을 생성합니다. 하지만 키와 값을 추출해 두면 이를 프라이머리 키(Primary Key)나 블룸 필터와 같은 인덱스가 있는 보조 키에 포함할 수 있습니다. 이 예시에서는 메트릭 테이블을 생성하는 소스가 있으며, 이 소스에는 맵이 포함된 attributes 필드에 적용될 수 있는 여러 속성이 있습니다. 레코드에 항상 존재하는 속성이 있다면, 이를 별도의 컬럼으로 분리해 채우는 것이 더 좋습니다. 출력이 어떻게 나오는지와 이 경우 materialized view가 어떤 역할을 하는지 확인할 수 있도록 그대로 복사해 붙여 넣으면 됩니다. 샘플 데이터베이스를 생성합니다:
행과 속성을 저장할 초기 테이블을 생성하세요:
테이블(table)에 샘플 행을 삽입하세요. 샘플 수는 의도적으로 적게 설정했으므로 materialized view가 생성되면 각 속성별로 행이 어떻게 늘어나는지 확인할 수 있습니다.
그런 다음 array join을 사용한 materialized view를 생성하여 맵 속성을 키와 값 컬럼으로 추출할 수 있습니다. 설명을 위해 아래 예시에서는 암묵적 테이블(POPULATE 명령 및 .inner.{uuid}... 같은 기반 테이블 사용)을 사용합니다. 하지만 권장되는 모범 사례는 먼저 테이블을 정의한 다음, 그 위에 TO 명령으로 materialized view를 생성하는 명시적 테이블을 사용하는 것입니다.
새 테이블에는 더 많은 행이 포함되며, 키도 다음과 같이 추출됩니다:
여기서부터는 특정 속성을 가진 행을 쿼리하려면 다음과 같이 하면 됩니다:
마지막 수정일 2026년 7월 3일