Snowpipe Streaming API REST-Endpunkte¶
Bemerkung
Wir empfehlen, mit dem Snowpipe Streaming-SDK über die REST API zu beginnen, um von der verbesserten Leistung und dem einfacheren Einstieg zu profitieren.
Die Snowpipe Streaming-REST API ist für einfache Workloads konzipiert und bietet eine flexible Möglichkeit, externe Anwendungen zu integrieren, ohne das Snowpipe Streaming-SDK zu verwenden.
Das folgende Diagramm bietet einen Überblick darüber, wie Daten vom Client zum Snowflake Server fließen. Die wichtigen API-Endpunkte im Prozess werden ausführlich beschrieben.
Header der Anforderung¶
Die folgenden Anfrage-Header gelten für alle Endpunkte von Snowpipe Streaming REST API:
Header |
Beschreibung |
|---|---|
|
Authentifizierungstoken |
|
JWT/OAuth |
Bemerkung
Die maximal zulässige Größe für eine einzelne Anforderungsnutzlast beträgt 16 MB. Wenn Ihre Daten größer sind, müssen Sie diese in mehrere Anforderungen aufteilen.
Hostname abrufen¶
Get Hostname gibt den Hostnamen zurück, der für die Interaktion mit Snowpipe Streaming REST API verwendet wird. Jedes Konto hat einen eindeutigen Hostnamen.
GET /v2/streaming/hostname
Antwort:
{
"hostname": "string"
}
Beschreibung der Antwortfelder:
Feld |
Typ |
Beschreibung |
|---|---|---|
Hostname |
String |
Der Hostname des Kontos. |
Auf Exchange beschränktes Token¶
Exchange Scoped Token gibt ein Sicherheitstoken zurück, das nur für den Zugriff auf den API-bezogenen Service von Snowpipe Streaming verwendet werden kann. Dies bietet Sicherheitsschutz für den Kunden.
POST /oauth/token
Anfrage:
Attribut |
Erforderlich |
Komponente |
Beschreibung |
|---|---|---|---|
content_type |
Ja |
Header |
„application/x-www-form-urlencoded“ |
grant_type |
Ja |
Nutzlast |
|
scope |
Ja |
Nutzlast |
Der Hostname des Kontos. |
Antwort:
{
"token": "string"
}
Beschreibung der Antwortfelder:
Feld |
Typ |
Beschreibung |
|---|---|---|
Token |
String |
Das bereichsbezogene Token. |
Offener Kanal¶
Die Operation Open Channel erstellt oder öffnet einen neuen Kanal für eine Pipe oder Tabelle. Wenn der Kanal bereits existiert, stößt Snowflake den Client-Sequencer des Kanals an und gibt das zuletzt übertragene Offset-Token zurück.
PUT /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}
Anfrage:
Attribut |
Erforderlich |
Komponente |
Beschreibung |
|---|---|---|---|
databaseName |
Ja |
URI |
Datenbankname, Groß-/Kleinschreibung wird nicht berücksichtigt. |
schemaName |
Ja |
URI |
Schemaname, Groß-/Kleinschreibung wird nicht berücksichtigt. |
pipeName |
Ja |
URI |
Pipename, Groß-/Kleinschreibung wird nicht berücksichtigt. |
channelName |
Ja |
URI |
Der Name des Kanals, den Sie erstellen oder erneut öffnen; Groß-/Kleinschreibung wird nicht berücksichtigt. |
offset_token |
Nein |
Nutzlast |
Zeichenfolge, die verwendet wird, um ein Offset-Token beim Öffnen eines Kanals zu setzen. |
requestId |
Nein |
Abfrageparameter |
Ein universell eindeutiger Bezeichner (UUID), mit dem Anfragen durch das System verfolgt werden können. |
Antwort:
{
"next_continuation_token": "string",
"channel_status": {
"database_name": "string",
"schema_name": "string",
"pipe_name": "string",
"channel_name": "string",
"channel_status_code": "string",
"last_committed_offset_token": "string",
"created_on_ms": "long",
"rows_inserted": "int",
"rows_parsed": "int",
"rows_error_count": "int",
"last_error_offset_upper_bound": "string",
"last_error_message": "string",
"last_error_timestamp": "timestamp_utc",
"snowflake_avg_processing_latency_ms": "int"
}
}
Beschreibung der Antwortfelder:
Feld |
Typ |
Beschreibung |
|---|---|---|
next_continuation_token |
String |
Ein von der API verwaltetes Token, das in der nachfolgenden Zeilenanforderung verwendet werden muss. Das Token verknüpft eine Reihe von Aufrufen, wodurch ein zusammenhängender Datenstream in der richtigen Reihenfolge sichergestellt wird und der Sitzungsstatus für eine genau einmalige Bereitstellung beibehalten wird. |
channel_status |
Objekt |
Ein verschachteltes Objekt mit den folgenden Detailinformationen zu dem Kanal:
|
Zeile(n) anhängen¶
Die Operation Append Rows fügt ein Batch von Zeilen in den angegebenen Kanal ein.
POST /v2/streaming/data/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}/rows
Anfrage:
Attribut |
Erforderlich |
Komponente |
Beschreibung |
|---|---|---|---|
databaseName |
Ja |
URI |
Datenbankname, Groß-/Kleinschreibung wird nicht berücksichtigt. |
schemaName |
Ja |
URI |
Schemaname, Groß-/Kleinschreibung wird nicht berücksichtigt. |
pipeName |
Ja |
URI |
Pipe, Groß-/Kleinschreibung wird nicht berücksichtigt. |
channelName |
Ja |
URI |
Kanalname, Groß-/Kleinschreibung wird nicht berücksichtigt. |
continuationToken |
Ja |
Abfrageparameter |
Fortsetzungstoken von Snowflake, kapselt sowohl Client- als auch Zeilensequenzierer. |
offsetToken |
Nein |
Abfrageparameter |
Zeichenfolge, die verwendet wird, um ein Offset-Token pro Batch zu setzen. |
rows |
Ja |
Nutzlast |
Die eigentliche Datennutzlast, die in aufgenommen werden soll, im NDJSON-Format. Die maximal zulässige Größe für dieses Attribut ist 4 MB. |
requestId |
Nein |
Abfrageparameter |
Eine UUID, die verwendet wird, um Anfragen durch das System zu verfolgen. |
Bemerkung
Der JSON-Text innerhalb der NDJSON-Nutzlast muss strikt dem RFC 8259-Standard entsprechen. Auf jeden JSON-Text muss ein Neue-Zeile-Zeichen \n (0x0A) folgen. Sie können auch einen Zeilenumbruch \r (0x0D) vor dem Neue-Zeile-Zeichen einfügen.
Antwort:
{
"next_continuation_token": "string"
}
Beschreibung der Antwortfelder:
Feld |
Typ |
Beschreibung |
|---|---|---|
next_continuation_token |
string |
Das nächste Fortsetzungs-Token von Snowflake, das sowohl Client- als auch Zeilen-Sequenzer einkapselt. Es sollte für das Einfügen des nächsten Batch verwendet werden. |
Kanal löschen¶
Der Vorgang Drop Channel legt einen Kanal zusammen mit seinen Metadaten auf der Serverseite ab.
DELETE /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}
Anfrage:
Attribut |
Erforderlich |
Komponente |
Beschreibung |
|---|---|---|---|
databaseName |
Ja |
URI |
Datenbankname, Groß-/Kleinschreibung wird nicht berücksichtigt |
schemaName |
Ja |
URI |
Schemaname, Groß-/Kleinschreibung wird nicht berücksichtigt |
pipeOrTableName |
Ja |
URI |
Pipe- oder Tabellenname, Groß-/Kleinschreibung wird nicht berücksichtigt |
channelName |
Ja |
URI |
Kanalname, Groß-/Kleinschreibung wird nicht berücksichtigt |
requestId |
Nein |
Abfrageparameter |
Eine UUID, mit der Sie Anfragen im System verfolgen können |
Antwort:
Diese Operation gibt eine Nutzlast ohne spezifische erfolgreiche Antwort außer dem HTTP-Statuscode zurück.
Bulk-Kanalstatus abrufen¶
Die Operation Bulk Get Channel Status gibt den Status eines Kanals für einen bestimmten Client-Sequenzer zurück.
POST /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}:bulk-channel-status
Anfrage:
Attribut |
Erforderlich |
Komponente |
Beschreibung |
|---|---|---|---|
databaseName |
Ja |
URI |
Datenbankname, Groß-/Kleinschreibung wird nicht berücksichtigt |
schemaName |
Ja |
URI |
Schemaname, Groß-/Kleinschreibung wird nicht berücksichtigt |
pipeName |
Ja |
URI |
Pipe-Name, Groß-/Kleinschreibung wird nicht berücksichtigt |
channel_names |
Ja |
Nutzlast |
Ein Array von String-Kanalnamen, für die der Kunde den Status abrufen möchte. Bei den Namen wird zwischen Groß- und Kleinschreibung unterschieden. Beispiel: |
Antwort:
{
"channel_statuses": {
"channel1": {
"channel_status_code": "String",
"last_committed_offset_token": "String",
"database_name": "String",
"schema_name": "String",
"pipe_name": "String",
"channel_name": "String",
"rows_inserted": "int",
"rows_parsed": "int",
"rows_errors": "int",
"last_error_offset_upper_bound": "String",
"last_error_message": "String",
"last_error_timestamp": "timestamp_utc",
"snowflake_avg_processing_latency_ms": "int"
},
"channel2": {
"comment": "same structure as channel1"
}
"comment": "potentially other channels"
}
}
Bemerkung
Wenn im Service kein angeforderter Kanal gefunden wird, hat die Antwortnutzlast keinen Eintrag für diesen Kanal im channel_statuses-Objekt.
Beschreibung von channel_statuses-Felder für jeden Kanal:
Feld |
Typ |
Beschreibung |
|---|---|---|
channel_status_code |
String |
Zeigt den Status des Kanals an. |
last_committed_offset_token |
String |
Letztes bestätigtes Offset-Token. |
database_name |
String |
Der Name der Datenbank, zu der der Kanal gehört. |
schema_name |
String |
Der Name des Schemas, zu dem der Kanal gehört. |
Pipe-Name |
String |
Der Name der Pipe, zu der der Kanal gehört. |
channel_name |
String |
Der Name des Kanals. |
rows_inserted |
int |
Eine Zählung aller in diesen Kanal eingefügten Zeilen. |
rows_parsed |
int |
Eine Zählung aller Zeilen, die geparst, aber nicht unbedingt in diesen Kanal eingefügt wurden. |
rows_errors |
int |
Anzahl aller Zeilen, bei denen beim Einfügen in diesen Kanal ein Fehler auftrat und die daher abgelehnt wurden. |
last_error_offset_upper_bound |
String |
Die obere Grenze für einen Datenaufnahmefehler. Der Fehler wird bei oder vor diesem bestätigten Offset-Token platziert. |
last_error_message |
String |
Eine von Menschen lesbare Nachricht, die dem letzten Fehlercode für diesen Kanal entspricht, wobei sensible Kundendaten unkenntlich gemacht wurden. |
last_error_timestamp |
timestamp_utc |
Zeitstempel zu dem Zeitpunkt, an dem der letzte Fehler auftrat. |
snowflake_avg_processing_latency_ms |
int |
Durchschnittliche End-to-End-Verarbeitungszeit für diesen Kanal. |
Struktur der Fehlerantwort¶
Die Snowpipe Streaming-REST APIs geben eine JSON-Nutzlast für Fehlerantworten zurück. Diese Struktur liefert verwertbare Informationen sowohl für die automatische Fehlerbehandlung als auch für die menschliche Analyse.
Die Antwortnutzlast hat die folgende Struktur:
{
"code": "...",
"message": "..."
}
Antwortfelder¶
Feld |
Typ |
Beschreibung |
|---|---|---|
Code |
String |
Ein stabiler, programmgesteuerter Fehlercode. Dieser Wert kann für die automatische Fehlerbehandlung und Protokollierung verwendet werden. Die Logik einer Anwendung kann zum Beispiel prüfen, ob ein bestimmter Code eine vordefinierte Aktion auslöst. |
Meldung |
String |
Eine von Menschen lesbare Meldung, die den Fehler beschreibt. Diese Meldung kann sich ändern und sollte nicht für das automatische Parsen verwendet werden. |
Beispiel¶
Das folgende Beispiel zeigt eine Fehlerantwort, die Sie möglicherweise erhalten:
{
"code": "STALE_CONTINUATION_TOKEN_SEQUENCER",
"message": "Channel sequencer in the continuation token is stale. Please reopen the channel"
}
Dieses Beispiel zeigt die Antwort bei einem Versuch, ein Fortsetzungstoken mit einem veralteten Kanalsequenzierer zu verwenden. Der Code liefert einen klaren, maschinell lesbaren Bezeichner für den Fehler, und die Meldung bietet einen hilfreichen, aussagekräftigen Text für Benutzer.