Comparaison entre le SDK classique et le SDK hautes performances

Cette section résume les principales différences entre les SDKs classique et hautes performances.

Gestion des clients et des canaux

  • OpenClient : Le SDK hautes performances exige que vous spécifiez DB, SCHEMA et PIPE. Dans le SDK classique, il vous suffit de spécifier un client NAME.

  • OpenChannel : Le SDK hautes performances simplifie cela en n’exigeant que le nom du canal. Le SDK classique exige que vous spécifiez DB, SCHEMA, TABLE et une ERROR_OPTION. Le nouveau SDK renvoie également un OpenChannelResult qui contient l’entité et l’état du canal, supprimant ainsi la nécessité d’un appel RPC distinct pour obtenir le dernier jeton de décalage validé.

  • Prise en charge de offsetToken : La nouvelle méthode openChannel dispose désormais d’un paramètre offsetToken facultatif, vous permettant d’ouvrir un canal à un endroit spécifique. openChannel(String channelName, (optional) String offsetToken).

Ingestion des données

  • InsertRows renommée : La méthode InsertRows est désormais appelée AppendRows dans le SDK hautes performances.

  • AppendResult supprimé : Les méthodes appendRow et appendRows ne renvoient plus un AppendResult. Leurs signatures ont été modifiées en void appendRow(Map<String, Object> row, String offsetToken) et void appendRows(Iterable<Map<String, Object>> row, String startOffsetToken, String endOffsetToken).

Nouvelles méthodes asynchrones et utilitaires

  • GetChannelStatus : Il s’agit d’une nouvelle API disponible sur l’objet Channel.

  • waitForFlush : De nouvelles méthodes waitForFlush ont été ajoutées aux objets client et canal.

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

    • Canal et client : void waitForFlush((optional) Duration timeoutDuration)

  • waitForCommit : Une nouvelle méthode, CompletableFuture<Boolean> waitForCommit(Predicate<String> tokenChecker, Duration timeoutDuration), vous permet d’attendre la confirmation d’une validation.

  • initiateFlush : Cette nouvelle méthode void initiateFlush() appelle de manière asynchrone un vidage sur un canal ou un client, ce qui est utile pour vider les données sans attendre les limites du délai d’attente ou de la taille.

Autres changements

  • GetLatestCommittedOffsetTokens : Cette API a été améliorée. Dans le SDK hautes performances, elle peut désormais récupérer des jetons de décalage pour les canaux non ouverts par le client et permet des échecs partiels.

  • isValid supprimé : La méthode isValid a été supprimée du SDK hautes performances.

Les tableaux suivants présentent les changements d’API entre le SDK classique et le SDK hautes performances :

SnowflakeStreamingIngestClientFactory et SnowflakeStreamingIngestClientFactory.Builder

Classique

Haute performance

Remarques

builder(String name)

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

name dans la version classique = clientName dans la version haute performances.

N/A

setExecutorService(ExecutorService executorService)

Une nouvelle méthode. Permet de spécifier le ExecutorService que le SDK utilisera pour ses tâches en arrière-plan.

SnowflakeStreamingIngestClient

Classique

Haute performance

Remarques

String getName()

String getClientName()

Changement du nom de l’API uniquement ; les mêmes informations sont renvoyées.

N/A

String getDBName()

Nouvelle API.

N/A

String getPipeName()

Nouvelle API.

N/A

String getSchemaName()

Nouvelle API.

SnowflakeStreamingIngestChannel openChannel(OpenChannelRequest request)

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

Différents arguments de requête et valeurs de retour.

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

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

Différents arguments de requête. Le SDK hautes performances active l’API pour récupérer l’état du canal qui est ouvert par d’autres clients et qui n’appartient potentiellement pas au client.

N/A

ChannelStatusBatch getChannelStatus(List<String> channelNames)

Nouvelle API.

Void dropChannel(DropChannelRequest request)

Void dropChannel(String channelName)

L’argument de la requête est différent.

Void setRefreshToken(String refreshToken)

N/A

Supprimé.

N/A

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

Une nouvelle méthode cliente close qui a plus de contrôle sur le processus d’arrêt. waitForFlush : Un paramètre Booléen indiquant si le client doit attendre que tous les canaux soient vidés avant l’arrêt. timeoutDuration : Une Duration pour spécifier la durée pendant laquelle le client doit attendre que le vidage se termine avant un arrêt forcé.

N/A

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

Une nouvelle méthode pour attendre la fin du vidage timeoutDuration : Spécifie la durée pendant laquelle le client doit attendre avant l’expiration.

N/A

void initiateFlush()

Une nouvelle méthode permettant aux clients de déclencher de manière asynchrone un vidage et de le renvoyer immédiatement.

SnowflakeStreamingIngestChannel

Classique

Haute performance

Remarques

getLatestCommittedOffsetToken

getLatestCommittedOffsetToken

Cette API a été améliorée. Dans le SDK hautes performances, elle peut désormais récupérer des jetons de décalage pour les canaux non ouverts par le client et permet des échecs partiels.

isValid

N/A

Supprimé.

N/A

String getDBName()

Nouvelle API.

N/A

String getSchemaName()

Nouvelle API.

N/A

String getPipeName()

Nouvelle API.

N/A

String getFullyQualifiedPipeName()

Nouvelle API.

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

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

Nom de l’API modifié. Le type de réponse a changé parce qu’il n’y a plus de validation sur le client.

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

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

Nom de l’API modifié. Le type de réponse a changé parce qu’il n’y a plus de validation sur le client.

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

N/A

Supprimé.

String getTableName()

N/A

Supprimé.

String getFullyQualifiedTableName()

N/A

Supprimé.

N/A

String getPipeName()

Nouvelle API.

N/A

String getFullyQualifiedPipeName()

Nouvelle API.

String getName()

String getChannelName()

Changement de nom d’API.

String getFullyQualifiedName()

String getFullyQualifiedChannelName()

Changement de nom d’API.

Map<String, ColumnProperties> getTableSchema()

N/A

Supprimé.

N/A

ChannelStatus getChannelStatus()

Nouvelle API.

CompletableFuture<Void> close()

Void close()

Le type de retour est modifié, mais le comportement est le même.

CompletableFuture<Void> close(boolean drop)

Void close(boolean waitForFlush, Duration timeoutDuration)

Changement du nom de l’API, mais le comportement est le même.

Boolean isValid()

N/A

Supprimé.

N/A

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

Une nouvelle méthode pour attendre la fin du vidage timeoutDuration : Spécifie la durée pendant laquelle le canal doit attendre avant l’expiration.

N/A

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

Une nouvelle méthode qui déclenche et attend de manière asynchrone le vidage de toutes les données mises en mémoire tampon dans ce canal spécifique vers le serveur Snowflake. Cette méthode permet de s’assurer que toutes les données en attente ont été écrites avec succès et que l’opération de vidage est terminée avant de poursuivre.

N/A

void initiateFlush()

Une nouvelle méthode permettant aux canaux de déclencher un vidage de manière asynchrone.