Salesforce Bulk API용 Openflow Connector: Iceberg 테이블 대상

Salesforce Bulk API용 Openflow Connector: Iceberg 테이블 대상

이 페이지에서는 Salesforce Bulk API용 Openflow Connector가 Snowflake 관리형 Apache Iceberg™ 테이블에 데이터를 쓸 수 있도록 구성하는 방법을 설명해요. 기존에 표준 Snowflake 테이블을 쓰던 커넥터는 영향을 받지 않아요.

출처: Snowflake 문서

본문

Salesforce Bulk API용 Openflow Connector는 선택(opt-in) 대상 형식으로 Snowflake 관리형 Apache Iceberg™ 테이블에 쓰는 것을 지원합니다. 커넥터는 Iceberg v2와 v3를 지원합니다. 표준 Snowflake 테이블에 쓰는 기존 커넥터는 영향을 받지 않습니다.

Iceberg 테이블 대상을 사용하려면 Snowflake 대상 데이터베이스를 Iceberg 기본값으로 구성한 뒤, 커넥터가 대상 테이블을 생성하기 전에 커넥터의 Table Storage Format 파라미터를 ICEBERG로 설정하고 Iceberg Version을 선택하세요.

사전 준비 사항

시작하기 전에:

대상 데이터베이스 구성

커넥터를 시작하기 전에 대상 데이터베이스를 Iceberg 기본값으로 구성하세요. 커넥터는 Iceberg 테이블을 만들 때 외부 볼륨과 스토리지 직렬화 정책에 대한 데이터베이스 기본값을 읽습니다.

옵션 A: Snowflake 스토리지

Apache Iceberg™ 테이블용 Snowflake 스토리지를 사용하려면 데이터베이스를 EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'로 구성하세요:

ALTER DATABASE <my_salesforce_db> SET
  EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED'
  STORAGE_SERIALIZATION_POLICY = <COMPATIBLE|OPTIMIZED>;

Snowflake 스토리지를 사용하면 Snowflake가 Iceberg 테이블 파일을 저장·관리합니다. 외부 클라우드 스토리지를 구성하거나 외부 볼륨에 대한 접근을 부여할 필요가 없습니다.

옵션 B: 클라우드 스토리지의 외부 볼륨

Iceberg 테이블 파일을 클라우드 스토리지에 저장하려면 데이터베이스를 외부 볼륨으로 구성하세요:

ALTER DATABASE <my_salesforce_db> SET
  EXTERNAL_VOLUME = '<external_volume>'
  STORAGE_SERIALIZATION_POLICY = <COMPATIBLE|OPTIMIZED>;

COMPATIBLE은 외부 엔진이 읽을 수 있는 Parquet 파일을 생성합니다. OPTIMIZED는 Snowflake 특유의 쿼리 최적화를 활성화합니다. 데이터 쿼리 요구 사항에 따라 선택하세요. 자세한 내용은 STORAGE_SERIALIZATION_POLICY를 참고하세요.

execute-as 역할(서비스 사용자가 KEY_PAIR 인증 하에서도 보유하는 역할)에 외부 볼륨에 대한 USAGE를 부여하세요:

GRANT USAGE ON EXTERNAL VOLUME <external_volume> TO ROLE OPENFLOW_<RUNTIME_NAME>_EXECUTE_AS_RL;

Snowflake 스토리지(EXTERNAL_VOLUME = 'SNOWFLAKE_MANAGED')를 사용할 때는 이 부여가 필요하지 않습니다.

Note

커넥터가 Iceberg 테이블을 만들 때 CATALOG = 'SNOWFLAKE'가 자동으로 설정됩니다. 데이터베이스 수준에서는 설정하지 마세요.

커넥터 구성

커넥터가 대상 테이블을 생성하기 전에 다음 대상 파라미터를 설정하세요:

  • Table Storage Format: ICEBERG로 설정합니다. 기본값은 STANDARD입니다.

  • Iceberg Version: 2 또는 3으로 설정합니다. 기본값은 3입니다.

수집이 시작된 후에는 Table Storage Format이나 Iceberg Version을 변경하지 마세요. 표준 대상과 Iceberg 대상 사이, 또는 Iceberg v2와 v3 사이를 전환하려면 커넥터를 다시 만들고 새 대상 테이블에 새 로드를 수행하세요.

전체 커넥터 구성 워크플로는 Openflow Connector for Salesforce Bulk API: 커넥터 구성을 참고하세요.

Iceberg 테이블 생성 확인

초기 로드가 완료된 뒤 대상 테이블이 Iceberg 테이블로 생성되었는지 확인하세요:

SELECT GET_DDL('TABLE', '<my_salesforce_db>.<my_salesforce_schema>.<object_table>');

반환된 DDL에는 ICEBERG TABLE이 포함되어야 합니다.

데이터베이스 수준의 Iceberg 기본값도 확인할 수 있습니다:

SHOW PARAMETERS LIKE 'EXTERNAL_VOLUME' IN DATABASE <my_salesforce_db>;
SHOW PARAMETERS LIKE 'STORAGE_SERIALIZATION_POLICY' IN DATABASE <my_salesforce_db>;

제한 사항 및 동작

  • Tri-Secret Secure 계정과 Snowflake 스토리지: Tri-Secret Secure(TSS)가 활성화된 계정은 Apache Iceberg™ 테이블용 Snowflake 스토리지를 사용하는 새 Snowflake 관리형 Iceberg 테이블을 만들지 못할 수 있습니다. 자세한 내용은 Encryption을 참고하세요.

  • Iceberg 테이블에서는 Collation이 지원되지 않습니다: Table Storage Format이 ICEBERG로 설정되면 커넥터는 테이블 생성 파라미터에 DEFAULT_DDL_COLLATION을 포함하지 않습니다.

  • Salesforce 시간 필드는 마이크로초 정밀도를 사용합니다: time 유형의 Salesforce 필드는 Iceberg 테이블에서 TIME(6)으로 생성됩니다.

  • Iceberg 테이블 위에 수식 뷰를 만들 수 있습니다: Enable Views Creation이 true로 설정되면 커넥터는 Iceberg 기본 테이블 위에 수식 뷰를 만들 수 있습니다. Openflow Connector for Salesforce Bulk API: Salesforce 수식 필드에 설명된 수식 필드 제한 사항은 여전히 적용됩니다.

  • 하드 삭제는 지원되지 않습니다: 커넥터는 대상 테이블에서 행을 하드 삭제하는 대신 삭제된 Salesforce 레코드를 isDeleted 열로 계속 표현합니다.

더 알아보기 (Learn more)