> ## 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/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-1.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=55bbe1daebfbd327f13c5789e6d1833f" alt="connector-part03-ko image 1" width="1200" height="906" data-path="images/creating-packages/connector-part03-ko/image-1.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-2.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=7edf0d4b3716f92b47cddb319a5a90b9" alt="connector-part03-ko image 2" width="1200" height="669" data-path="images/creating-packages/connector-part03-ko/image-2.webp" />
</Frame>

]\([https://cdn.filestackcontent.com/auto\_image//compress/cache=expiry:max/BMy8x0ARJCOMlWpVS08g](https://cdn.filestackcontent.com/auto_image//compress/cache=expiry:max/BMy8x0ARJCOMlWpVS08g))
**Xplenty 측 설정**

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-3.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=f9b331fbbfce7722063988f7b4f442a0" alt="connector-part03-ko image 3" width="1200" height="818" data-path="images/creating-packages/connector-part03-ko/image-3.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-4.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=7e907a398b9b383ccb027f63ed7c5b3f" alt="connector-part03-ko image 4" width="1200" height="784" data-path="images/creating-packages/connector-part03-ko/image-4.webp" />
</Frame>

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

**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/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-5.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=66241a2c86b0891a50ea86004a441bcf" alt="connector-part03-ko image 5" width="1200" height="632" data-path="images/creating-packages/connector-part03-ko/image-5.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-6.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=4e2a2ab27f84b02e2ec65fcd8a517d48" alt="connector-part03-ko image 6" width="1200" height="995" data-path="images/creating-packages/connector-part03-ko/image-6.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-7.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=c9462fde57a4c8d9c1a4f38f44d10323" alt="connector-part03-ko image 7" width="1200" height="995" data-path="images/creating-packages/connector-part03-ko/image-7.webp" />
</Frame>

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

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-8.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=288eb082d25d5ae027df5c149f4a747e" alt="connector-part03-ko image 8" width="1200" height="1023" data-path="images/creating-packages/connector-part03-ko/image-8.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-9.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=66ac8dcbb611e5596377c8153a2279a2" alt="connector-part03-ko image 9" width="1200" height="995" data-path="images/creating-packages/connector-part03-ko/image-9.webp" />
</Frame>

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

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-10.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=05ca522c8b3b34aef6b6d91ceac497b3" alt="connector-part03-ko image 10" width="1200" height="663" data-path="images/creating-packages/connector-part03-ko/image-10.webp" />
</Frame>

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

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

\[

<Frame>
  <img src="https://mintcdn.com/integrateio/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-11.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=5bc9151af1ee2d132bd98774b156ee10" alt="connector-part03-ko image 11" width="1200" height="963" data-path="images/creating-packages/connector-part03-ko/image-11.webp" />
</Frame>

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

*

**변수 이름** : 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/4oOZarv_QD7vASrL/images/creating-packages/connector-part03-ko/image-12.webp?fit=max&auto=format&n=4oOZarv_QD7vASrL&q=85&s=8e6731539a50f1c182b2aea18ca4ac8d" alt="connector-part03-ko image 12" width="1200" height="963" data-path="images/creating-packages/connector-part03-ko/image-12.webp" />
</Frame>

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

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

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

\<!-- notionvc: 963a0670-4f4e-4096-92a7-f693ee74ade6 -->

##

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

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

\<!-- Text input-->

Get Started

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