> ## 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: Zendesk Support Ticket 데이터를 Redshift에 로드

> Integrate.io ETL의 REST API 컴포넌트로 Zendesk Support API에 접근하여 티켓 데이터를 증분(Incremental) 방식으로 추출하고 Amazon Redshift에 적재하는 절차를 자세히 설명합니다. 운영 시 참고할 수 있도록 단계별로 정리했습니다.

이번 가이드에서는 Xplenty의 Rest API 컴포넌트를 사용하여 Zendesk의 Support API에 액세스 후에 티켓 데이터를 Incremental로 로드하는 절차에 대해 설명합니다.
**Zendesk쪽에서 설정**

관리 메뉴에서 'API'를 선택합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-1.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=e9bb1b82ad9cb3536c4e3e4fa8d996aa" alt="connector-part03-ko image 1" width="1200" height="906" data-path="images/korean-knowledge-base/connector-part03-ko/image-1.webp" />
</Frame>

패스워드 액세스를 유효로 설정합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-2.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=4a75fdf3b6807fca41942c784c32d1ec" alt="connector-part03-ko image 2" width="1200" height="669" data-path="images/korean-knowledge-base/connector-part03-ko/image-2.webp" />
</Frame>

**Xplenty 측 설정**

## **Step1: Rest API Component 설정**

Rest API 컴포넌트에서 Basic 인증을 선택하고 사용자 이름과 암호를 입력합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-3.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=ce83045fa115074894cec66c1fc73045" alt="connector-part03-ko image 3" width="1200" height="818" data-path="images/korean-knowledge-base/connector-part03-ko/image-3.webp" />
</Frame>

이번에는 Support API의 Incremental Export를 사용하므로 [API 사양서](https://developer.zendesk.com/rest_api/docs/support/incremental_export)에 따른 URL을 입력합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-4.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=8dac33a7a51b3020b0738e70ebbfe35c" alt="connector-part03-ko image 4" width="1200" height="784" data-path="images/korean-knowledge-base/connector-part03-ko/image-4.webp" />
</Frame>

**URL** : [https://sub\_domain\_name.zendesk.com/api/v2/\*\*incremental\*\*/tickets.json?\*\*start\_time=1601768082\*\*\&include=metric\_sets](https://sub_domain_name.zendesk.com/api/v2/**incremental**/tickets.json?**start_time=1601768082**\&include=metric_sets)

**start\_time** : UnixTime의 숫자 지정

Response에서 JSON Path 입력

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-5.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=66dd21606609a0bdaa9713f59934dc73" alt="connector-part03-ko image 5" width="1200" height="632" data-path="images/korean-knowledge-base/connector-part03-ko/image-5.webp" />
</Frame>

데이터 미리보기에서 결과를 올바르게 가져 올수 있는지 확인한 후 필요한 열을 선택하고 저장 버튼을 클릭합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-6.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=aa13c66b4711e0e057a1af9ccb2a7873" alt="connector-part03-ko image 6" width="1200" height="995" data-path="images/korean-knowledge-base/connector-part03-ko/image-6.webp" />
</Frame>

## **Step2: Select 컴포넌트로 중첩되어 있는 JSON 값을 취득하는 함수를 설정**

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-7.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=31061475d0663b3b3d8c66e3a7241450" alt="connector-part03-ko image 7" width="1200" height="995" data-path="images/korean-knowledge-base/connector-part03-ko/image-7.webp" />
</Frame>

## **Step3: 로드 할 곳의 DB 혹은 DWH를 설정(여기서는 Redshift로 로드)**

Redshift 커넥션을 설정하고 테이블 이름 입력 및 오퍼레이션(여기서는 Merge with existing data using delete and insert)을 선택합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-8.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=7ebd8eb65559d0d72d1e06609d314434" alt="connector-part03-ko image 8" width="1200" height="1023" data-path="images/korean-knowledge-base/connector-part03-ko/image-8.webp" />
</Frame>

이번에 작성한 데이터 플로우는 이런 느낌이 됩니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-9.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=9b958fd52bb910f505552fe058cfb10d" alt="connector-part03-ko image 9" width="1200" height="995" data-path="images/korean-knowledge-base/connector-part03-ko/image-9.webp" />
</Frame>

## **Step4: 자동으로 차분 갱신을 위한 변수 설정**

첫 설정에서는, URL의 파라미터「start\_time」에 고정값을 넣었지만, 이후에 자동적으로 이전 취득분으로부터의 차분을 취득할 수 있도록 변수를 이용한 리퀘스트 URL을 생성할 수 있도록 설정합니다.

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-10.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=20d4d9d86709e278f4f59e06f9c72906" alt="connector-part03-ko image 10" width="1200" height="663" data-path="images/korean-knowledge-base/connector-part03-ko/image-10.webp" />
</Frame>

### **1. 차분갱신을 위해 마지막 실행 시간을 얻는 변수를 설정합니다.**

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-11.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=8a91e59af6b864161ddf0a1d062ae57f" alt="connector-part03-ko image 11" width="1200" height="963" data-path="images/korean-knowledge-base/connector-part03-ko/image-11.webp" />
</Frame>

*

**변수 이름** : start\_date

*

**함수식** : `ToUnixTime(CASE WHEN **$_PACKAGE_LAST_SUCCESSFUL_JOB_SUBMISSION_TIMESTAMP ==** '' THEN ToDate('2000-01-01T00:00:00.000Z' ) ELSE ToDate(**$_PACKAGE_LAST_SUCCESSFUL_JOB_SUBMISSION_TIMESTAMP**) END)`

식에서 사용하고 있는 시스템 변수 「**\$\_PACKAGE\_LAST\_SUCCESSFUL\_JOB\_SUBMISSION\_TIMESTAMP**」에는 자동적으로 마지막 성공 작업 실행 일시가 설정 된다.

### **2. URL의 start\_time 값에 변수를 설정합니다. (굵게 부분은 변수)**

**URL** : [https://sub\_domain\_name.zendesk.com/api/v2/incremental/tickets.json?start\_time=\*\*\$start\_date\*\*\&include=metric\_sets](https://sub_domain_name.zendesk.com/api/v2/incremental/tickets.json?start_time=**\$start_date**\&include=metric_sets)

<Frame>
  <img src="https://mintcdn.com/integrateio/xT-xj4RSbhtyUCwA/images/korean-knowledge-base/connector-part03-ko/image-12.webp?fit=max&auto=format&n=xT-xj4RSbhtyUCwA&q=85&s=d7f465695e73be6781eb2162df249775" alt="connector-part03-ko image 12" width="1200" height="963" data-path="images/korean-knowledge-base/connector-part03-ko/image-12.webp" />
</Frame>

이제 손쉽게 차분을 업데이트하는 Dataflow 패키지의 완성입니다.

자사에서 SaaS 서비스를 클라우드에 연결하고 얻고 싶다면 [Xplenty](https://try.integrate.io/kr-demo/)의 무료체험판을 신청해 보세요.
