Vergleich zwischen klassischem SDK und leistungsstarkem SDK

In diesem Abschnitt werden die Hauptunterschiede zwischen den klassischen und leistungsstarken SDKs zusammengefasst.

Client- und Kanalverwaltung

  • OpenClient: Das leistungsstarke SDK erfordert die Angabe von DB, SCHEMA und PIPE. Beim klassischen SDK müssen Sie nur einen Client-NAME angeben.

  • OpenChannel: Das leistungsstarke SDK vereinfacht dies, da nur der Kanalname angegeben werden muss. Das klassische SDK erfordert die Angabe von DB, SCHEMA, TABLE und einer:code:ERROR_OPTION. Das neue SDK gibt ebenfalls ein OpenChannelResult zurück, das die Entität und den Status des Kanals enthält, sodass kein separater RPC-Aufruf mehr erforderlich ist, um das letzte übertragene Offset-Token zu erhalten.

  • Unterstützung für OffsetToken: Die neue openChannel-Methode verfügt jetzt über einen optionalen offsetToken-Parameter, mit dem Sie einen Kanal an einer bestimmten Position öffnen können. openChannel(String channelName, (optional) String offsetToken).

Datenaufnahme

  • InsertRows umbenannt: Die InsertRows-Methode heißt jetzt AppendRows im leistungsstarken SDK.

  • AppendResult entfernt: Die Methoden appendRow und appendRows geben kein AppendResult mehr zurück. Ihre Signaturen haben sich in geändert in void appendRow(Map<String, Object> row, String offsetToken) und void appendRows(Iterable<Map<String, Object>> row, String startOffsetToken, String endOffsetToken).

Neue asynchrone und Dienstprogramm-Methoden

  • GetChannelStatus: Dies ist eine neue API, die für das Channel-Objekt verfügbar ist.

  • waitForFlush: Neue waitForFlush-Methoden wurden sowohl den Client- als auch den Kanalobjekten hinzugefügt.

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

    • Kanal und Client: void waitForFlush((optional) Duration timeoutDuration)

  • waitForCommit: Eine neue Methode, CompletableFuture<Boolean> waitForCommit(Predicate<String> tokenChecker, Duration timeoutDuration), ermöglicht es Ihnen, auf die Bestätigung eines Commits zu warten.

  • initiateFlush: Diese neue void initiateFlush()-Methode ruft asynchron einen Flush für einen Kanal oder Client auf. Dies ist nützlich, um Daten zu leeren, ohne auf ein Timeout oder Größenbeschränkungen warten zu müssen.

Sonstige Änderungen

  • GetLatestCommittedOffsetTokens: Diese API wurde verbessert. Im leistungsstarken SDK kann sie nun Offset-Token für Kanäle abrufen, die nicht vom Client geöffnet wurden, was teilweise Ausfälle zulässt.

  • isValid entfernt: Die Methode isValid wurde aus dem leistungsstarken SDK entfernt.

Die folgenden Tabellen zeigen die API-Änderungen des klassischen SDK im Vergleich zum leistungsstarken SDK:

SnowflakeStreamingIngestClientFactory und SnowflakeStreamingIngestClientFactory.Builder

Klassisch

Leistungsstark

Anmerkungen

builder(String name)

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

name in der klassischen Version = clientName in der leistungsstarken Version.

N/A

setExecutorService(ExecutorService executorService)

Eine neue Methode. Ermöglicht es Ihnen, den ExecutorService anzugeben, der vom SDK wird für seine Hintergrundaufgaben verwendet wird.

SnowflakeStreamingIngestClient

Klassisch

Leistungsstark

Anmerkungen

String getName()

String getClientName()

Nur Änderung des API-Namens; es werden die gleichen Informationen zurückgegeben.

N/A

String getDBName()

Neue API.

N/A

String getPipeName()

Neue API.

N/A

String getSchemaName()

Neue API.

SnowflakeStreamingIngestChannel openChannel(OpenChannelRequest-Anfrage)

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

Unterschiedliche Anfrage-Argumente und Rückgabewerte.

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

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

Verschiedene Anforderungsargumente. Das leistungsstarke SDK ermöglicht es der API, den Status des Kanals abzurufen, der von anderen Clients geöffnet wird und möglicherweise nicht zum Client gehört.

N/A

ChannelStatusBatch getChannelStatus(List<String> channelNames)

Neue API.

Void dropChannel(DropChannelRequest request)

Void dropChannel(String channelName)

Anderes Argument für die Anfrage.

Void setRefreshToken(String refreshToken)

N/A

Entfernt

N/A

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

Eine neue close-Methode für den Client, die mehr Kontrolle über den Prozess des Herunterfahrens hat. waitForFlush: Ein boolescher Parameter, der angibt, ob der Client warten soll, bis alle Kanäle geleert sind, bevor er heruntergefahren wird. timeoutDuration: Duration, die angibt, wie lange der Client auf den Abschluss des Flushes warten soll, bevor ein erzwungenes Herunterfahren erfolgt.

N/A

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

Eine neue Methode, die auf den Abschluss des Flushes wartet. timeoutDuration: Gibt an, wie lange der Client warten soll, bevor ein Timeout eintritt.

N/A

void initiateFlush()

Eine neue Methode für Clients, um asynchron einen Flush auszulösen und sofort zurückzukehren.

SnowflakeStreamingIngestChannel

Klassisch

Leistungsstark

Anmerkungen

getLatestCommittedOffsetToken

getLatestCommittedOffsetToken

Diese API wurde verbessert. Im leistungsstarken SDK kann sie nun Offset-Token für Kanäle abrufen, die nicht vom Client geöffnet wurden, was teilweise Ausfälle zulässt.

isValid

N/A

Entfernt

N/A

String getDBName()

Neue API.

N/A

String getSchemaName()

Neue API.

N/A

String getPipeName()

Neue API.

N/A

String getFullyQualifiedPipeName()

Neue API.

InsertValidationResponse insertRow(Map<Zeichenfolge, Objekt> row, String offsetToken)

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

API-Name geändert. Der Antworttyp hat sich geändert, da es keine Validierung auf dem Client mehr gibt.

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-Name geändert. Der Antworttyp hat sich geändert, da es keine Validierung auf dem Client mehr gibt.

InsertValidationResponse insertRow(Iterable<Zuordnung<Zeichenfolge, Objekt>> row, String offsetToken)

N/A

Entfernt

String getTableName()

N/A

Entfernt

String getFullyQualifiedTableName()

N/A

Entfernt

N/A

String getPipeName()

Neue API.

N/A

String getFullyQualifiedPipeName()

Neue API.

String getName()

String getChannelName()

API-Namensänderung.

String getFullyQualifiedName()

String getFullyQualifiedChannelName()

API-Namensänderung.

Map<Zeichenfolge, ColumnProperties> getTableSchema()

N/A

Entfernt

N/A

ChannelStatus getChannelStatus()

Neue API.

CompletableFuture<Void> close()

Void close()

Der Rückgabetyp wurde geändert, aber die Verhaltensweise ist dieselbe.

CompletableFuture<Void> close(boolean drop)

Void close(boolean waitForFlush, Duration timeoutDuration)

API-Name wurde geändert, aber die Verhaltensweise ist dieselbe.

Boolean isValid()

N/A

Entfernt

N/A

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

Eine neue Methode, die auf den Abschluss des Flushes wartet. timeoutDuration: Gibt an, wie lange der Kanal warten soll, bevor ein Timeout eintritt.

N/A

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

Eine neue Methode, die asynchron ausgelöst wird und darauf wartet, dass alle gepufferten Daten innerhalb dieses speziellen Kanals per Flush an den Snowflake Server geleert werden. Diese Methode stellt sicher, dass alle ausstehenden Daten erfolgreich geschrieben werden und die Flush-Operation abgeschlossen ist, bevor Sie fortfahren.

N/A

void initiateFlush()

Es gibt eine neue Methode für Kanäle, um asynchron einen Flush auszulösen.