Salesforce Bulk API용 Openflow 커넥터 소개

Salesforce Bulk API용 Openflow 커넥터 소개

이 문서에서는 Salesforce Bulk API용 Openflow 커넥터의 기본 개념, 워크플로, 제한 사항을 설명합니다. 이 커넥터는 공개 Salesforce REST API를 사용해 사용자가 지정한 빈도로 Salesforce에서 Snowflake로 데이터를 복제합니다.

출처: Snowflake 문서

본문

Salesforce Data Cloud와 제로 카피 통합

Snowflake는 Salesforce와의 제로 카피 양방향 공유·통합을 제공합니다. Salesforce Data Cloud를 사용하고 거의 실시간의 양방향 통합이 필요하다면 이 통합을 권장합니다.

Salesforce Data Cloud와 제로 카피 통합에 대한 자세한 내용은 다음 블로그 게시물을 참조하세요.

  • Share Your Data from Salesforce Data Cloud to Snowflake
  • Zero Copy Data Federation with Snowflake and Salesforce Data Cloud

Salesforce Bulk API용 Openflow 커넥터 소개

Salesforce Bulk API용 Openflow 커넥터는 복제 기반 데이터 통합을 제공합니다. 이 커넥터는 Salesforce Data Cloud를 사용하지 않고 완전히 관리되는 Snowflake Openflow 커넥터를 선호하는 사용자를 위해 설계되었습니다. 커넥터는 공개 Salesforce REST API를 사용해 사용자 정의 빈도로 Salesforce에서 Snowflake로 데이터를 복제합니다. 커넥터는 Change Data Capture(CDC)를 지원하며 Snowflake의 데이터를 Salesforce와 동기화 상태로 유지합니다.

특정 사용 사례에 따라 두 데이터 통합 유형 중 하나 또는 둘 다 사용할 수 있습니다. 이 문서에서는 Salesforce Bulk API용 Openflow 커넥터를 설정하고 사용해 Salesforce에서 Snowflake로 데이터를 복제하는 방법을 설명합니다.

사용 사례

Salesforce Bulk API용 Openflow 커넥터를 사용해 표준 또는 사용자 지정 객체를 사용자가 지정한 빈도로 Salesforce에서 Snowflake로 복제하고 Snowflake에서 최신 상태로 유지하세요.

워크플로

다음 워크플로는 Salesforce Bulk API용 Openflow 커넥터를 설정하고 사용하는 단계를 설명합니다.

  • Salesforce 관리자가 Salesforce에서 외부 클라이언트 앱을 만들고 구성한 뒤 특정 사용자에 대해 승인합니다.
  • Openflow 관리자가 다음 작업을 수행합니다.
    • 커넥터용 서비스 사용자, 커넥터용 웨어하우스, 복제할 목적지 데이터베이스와 스키마를 만듭니다.
    • 커넥터를 설치합니다.
    • 플로우 템플릿에 필수 파라미터를 지정합니다.
  • 데이터 엔지니어가 플로우를 실행해 Salesforce에서 Snowflake로 객체를 복제합니다.

제한 사항

커넥터를 사용할 때 다음 제한 사항을 고려하세요.

  • 사용자 지정 Salesforce 도메인은 지원되지 않습니다.
  • 객체 관계를 탐색하고 관련 객체를 가져오는 것은 지원되지 않습니다.
  • 커넥터는 Snowflake에서 하드 삭제를 지원하지 않습니다. 목적지 테이블에서 isDeleted 열이 true인 모든 행을 삭제하는 쿼리를 실행하거나, 목적지 테이블의 전체 새로 고침을 수행해 "하드 삭제"를 반영할 수 있습니다.
  • location과 address 유형의 필드는 지원되지 않으며 무시됩니다.
  • base64 유형의 필드(Attachment.Body, ContentVersion.VersionData 같은 바이너리 필드)는 전용 수집 경로가 필요합니다. 자세한 내용은 'Configure blob field ingestion'을 참조하세요.
  • 여러 Salesforce 인스턴스의 데이터를 Snowflake의 단일 데이터베이스로 통합할 수 없습니다. 단일 Salesforce 인스턴스 또는 org의 데이터는 Snowflake의 단일 데이터베이스로 수집됩니다. 복제된 Salesforce 객체마다 이 데이터베이스에 테이블이 만들어집니다.
  • Salesforce 레코드에 첨부된 파일은 무시됩니다.
  • 공식 필드(formula fields)는 Salesforce의 데이터로 복제되지 않습니다. 대신 커넥터가 지원되는 Salesforce 공식을 Snowflake SQL 뷰로 변환할 수 있습니다. 지원되는 공식과 제한 사항은 'Salesforce formula fields'를 참조하세요.

인증

커넥터는 외부 클라이언트 앱을 통한 OAuth 2.0 JWT Bearer Flow를 사용해 Salesforce에 연결하고 데이터를 가져옵니다. 이것이 커넥터가 지원하는 유일한 OAuth 흐름입니다. 다른 OAuth 흐름 유형(Authorization Code Flow 등)을 사용하거나 외부 클라이언트 앱을 잘못 구성하면 invalid_grant 오류가 발생할 수 있습니다.

Salesforce에서 외부 클라이언트 앱을 구성하는 방법은 'Openflow Connector for Salesforce Bulk API: Set up Salesforce'를, 일반적인 인증 오류에 대한 도움말은 'Troubleshooting the Openflow Connector for Salesforce Bulk API'를 참조하세요.

복제 수명 주기

커넥터는 초기 복제와 증분 복제의 두 단계로 데이터를 복제합니다.

초기 복제

커넥터는 Salesforce Bulk API 2.0을 호출해 커넥터 구성에 지정된 표준·사용자 지정 객체를 발견합니다. 커넥터는 Bulk API 2.0 API 한도를 준수합니다.

  • 커넥터는 사용자 지정 또는 표준 객체마다 각 필드에 하나씩의 열을 가진 테이블을 만듭니다.
  • 커넥터는 초기 로드에 Snowpipe Streaming v2를 사용해 Salesforce 객체의 필드 값에 따라 테이블에 행을 삽입합니다.

증분 복제

증분 업데이트는 커넥터 파라미터에서 구성할 수 있는 Snowflake 웨어하우스를 사용합니다. 지연 시간과 데이터 신선도 요구 사항에 따라 업데이트의 새로 고침 빈도를 1분에서 24시간 사이로 구성할 수 있으며, 이는 Snowflake의 테이블이 새로 고쳐지는 빈도를 결정합니다.

사용자가 지정한 새로 고침 빈도를 사용해 커넥터는 Salesforce Bulk API를 호출해 이전에 수집된 객체의 변경을 감지합니다. 커넥터는 Salesforce 객체의 특정 타임스탬프 필드를 확인해 변경된 레코드를 식별합니다.

대부분의 객체에서 커넥터는 SystemModstamp 필드를 사용합니다. SystemModstamp를 사용할 수 없으면 커넥터는 다음 필드를 선호 순서대로 사용하려 시도합니다.

  • LastModifiedDate
  • CreatedDate
  • LoginTime

참고: 히스토리 테이블(History Tracking이 활성화된 객체)의 경우 커넥터는 항상 CreatedDate 필드를 사용해 변경을 감지합니다.

그런 다음 커넥터는 Snowpipe Streaming v2를 사용해 증분 데이터를 스테이징 테이블로 푸시하고, 최종 목적지 테이블로 데이터를 로드하기 위해 병합 쿼리(merge query)를 실행합니다.

스키마 진화

커넥터는 Salesforce에서 소스 객체가 변경될 때 스키마 진화를 지원합니다.

소스 객체에 새 필드가 추가되면:

  • 커넥터가 Snowflake의 목적지 테이블에 새 열을 추가합니다.

소스 객체에서 기존 필드의 이름이 변경되면:

  • 커넥터는 이름 변경을 필드 삭제와 필드 추가로 취급합니다. 필드 추가로 목적지 테이블에 새 열이 추가되고, 필드 삭제는 아래에 설명된 대로 처리됩니다.

소스 객체에서 기존 필드가 삭제되면:

  • 커넥터는 세 가지 전략을 지원합니다.
    • Delete: Snowflake의 목적지 테이블에서 해당 열을 삭제합니다. 이것이 기본 동작입니다.
    • Ignore: 소스의 삭제된 필드를 무시하고 향후에 건너뜁니다.
    • Rename: 목적지 테이블에서 삭제된 필드의 이름을 변경합니다.

예를 들어 삭제 전략이 Ignore로 설정되어 있고 Salesforce 객체에서 필드 이름이 변경되면, Snowflake의 기존 열은 변경되지 않고 새 필드 이름의 새 열이 추가됩니다.

객체 삭제 방식

Salesforce에서 객체가 삭제되면 커넥터는 Snowflake에서 객체를 "하드 삭제"하지 않습니다. 커넥터는 Salesforce에서 삭제된 객체에 대해 "소프트 삭제"를 수행하며, 해당 Snowflake 테이블의 isDeleted 열을 true로 설정해 소스 객체가 삭제되었음을 표시합니다.

커넥터는 "하드 삭제"를 지원하지 않습니다. 목적지 테이블에서 isDeleted 열이 true인 모든 행을 삭제하는 쿼리를 실행하거나, 목적지 테이블의 전체 새로 고침을 수행해 "하드 삭제"를 반영할 수 있습니다.

커넥터가 실행 중이지 않을 때(예: 커넥터가 일시 중지되거나 중지된 경우) 객체가 Salesforce에서 삭제되고 Salesforce의 휴지통에서 제거되면 커넥터가 삭제 작업을 놓칠 수 있습니다. 이러한 상황을 복구하려면 목적지 테이블의 전체 새로 고침을 수행해야 합니다.

자동 재시도 처리

커넥터는 지수 백오프(exponential backoff) 전략으로 실패한 작업이나 API 오류를 자동으로 재시도합니다. 커넥터는 첫 번째 재시도 전에 1초를 기다린 뒤, 이후 각 재시도마다 대기 시간을 두 배로 늘립니다(2초, 4초, ...). 실패가 지속되면 커넥터는 다음 예약 실행까지 재시도를 중지합니다. 이 활동은 이벤트 테이블에서 모니터링할 수 있습니다.

서로 다른 동기화 일정 처리를 위한 여러 커넥터 인스턴스 사용

예를 들어 일부 객체는 30분마다, 다른 객체는 24시간마다처럼 서로 다른 빈도로 동기화해야 한다면, Snowflake는 같은 런타임 내에 두 개의 별도 커넥터 인스턴스를 배포할 것을 권장합니다. 그러면 각 인스턴스에 대해 동기화 파라미터를 독립적으로 구성할 수 있습니다.

참고: 같은 런타임에 여러 커넥터 인스턴스를 배포해도 추가 비용이 발생하지 않습니다.

마찬가지로 커넥터가 실행될 때마다 일부 객체를 전체 가져와야 한다면, Snowflake는 같은 런타임 내에 두 개의 별도 커넥터 인스턴스를 배포하고 각 인스턴스의 파라미터를 구성할 것을 권장합니다.

Salesforce 공식 필드

Salesforce 공식 필드(formula fields)는 Salesforce에서 정의된 표현식에서 값이 파생되는 계산 필드입니다. Salesforce Bulk API가 공식 필드 값의 증분 검색을 지원하지 않기 때문에 커넥터는 다른 접근 방식을 취합니다. Salesforce 공식 표현식을 Snowflake SQL로 변환하고 공식 필드가 포함된 각 객체에 대해 뷰를 만듭니다.

이 기능을 활성화하려면 커넥터 구성에서 Enable Views Creation 파라미터를 true로 설정하세요. 자세한 내용은 'Openflow Connector for Salesforce Bulk API: Configure the connector'를 참조하세요.

자세한 내용은 'Openflow Connector for Salesforce Bulk API: Salesforce formula fields'를 참조하세요.

다음 단계

커넥터를 설정하는 방법에 대한 정보는 다음 문서를 참조하세요.

  • Openflow Connector for Salesforce Bulk API: Set up Salesforce

더 알아보기 (Learn more)