고성능 Snowpipe Streaming과 클래식 SDKs의 비교

이 섹션에서는 클래식 및 고성능 SDKs의 주요 차이점을 요약합니다.

클라이언트 및 채널 관리

  • OpenClient: 고성능 SDK에서는 DB, SCHEMA 및 :code:`PIPE`를 지정해야 합니다. 클래식 SDK에서는 클라이언트 :code:`NAME`만 지정하면 됩니다.

  • OpenChannel: 고성능 SDK는 채널 이름만 요구하여 지정을 간소화합니다. 클래식 SDK에서는 DB, SCHEMA, TABLE 및 :code:`ERROR_OPTION`을 지정해야 합니다. 새로운 SDK는 채널 엔터티와 상태를 포함하는 :code:`OpenChannelResult`도 반환하므로 마지막으로 커밋된 오프셋 토큰을 가져오기 위해 별도의 RPC를 호출할 필요가 없습니다.

  • offsetToken 지원: 이제 새로운 openChannel 메서드에 선택적 offsetToken 매개 변수가 있으므로 특정 위치에서 채널을 열 수 있습니다. openChannel(String channelName, (optional) String offsetToken).

데이터 수집

  • InsertRows 이름 변경: 이제 InsertRows 메서드를 고성능 SDK에서는 :code:`AppendRows`로 지칭합니다.

  • AppendResult 제거: appendRowappendRows 메서드는 더 이상 AppendResult`를 반환하지 않습니다. 서명이 :code:`void appendRow(Map<String, Object> row, String offsetToken) 및 :code:`void appendRows(Iterable<Map<String, Object>> row, String startOffsetToken, String endOffsetToken)`로 변경되었습니다.

새로운 비동기 및 유틸리티 메서드

  • GetChannelStatus: Channel 오브젝트에서 사용 가능한 새 API입니다.

  • waitForFlush: 새 waitForFlush 메서드가 클라이언트 및 채널 오브젝트 모두에 추가되었습니다.

    • 클라이언트: void close(boolean waitForFlush, Duration timeoutDuration)

    • 채널 및 클라이언트: void waitForFlush((optional) Duration timeoutDuration)

  • waitForCommit: 새 메서드 :code:`CompletableFuture<Boolean> waitForCommit(Predicate<String> tokenChecker, Duration timeoutDuration)`을 사용하면 커밋이 확인될 때까지 기다릴 수 있습니다.

  • initiateFlush: 이 새 메서드 :code:`void initiateFlush()`는 채널 또는 클라이언트에서 플러시를 비동기적으로 호출합니다. 이 메서드를 사용하면 시간 제한 또는 크기 제한 없이 데이터를 플러시할 수 있습니다.

데이터 타입 및 구문 분석

고성능 아키텍처에는 ARRAY 및 VARIANT 열을 위한 네이티브 오브젝트가 필요하며, 문자열 리터럴을 자동으로 구문 분석하지 않습니다.

열 유형

클래식

고성능

OBJECT

JSON 문자열을 자동으로 구문 분석합니다.

변경 사항 없음. JSON 문자열을 자동으로 구문 분석합니다.

ARRAY

문자열을 암시적으로 구문 분석합니다. 예를 들어, “[1,2]”는 [1,2]가 됩니다.

형식이 엄격합니다. 문자열을 리터럴로 처리합니다. 예를 들어, “[1,2]”는 [“[1,2]”]가 됩니다.

VARIANT

문자열을 암시적으로 구문 분석합니다. 예를 들어, “true”는 true가 됩니다.

형식이 엄격합니다. 문자열을 리터럴로 처리합니다. 예를 들어, “true”는 “true”가 됩니다.

반정형 데이터가 고성능 아키텍처에 올바르게 저장되도록 하려면 직렬화된 JSON 문자열 대신 네이티브 언어 오브젝트(예: Java List/Map 또는 Python list/dict)를 전달합니다.

기타 변경 사항

  • GetLatestCommittedOffsetTokens: 이 API가 개선되었습니다. 고성능 SDK에서 이제 클라이언트가 열지 않은 채널에 대한 오프셋 토큰을 가져올 수 있으며 부분적인 실패를 허용합니다.

  • isValid가 제거됨: isValid 메서드가 고성능 SDK에서 제거되었습니다.

  • 스키마 진화 지원: 고성능 SDK가 변화하는 데이터 스키마를 자동으로 처리하기 위한 주요 기능인 :doc:`스키마 진화</user-guide/data-load-schema-evolution>`를 지원합니다.

다음 테이블은 클래식 SDK와 고성능 SDK 간에 API가 어떻게 변경되었는지를 보여줍니다.

SnowflakeStreamingIngestClientFactory 및 SnowflakeStreamingIngestClientFactory.Builder

클래식

고성능

참고

builder(String name)

builder(String clientName, String dbName, String schemaName, String pipeName)

클래식 버전의 name = 고성능 버전의 clientName

N/A

setExecutorService(ExecutorService executorService)

새로운 메서드입니다. SDK가 백그라운드 작업에 사용할 :code:`ExecutorService`를 지정할 수 있습니다.

SnowflakeStreamingIngestClient

클래식

고성능

참고

String getName()

String getClientName()

API 이름 바꾸기만 가능하며, 동일한 정보가 반환됩니다.

N/A

String getDBName()

신규 API.

N/A

String getPipeName()

신규 API.

N/A

String getSchemaName()

신규 API.

SnowflakeStreamingIngestChannel openChannel(OpenChannelRequest 요청)

OpenChannelResult openChannel(String channelName, (optional) String offsetToken)

다른 요청 인자와 반환 값.

Map<String,String> getLatestCommittedOffsetTokens (List<SnowflakeStreamingIngestChannel> channels)

Map<String, String> getLatestCommittedOffsetTokens (List<String> channelNames)

다른 요청 인자입니다. 고성능 SDK를 사용하면 API는 다른 클라이언트가 열고 잠재적으로 해당 클라이언트에 속하지 않는 채널의 상태를 가져올 수 있습니다.

N/A

ChannelStatusBatch getChannelStatus(List<String> channelNames)

신규 API.

Void dropChannel(DropChannelRequest request)

Void dropChannel(String channelName)

다른 요청 인자.

Void setRefreshToken(String refreshToken)

N/A

제거되었습니다.

N/A

CompletableFuture<Void> close(boolean waitForFlush, Duration timeoutDuration)

종료 프로세스를 더 잘 제어할 수 있는 새 클라이언트 close 메서드입니다. waitForFlush: 클라이언트가 종료하기 전에 모든 채널이 플러시될 때까지 기다려야 하는지 여부를 나타내는 부울 매개 변수입니다. timeoutDuration: 강제 종료 전에 플러시가 완료될 때까지 클라이언트가 기다려야 하는 시간을 지정하는 :code:`Duration`입니다.

N/A

CompletableFuture<Void> waitForFlush((optional) Duration timeoutDuration)

플러시가 완료될 때까지 대기하는 새로운 메서드입니다. timeoutDuration: 클라이언트가 시간 초과될 때까지 기다려야 하는 시간을 지정합니다.

N/A

void initiateFlush()

클라이언트가 플러시를 비동기적으로 트리거하고 결과를 즉시 반환하도록 하는 새로운 메서드입니다.

SnowflakeStreamingIngestChannel

클래식

고성능

참고

getLatestCommittedOffsetToken

getLatestCommittedOffsetToken

이 API가 개선되었습니다. 고성능 SDK에서 이제 클라이언트가 열지 않은 채널에 대한 오프셋 토큰을 가져올 수 있으며 부분적인 실패를 허용합니다.

isValid

N/A

제거되었습니다.

N/A

String getDBName()

신규 API.

N/A

String getSchemaName()

신규 API.

N/A

String getPipeName()

신규 API.

N/A

String getFullyQualifiedPipeName()

신규 API.

InsertValidationResponse insertRow(Map<String, Object> row, String offsetToken)

void appendRow(Map<String, Object> row, @Nullable String offsetToken)

API 이름이 변경되었습니다. 클라이언트에 더 이상 유효성 검사가 없기 때문에 응답 유형이 변경되었습니다.

InsertValidationResponse insertRow(Iterable<Map<String, Object>> row, @Nullable String startOffsetToken, @Nullable String endOffsetToken)

void appendRows(Iterable<Map<String, Object>> row, String startOffsetToken, String endOffsetToken)

API 이름이 변경되었습니다. 클라이언트에 더 이상 유효성 검사가 없기 때문에 응답 유형이 변경되었습니다.

InsertValidationResponse insertRow(Iterable<Map<String, Object>> row, String offsetToken)

N/A

제거되었습니다.

String getTableName()

N/A

제거되었습니다.

String getFullyQualifiedTableName()

N/A

제거되었습니다.

N/A

String getPipeName()

신규 API.

N/A

String getFullyQualifiedPipeName()

신규 API.

String getName()

String getChannelName()

API 이름 바꾸기.

String getFullyQualifiedName()

String getFullyQualifiedChannelName()

API 이름 바꾸기.

Map<String, ColumnProperties> getTableSchema()

N/A

제거되었습니다.

N/A

ChannelStatus getChannelStatus()

신규 API.

CompletableFuture<Void> close()

Void close()

반환 유형은 변경되었지만 동작은 동일합니다.

CompletableFuture<Void> close(boolean drop)

Void close(boolean waitForFlush, Duration timeoutDuration)

API 이름이 변경되었지만, 동작은 동일합니다.

Boolean isValid()

N/A

제거되었습니다.

N/A

CompletableFuture<Void> waitForFlush((optional)Duration timeoutDuration)

플러시가 완료될 때까지 대기하는 새로운 메서드입니다. timeoutDuration: 채널이 시간 초과되기까지 기다려야 하는 시간을 지정합니다.

N/A

void waitForCommit(Predicate<String> tokenChecker, Duration timeoutDuration)

이 특정 채널 내에서 버퍼링된 모든 데이터가 Snowflake 서버로 플러시되도록 비동기적으로 트리거하고 플러시가 끝날 때까지 대기하는 새로운 메서드입니다. 이 메서드를 사용하면 보류 중인 모든 데이터가 성공적으로 작성되고 플러시 작업이 완료된 후에 계속 진행됩니다.

N/A

void initiateFlush()

채널이 플러시를 비동기적으로 트리거하도록 하는 새로운 메서드입니다.