Comparação entre o SDK clássico e o SDK de alto desempenho

Esta seção resume as principais diferenças entre os SDKs clássico e de alto desempenho.

Gerenciamento de clientes e canais

  • OpenClient: o SDK de alto desempenho exige que você especifique DB, SCHEMA e PIPE. No SDK clássico, você só precisa especificar o NAME de um cliente.

  • OpenChannel: o SDK de alto desempenho simplifica isso exigindo somente o nome do canal. O SDK clássico exige que você especifique DB, SCHEMA, TABLE e ERROR_OPTION. O novo SDK também retorna um OpenChannelResult que contém a entidade e o status do canal, eliminando a necessidade de uma chamada RPC separada para obter o último token de offset confirmado.

  • Suporte para offsetToken: o novo método openChannel agora tem um parâmetro offsetToken opcional, permitindo abrir um canal em uma posição específica. openChannel(String channelName, (optional) String offsetToken).

Ingestão de dados

  • InsertRows renomeado: o método InsertRows agora é chamado AppendRows no SDK de alto desempenho.

  • AppendResult removido: os métodos appendRow e appendRows não retornam mais um AppendResult. Suas assinaturas mudaram para void appendRow(Map<String, Object> row, String offsetToken) e void appendRows(Iterable<Map<String, Object>> row, String startOffsetToken, String endOffsetToken).

Novos métodos assíncronos e utilitários

  • GetChannelStatus: esta é uma nova API disponível no objeto Channel.

  • waitForFlush: os novos métodos waitForFlush foram adicionados aos objetos do cliente e ao canal.

    • Cliente: void close(boolean waitForFlush, Duration timeoutDuration)

    • Canal e cliente: void waitForFlush((optional) Duration timeoutDuration)

  • waitForCommit: um novo método, CompletableFuture<Boolean> waitForCommit(Predicate<String> tokenChecker, Duration timeoutDuration), permite que você aguarde uma confirmação.

  • initiateFlush: esse novo método void initiateFlush() chama de forma assíncrona uma liberação em um canal ou cliente, o que é útil para liberar dados sem esperar pelo tempo limite ou pelos limites de tamanho.

Outras mudanças

  • GetLatestCommittedOffsetTokens: essa API foi melhorada. No SDK de alto desempenho, ele agora pode buscar tokens de offset para canais não abertos pelo cliente e permite falhas parciais.

  • isValid removido: O método isValid foi removido do SDK de alto desempenho.

As tabelas a seguir mostram as mudanças da API do SDK clássico para o SDK de alto desempenho:

SnowflakeStreamingIngestClientFactory e SnowflakeStreamingIngestClientFactory.Builder

Clássico

Alto desempenho

Notas

builder(String name)

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

name na versão clássica = clientName na versão de alto desempenho.

N/A

setExecutorService(ExecutorService executorService)

Um novo método. Permite que você especifique o ExecutorService que o SDK usará para suas tarefas em segundo plano.

SnowflakeStreamingIngestClient

Clássico

Alto desempenho

Notas

String getName()

String getClientName()

Mudança de nome de API apenas; as mesmas informações são retornadas.

N/A

String getDBName()

Nova API.

N/A

String getPipeName()

Nova API.

N/A

String getSchemaName()

Nova API.

SnowflakeStreamingIngestChannel openChannel (solicitação OpenChannelRequest)

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

Diferentes argumentos de solicitação e valores de retorno.

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

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

Diferentes argumentos de solicitação. O SDK de alto desempenho ativa a API para obter o status do canal aberto por outros clientes e potencialmente não pertence ao cliente.

N/A

ChannelStatusBatch getChannelStatus(List<String> channelNames)

Nova API.

Void dropChannel(DropChannelRequest request)

Void dropChannel(String channelName)

Argumento de solicitação diferente.

Void setRefreshToken(String refreshToken)

N/A

Removido.

N/A

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

Um novo método close do cliente que tem mais controle sobre o processo de desligamento. waitForFlush: um parâmetro booleano para indicar se o cliente deve esperar que todos os canais sejam liberados antes de serem desligados. timeoutDuration: um Duration para especificar quanto tempo o cliente deve esperar para que a liberação seja concluída antes de um desligamento forçado.

N/A

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

Um novo método para esperar a liberação ser concluída. timeoutDuration: especifica quanto tempo o cliente deve esperar antes de atingir o tempo limite.

N/A

void initiateFlush()

Um novo método para os clientes acionador de forma assíncrona uma liberação e retornarem imediatamente.

SnowflakeStreamingIngestChannel

Clássico

Alto desempenho

Notas

getLatestCommittedOffsetToken

getLatestCommittedOffsetToken

essa API foi melhorada. No SDK de alto desempenho, ele agora pode buscar tokens de offset para canais não abertos pelo cliente e permite falhas parciais.

isValid

N/A

Removido.

N/A

String getDBName()

Nova API.

N/A

String getSchemaName()

Nova API.

N/A

String getPipeName()

Nova API.

N/A

String getFullyQualifiedPipeName()

Nova API.

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

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

Nome da API alterado. O tipo de resposta foi alterado porque não há mais validação no cliente.

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

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

Nome da API alterado. O tipo de resposta foi alterado porque não há mais validação no cliente.

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

N/A

Removido.

String getTableName()

N/A

Removido.

String getFullyQualifiedTableName()

N/A

Removido.

N/A

String getPipeName()

Nova API.

N/A

String getFullyQualifiedPipeName()

Nova API.

String getName()

String getChannelName()

Alteração do nome da API.

String getFullyQualifiedName()

String getFullyQualifiedChannelName()

Alteração do nome da API.

Map<Cadeia de caracteres, ColumnProperties> getTableSchema()

N/A

Removido.

N/A

ChannelStatus getChannelStatus()

Nova API.

CompletableFuture<Void> close()

Void close()

O tipo de retorno é alterado, mas o comportamento é o mesmo.

CompletableFuture<Void> close(boolean drop)

Void close(boolean waitForFlush, Duration timeoutDuration)

O nome da API é alterado, mas o comportamento é o mesmo.

Boolean isValid()

N/A

Removido.

N/A

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

Um novo método para esperar a liberação ser concluída. timeoutDuration: Especifica quanto tempo o canal deve esperar antes de atingir o tempo limite.

N/A

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

Um novo método que aciona de forma assíncrona e aguarda a liberação de todos os dados em buffer dentro deste canal específico para o servidor Snowflake. Esse método garante que todos os dados pendentes sejam gravados com sucesso e que a operação de liberação seja concluída antes de prosseguir.

N/A

void initiateFlush()

Um novo método para canais para acionador uma liberação de forma assíncrona.