이 주제에서는 Contour의 표현식에서 사용할 수 있는 배열 함수를 강조합니다.
Contour에서 배열은 표현식 보드에서만 지원된다는 점을 유의해야 합니다. 열 표현식에서 배열을 사용한 후에는 다른 Contour 보드에서 사용할 수 있도록 결과 배열을 문자열로 변환하기 위해 array_join
을 사용해야 합니다.
array_length
함수를 사용하여 배열의 길이를 얻을 수 있습니다. 이는 필터링할 때 유용할 수 있습니다.
예를 들어, 배열 열 items_array
가 있는 경우, 아래에 나타낸 것처럼 필터 표현식 보드에서 array_length
함수를 사용하여 배열의 길이를 얻을 수 있습니다.
array_length(items_array) > 0 // 배열의 길이가 0보다 큰지 확인
array_agg
함수를 사용하여 열의 값을 결합할 수 있습니다.
예를 들어, 구매한 품목의 테이블이 있습니다. 특정 고객이 구매한 모든 품목의 배열을 포함하는 새 열을 생성하려고 합니다.
테이블이 다음과 같다면:
customer_id | item |
---|---|
123 | bread |
123 | eggs |
444 | milk |
444 | bananas |
444 | bread |
다음 함수를 사용하여 결합된 값이 있는 새 열을 생성할 수 있습니다:
array_join( array_agg("item") OVER (PARTITION BY "customer_id"), ', ' )
// "customer_id" 별로 파티션을 나누고, 각 파티션에서 "item"을 모아 배열로 만든 후, 배열의 요소들을 ', '로 구분하여 문자열로 결합합니다.
이것을 각 부분으로 나누면 다음과 같습니다:
array_agg
는 주어진 열의 모든 값을 배열로 반환합니다. 우리는 이에 열 인수로 window function을 제공했습니다. 그래서array_agg("item")
는 열의 모든 값을 집계하지만, 다음과 같은 경우는
array_agg("item") OVER (PARTITION BY "customer_id")
customer_id 별로 값을 집계합니다.
array_agg_distinct
는 주어진 열의 모든 고유한 값을 배열로 반환합니다. array_agg
와 달리 이 함수는 각 값이 결과 배열에서 한 번만 나타나게 합니다.
array_join
은 변환 함수로 배열의 항목을 구분자로 구분된 문자열로 결합합니다. 일반적으로 이는 다음과 같습니다:
array_join(<array>, <delimiter>)
따라서 [milk, bananas, bread]
는 "milk, bananas, bread"
가 됩니다.
결과 열, items_array
은 다음과 같이 보일 것입니다:
customer_id | items_array |
---|---|
123 | eggs, bread |
444 | milk, bananas, bread |
기본 키에 대한 값 배열을 매핑하는 열이 이미 있는 경우, explode
함수를 사용하여 이를 분해할 수 있습니다. 이 함수는 배열의 각 값에 대해 새로운 행을 생성합니다. 따라서 주어진:
customer_id | items_array |
---|---|
123 | eggs, bread |
444 | milk, bananas, bread |
표현식 에디터를 열고 '열 대체'를 선택합니다. explode(items_array)
코드는 다음 표를 생성합니다:
customer_id | items_array |
---|---|
123 | eggs |
123 | bread |
444 | milk |
444 | bananas |
444 | bread |
explode
함수는 null 값을 삭제합니다. null 값을 유지하려면, explode_outer
함수를 사용하십시오.