> ## Documentation Index
> Fetch the complete documentation index at: https://www.integrate.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ETL: 초급 Part04: 데이터 변환 기능의 사용법(2)

> Integrate.io ETL의 Sort, Rank, Filter, Aggregate, Cross Join 등 Select 컴포넌트 외 다양한 변환 컴포넌트의 사용법과 Rank, Dense Rank 같은 옵션별 결과 차이를 예시와 함께 소개합니다.

안녕하세요. 이번에는 Select 컴포넌트 이외의 변환 기능의 사용법을 소개합니다.

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-1.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=7cfe91f210eb0decbe6dcf215716d701" alt="novice-part04-ko image 1" width="1055" height="801" data-path="images/creating-packages/novice-part04-ko/image-1.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/rYVIXwSRryG3Vessi9u7)\[](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/rYVIXwSRryG3Vessi9u7\)\[)

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-2.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=7c248edcd08e07e11be08837d89e3515" alt="novice-part04-ko image 2" width="1054" height="522" data-path="images/creating-packages/novice-part04-ko/image-2.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/J6y1KUyCTeyp6L026PSq](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/J6y1KUyCTeyp6L026PSq))
**1. Sort**

정렬 기능입니다.
**2. Rank**

랭크를 설정하는 기능입니다.
Rank 또는 Dense Rank(중복 무시 순위)를 지정할 수 있으며 각각에서 다음과 같이 결과가 다릅니다.

정렬된 필드
Rank
Dense Rank

'a'
1
1

''a
1
1

'b'
3
2

**3. Limit**

취득하는 데이터 건수를 제한하는 기능입니다. SQL의 Top이나 Limit의 기능에 해당합니다.
Limit에는 파티션 설정이 가능하며, 이를 사용하여 주문 데이터에 대해 고객마다 가장 새로운 주문일 주문 데이터를 1건씩 취득할 수 있습니다.

\<!-- notionvc: faa250d2-3359-486d-8893-bf0213e9d849 -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-3.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=fd392498852fa4591bba152cc03ad750" alt="novice-part04-ko image 3" width="1097" height="829" data-path="images/creating-packages/novice-part04-ko/image-3.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/VDn2dWmkThWUzSbxmEWE](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/VDn2dWmkThWUzSbxmEWE))
**4. Window**

Window 함수를 이용한 집계 등에 사용할 수 있습니다.
독특한 사용방으로는, 고객마다 주문 전표를 주문 일순으로 낡은 것부터 순서대로 나란히 번호를 내릴 때 등에 사용합니다.
여기에 설정된 번호(Row Number)를 통해 고객별 첫 주문 또는 두 번째 주문 등의 데이터를 판별할 수 있습니다.

\<!-- notionvc: 5eab3c4d-409a-4d89-a3aa-ae08d1735b14 -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-4.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=bcc48c896d66b49732209ec36c5eac71" alt="novice-part04-ko image 4" width="1098" height="829" data-path="images/creating-packages/novice-part04-ko/image-4.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/Tp7y8P4rR7mrP0oPCY6e](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/Tp7y8P4rR7mrP0oPCY6e))
**5. Sample**

데이터에서 텍스트 상자로 설정된 백분율에 따라 랜덤한 순서대로 레코드를 반환합니다.
**6. Join**

SQL의 JOIN과 동일한 기능입니다.
**7. Cross Join**

SQL의 Cross Join과 동일한 기능입니다.
**8. Clone**

데이터를 둘 이상의 처리로 분기할 때 사용합니다.

\<!-- notionvc: 32d40f3c-e4a7-40cc-86ce-df3b22d32cf9 -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-5.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=09dc70c8aae040e396748815e99e7080" alt="novice-part04-ko image 5" width="470" height="692" data-path="images/creating-packages/novice-part04-ko/image-5.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/cSX1O1aTQuCve9vdGvPm](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/cSX1O1aTQuCve9vdGvPm))
**9.Filter**

SQL의 Where 절입니다.
**10. Assert**

데이터의 품질 관리를 위해 사용합니다.
데이터가 지정된 조건과 일치하면 작업을 에러 종료합니다. 레코드가 지정된 조건과 일치하면 **작업이 오류가 나고** \[Error message:] 텍스트 상자에 설정된 오류 메시지가 로그에 출력됩니다.

\<!-- notionvc: eb99c44d-4d87-4cc7-9bd7-d8c16a138bbe -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-6.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=d5f206db9ccbceae72962ad338fd9625" alt="novice-part04-ko image 6" width="1098" height="829" data-path="images/creating-packages/novice-part04-ko/image-6.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/5qiKhWiOQxWIJE1Zc8o5](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/5qiKhWiOQxWIJE1Zc8o5))

**조건(Conditions) 설정 옵션:**

* Match all of the following conditions (AND) - 지정된 모든 조건과 일치하는 값을 가진 레코드 선택(논리적 "AND")

* Match any of the following conditions (OR) - 지정된 조건(논리적 "OR") 중 적어도 하나를 만족하는 값을 가진 레코드 선택

* Match none of the following conditions (NOT) - 지정된 조건 중 어느 것에도 일치하지 않는 값을 가진 레코드를 선택합니다(NOT(OR))

**11. Aggregate(집계)**

SQL 집계 함수와 거의 같은 기능입니다.
하나 이상의 필드 이름을 지정하고 그에 따라 그룹화된 집계 결과를 반환합니다.

\<!-- notionvc: 9fc0527d-18a7-489f-96ab-68383f8a4f59 -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-7.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=0e8633e1a307a9d86a6dec058623f334" alt="novice-part04-ko image 7" width="1098" height="829" data-path="images/creating-packages/novice-part04-ko/image-7.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/k3kS6wDpSUWMVn3RWLZW](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/k3kS6wDpSUWMVn3RWLZW))

**Aggregate에서 사용할 수 있는 집계 함수 정보:**

집계 함수
설명

**Count**
Grouping Field에 따라 필드 열에 지정된 필드의 Null이 아닌 값의 수를 반환합니다. 반환값의 데이터형은 long형입니다.

**Count Distinct**
Grouping Field에 따라 필드 열에 지정된 필드의 고유 값 수를 반환합니다. 반환값의 데이터형은 long형입니다.

**Count All**
Grouping Field에 따라 레코드 수를 반환합니다. 반환값의 데이터형은 long형입니다.

**HLL**
HyperLogLog++ 알고리즘을 사용하여 Grouping Field에 따라 지정된 필드의 카디널리티 추정값 또는 개별 값의 대략적인 수를 반환합니다. 반환값의 데이터형은 long형입니다.

**Average**
Grouping Field에 따라 Field Argument에서 지정한 숫자 필드의 평균을 반환합니다. 반환값의 데이터형에 대해서는, 다음의 표를 참조해 주세요.

**Sum**
Grouping Field에 따라 Field Argument에서 지정한 숫자 필드의 합계를 반환합니다. 반환값의 데이터형에 대해서는, 다음의 표를 참조해 주세요.

**Min**
Grouping Field에 따라 Field Argument에 지정된 필드의 최소값을 반환합니다. 반환값의 데이터형은, 입력 인수의 데이터형과 같습니다.

**Min By**
Field Argument에서 지정한 필드가 최소값인 경우 Grouping Field에 따라 Projected Field에 설정된 값을 반환합니다. 반환 값의 데이터 형식은 Projected Field의 데이터 형식과 동일합니다.

**Min By를 사용하는 방법**

예를 들어, 각 과목에서 가장 낮은 점수를 가진 학생의 성명을 원하면 Field는 과목 이름, Field Argument에는 점수, Projected Field에는 학생의 성명을 설정합니다. 
이 경우의 출력 결과에 포함되는 필드는 과목명과 학생의 성명이 됩니다.

* 다음과 같이 Min By로 여러 항목을 출력하는 것도 가능합니다.

\<!-- notionvc: c0084d06-7983-4d71-88cd-4cc7c70d0aea -->

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-8.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=2a171487189ea8d1baaba52f4add8ee2" alt="novice-part04-ko image 8" width="1200" height="682" data-path="images/creating-packages/novice-part04-ko/image-8.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/5VdSbxdPQF2ONXu4aep8](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/5VdSbxdPQF2ONXu4aep8))

집계 함수
설명

**Max**
Grouping Field에 따라 Field에 지정된 필드의 최대값을 계산합니다. 반환값의 데이터형은, 입력 인수의 데이터형과 같습니다.

**Max By**
Field Argument에 지정된 필드가 최대값인 경우 Grouping Field에 따라 Projected Field에 정의된 값을 반환합니다. 반환 값의 데이터 형식은 Projected Field의 데이터 형식과 동일합니다.

**VAR**
Field Argument에서 지정한 필드의 모든 값에 대해 Grouping Field에 따라 통계 분산을 반환합니다. 반환값의 데이터형은 double 형입니다.

**Collect**
Collect 함수는 그룹화 항목에 따라 값을 집계하는 대신 각 값을 Bag 형식으로 한 줄로 집계하는 기능입니다.

**Collect를 사용하는 방법**

* 사용 데이터
  예를 들어, 다음과 같은 데이터가 있다고 가정합니다.

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-9.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=9ef4a04fab0e5a61c68f8a665b11d301" alt="novice-part04-ko image 9" width="1200" height="250" data-path="images/creating-packages/novice-part04-ko/image-9.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/vulSfjELToySww5o79lQ](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/vulSfjELToySww5o79lQ))

* Collect의 설정
  이를 Aggregate의 Collect을 사용하여 집계를 수행하도록 설정합니다.\<!-- notionvc: c05d9f70-6db7-422f-bc44-b9c0700d904b -->\[

<Frame>
  <img src="https://mintcdn.com/integrateio/_vK8uOUIVr8vjE07/images/creating-packages/novice-part04-ko/image-10.webp?fit=max&auto=format&n=_vK8uOUIVr8vjE07&q=85&s=289e6696143e41f763c3da04d05127d2" alt="novice-part04-ko image 10" width="1200" height="561" data-path="images/creating-packages/novice-part04-ko/image-10.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/fo1cNdrTnGPvaimDIzZT](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/fo1cNdrTnGPvaimDIzZT))

*

결과
변환하면 지정된 그룹화 항목인 "Stage Name"별로 숫자나 문자열을 BAG형으로 변환합니다.\<!-- notionvc: 610a1167-500a-4a6e-8337-8a67c42ff63f -->

StageName
Amount
Probability

Prospecting
\[\{"Amount":null},\{"Amount":null}] 
 \[\{"Probability":"10"},

Qualification
\[\{"Amount":"15000"}]   
 \[\{"Probability":"10"}]

Negotiation/Review
\[\{"Amount":"125000"}]    

Closed Won
\[\{"Amount":"220000"},\{"Amount":"85000"}]   
 \[\{"Probability":"100"},\{"Probability":"100"}]

\*\*Collect에서 정리한 문자열 필드에서 개별 값을 추출하는 경우의 작업 순서
\*\***1. 위 Amount 필드를 JSON 형식으로 명시적으로 변환하기**

# 결과의 4번째행(Closed Won)을 JSON형식으로 변환한 경우

field1 = ToJson(Amount)
\==> \[\{"Amount":220000}, \{"Amount":85000}]

**2. 1의 field1 데이터(JSON)에서 개별 값 가져오기**

JsonExtractScalar(field1,'\$.\[0].Amount')   ==> 220000

JsonExtractScalar(field1,'\$.\[1].Amount')   ==> 85000

\<!-- notionvc: 9602f62d-6619-4761-8437-ec41e8e6547e -->

\<!-- notionvc: a6304c73-9195-4aab-921e-0dfbd41afff3 -->

\<!-- notionvc: 5e7ac234-dc26-407f-826d-a72e1a9150e5 -->

\<!-- notionvc: 9c89e6f0-342b-4069-b673-82b444f28916 -->

##

\<!-- Google Tag Manager hidden fields -->

\<!-- End Google Tag Manager hidden fields -->

\<!-- Text input-->

Get Started

Free 7-day trial. Easy setup. Cancel any time
