Points de terminaison de Snowpipe Streaming API REST¶
Note
Nous vous recommandons d’utiliser le SDK :code:`snowpipe-streaming`comme choix principal et par défaut. L API REST n’est pas optimisée pour les scénarios de débit élevé.
Les en-têtes de requête suivants s’appliquent à tous les points de terminaison de Snowpipe Streaming REST API :
En-tête |
Description |
---|---|
|
jeton d’authentification |
|
JWT/OAuth |
Note
La taille maximale autorisée pour une seule charge utile de requête est de 16 MB. Si vos données sont plus volumineuses, vous devez les diviser en plusieurs requêtes.
Get Hostname¶
Get Hostname
renvoie le nom d’hôte utilisé pour interagir avec Snowpipe Streaming REST API. Chaque compte a un nom d’hôte unique.
GET /v2/streaming/hostname
Réponse :
Champ |
Type |
Description |
---|---|---|
hostname |
string |
Nom d’hôte du compte. |
Jeton d’échange restreint¶
Le Exchange Scoped Token
renvoie un jeton de sécurité qui peut être utilisé pour accéder uniquement au service lié à l” API Snowpipe Streaming. Cela protège la sécurité du client.
POST /oauth/token
Requête :
Attribut |
Obligatoire |
Composant |
Description |
---|---|---|---|
content_type |
Oui |
En-tête |
« application/x-www-form-urlencoded » |
grant_type |
Oui |
charge utile |
|
scope |
Oui |
charge utile |
Le nom d’hôte du compte |
Réponse :
Champ |
Type |
Description |
---|---|---|
token |
string |
Le jeton restreint. |
Open Channel¶
L’opération Open Channel
permet de créer ou d’ouvrir un nouveau canal par rapport à un canal ou à une table. Si le canal existe déjà, Snowflake bouscule le séquenceur client du canal et renvoie le dernier jeton de décalage engagé.
PUT /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}
Requête :
Attribut |
Obligatoire |
Composant |
Description |
---|---|---|---|
databaseName |
Oui |
URI |
Nom de la base de données, non sensible à la casse |
schemaName |
Oui |
URI |
Nom du schéma, non sensible à la casse |
pipeName |
Oui |
URI |
Nom du canal, non sensible à la casse |
channelName |
Oui |
URI |
Nom du canal que vous créez ou rouvrez, non sensible à la casse |
offset_token |
Non |
charge utile |
Chaîne utilisée pour définir un jeton de décalage lors de l’ouverture d’un canal. |
requestId |
Non |
Paramètre de requête |
UUID utilisé pour suivre les requêtes dans le système |
Réponse :
Champ |
Type |
Description |
---|---|---|
next_continuation_token |
Chaîne |
Un jeton géré par une API qui doit être utilisé dans la prochaine requête Append Rows. Le jeton relie une série d’appels, garantissant un flux de données contigu et dans l’ordre, et maintenant l’état de la session pour une livraison unique et exacte. |
channel_status |
Objet |
Un objet imbriqué avec les informations détaillées suivantes sur le canal :
|
Append Row(s)¶
L’opération Append Rows
insère un lot de lignes dans le canal donné.
POST /v2/streaming/data/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}/rows
Requête :
Attribut |
Obligatoire |
Composant |
Description |
---|---|---|---|
databaseName |
Oui |
URI |
Nom de la base de données, non sensible à la casse |
schemaName |
Oui |
URI |
Nom du schéma, non sensible à la casse |
pipeName |
Oui |
URI |
Canal, non sensible à la casse |
channelName |
Oui |
URI |
Nom du canal, non sensible à la casse |
continuationToken |
Oui |
Paramètre de requête |
Jeton de continuité de Snowflake, encapsule les séquenceurs de clients et de lignes |
offsetToken |
Non |
Paramètre de requête |
Chaîne utilisée pour l’ensemble des jetons de décalage par lot. |
rows |
Oui |
charge utile |
La charge utile réelle des données à ingérer au formatNDJSON. |
requestId |
Non |
Paramètre de requête |
UUID utilisé pour suivre les requêtes dans le système. |
Note
Le texte JSON dans la charge utile NDJSON doit être strictement conforme à la norme RFC 8259
. Chaque texte JSON doit être suivi d’un caractère de nouvelle ligne \n
(0x0A
). Vous pouvez également insérer un retour chariot. \r
(0x0D
) avant le caractère de nouvelle ligne.
Réponse :
Champ |
Type |
Description |
---|---|---|
next_continuation_token |
string |
Le jeton de continuation suivant provient de Snowflake, qui encapsule à la fois les séquenceurs de clients et de lignes. Il doit être utilisé pour l’insertion du lot suivant. |
Drop Channel¶
L’opération Drop Channel
dépose un canal sur le serveur avec ses métadonnées.
DELETE /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}/channels/{channelName}
Requête :
Attribut |
Obligatoire |
Composant |
Description |
---|---|---|---|
databaseName |
Oui |
URI |
Nom de la base de données, non sensible à la casse |
schemaName |
Oui |
URI |
Nom du schéma, non sensible à la casse |
pipeOrTableName |
Oui |
URI |
Nom du canal ou de la table, non sensible à la casse |
channelName |
Oui |
URI |
Nom du canal, non sensible à la casse |
requestId |
Non |
Paramètre de requête |
UUID utilisé pour suivre les requêtes dans le système |
Réponse :
Cette opération renvoie une charge utile sans réponse correcte spécifique autre que le code d’état HTTP.
Bulk Get Channel Status¶
L’opération Bulk Get Channel Status
renvoie le statut d’un canal pour un séquenceur client spécifique.
POST /v2/streaming/databases/{databaseName}/schemas/{schemaName}/pipes/{pipeName}:bulk-channel-status
Requête :
Attribut |
Obligatoire |
Composant |
Description |
---|---|---|---|
databaseName |
Oui |
URI |
Nom de la base de données, non sensible à la casse |
schemaName |
Oui |
URI |
Nom du schéma, non sensible à la casse |
pipeName |
Oui |
URI |
Nom du canal, non sensible à la casse |
channel_names |
Oui |
Charge utile |
Un tableau de noms de canaux de chaîne pour lesquels le client souhaite obtenir un état. Les noms sont sensibles à la casse. Par exemple, |
Réponse :
{
"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"
}
}
Note
Si aucun canal demandé n’est trouvé dans le service, la charge utile de réponse ne comporte pas d’entrée pour ce canal dans l’objet channel_statuses
.
Description des champs channel_statuses
pour chaque canal :
Champ |
Type |
Description |
---|---|---|
channel_status_code |
Chaîne |
Indique le statut du canal. |
last_committed_offset_token |
Chaîne |
Dernier jeton de décalage engagé |
database_name |
Chaîne |
Le nom de la base de données à laquelle le canal appartient. |
schema_name |
Chaîne |
Le nom du schéma auquel le canal appartient. |
nom_canal |
Chaîne |
Le nom du canal auquel le canal appartient. |
channel_name |
Chaîne |
Le nom du canal. |
rows_inserted |
int |
Un compte de toutes les lignes insérées dans ce canal. |
rows_parsed |
int |
Un compte de toutes les lignes analysées, mais pas nécessairement insérées dans ce canal. |
rows_errors |
int |
Un compte de toutes les lignes qui ont connu des erreurs lors de l’insertion dans ce canal et qui ont donc été rejetées. |
last_error_offset_upper_bound |
Chaîne |
La limite supérieure du dernier jeton de décalage de l’ensemble de lignes inséré correspondant à une erreur. Le jeton de décalage réel de l’ensemble de lignes contenant la dernière erreur est soit celui-ci, soit celui qui lui est strictement antérieur dans l’ordre d’ingestion des canaux. |
last_error_message |
Chaîne |
Un message lisible par l’être humain correspondant au dernier code d’erreur pour ce canal, avec les données sensibles du client expurgées. |
last_error_timestamp |
timestamp_utc |
Horodatage auquel la dernière erreur s’est produite. |
snowflake_avg_processing_latency_ms |
int |
Temps moyen de traitement e2e pour ce canal. |
Structure de la réponse d’erreur¶
Vous devriez voir la forme de charge utile JSON suivante pour les réponses d’erreur de toutes les APIs :
{
"error_code": "",
"message": ""
}