Passer au contenu principal
Chaque heure ou chaque jour UTC, un export écrit les résultats de la fenêtre en JSON Lines compressé gzip dans un bucket Amazon S3 ou Google Cloud Storage, ou les charge dans une partition d’une table BigQuery. Votre entrepôt de données les lit comme n’importe quelle autre source, sans boucle de polling. Vous accordez à notre identité d’export un droit d’écriture sur le bucket ou le dataset ; vous ne partagez jamais de clés ni de mots de passe. Les clés, buckets, identifiants de compte et rôles de cette page sont des exemples.

Ce qui est exporté

Les tâches envoyées avec n’importe quelle clé du compte, depuis le Playground et par les moniteurs sont toutes incluses. Une fenêtre contient exactement les lignes dont l’heure tombe dans [windowStart, windowEnd). Délai de livraison. Une fenêtre est due 10 minutes après sa fermeture, afin que les facturations réglées à la limite y figurent. Les fenêtres dues sont prises en charge par un job qui s’exécute toutes les 15 minutes : la livraison commence donc normalement 10 à 25 minutes après la fermeture de la fenêtre.

Configurer un export

1

Lire votre identité d’export

accountKey nomme votre dossier et vos tables. Chaque chemin et chaque table que nous écrivons le porte : plusieurs comptes querying.ai peuvent partager un bucket ou un dataset, et chacun n’écrit que ses propres fichiers. Autorisez l’identité que montre votre réponse, pas l’exemple ci-dessus.
2

Accorder l’accès

Accordez l’accès à votre destination à cette identité. Voir Accorder l’accès pour S3, Cloud Storage et BigQuery.
3

Créer l’export

POST /v1/exports vérifie l’autorisation et enregistre l’export. Voir Créer l’export.
4

Surveiller la première livraison

GET /v1/exports/{id}/runs liste chaque fenêtre et son statut. Voir Historique de livraison.

Accorder l’accès

Amazon S3

Créez dans votre compte AWS un rôle IAM que notre identité Google peut assumer. Utilisez le trustPolicy de la réponse d’identité comme politique d’approbation du rôle. Il n’accepte que notre identité d’export, et seulement avec le nom de session de votre compte :
Attachez une politique d’autorisation qui permet au rôle d’écrire sous votre préfixe :
Si le bucket chiffre avec une clé KMS gérée par le client, autorisez aussi kms:GenerateDataKey sur cette clé.

Google Cloud Storage

Accordez au compte de service d’export le rôle Storage Object User (roles/storage.objectUser) sur le bucket. Il crée les fichiers et les remplace quand une fenêtre est renvoyée.
Pour limiter l’accès à votre dossier, ajoutez une condition IAM sur resource.name.startsWith("projects/_/buckets/acme-geo/objects/querying/acct_3f9a1c2b7d4e/").

BigQuery

Accordez au compte de service d’export le rôle BigQuery Data Editor (roles/bigquery.dataEditor) sur le dataset. Nous exécutons les jobs de chargement dans notre propre projet : le chargement ne vous coûte rien, vous ne payez que le stockage et vos requêtes.

Créer l’export

Utilisez une clé d’API sans restriction de moteurs : un export transporte tous les résultats du compte, donc une clé limitée à certains moteurs reçoit 403 KEY_SCOPE.
Avant d’enregistrer, l’export vérifie l’autorisation. Pour S3 et Cloud Storage, il écrit <prefix><accountKey>/_querying/connection-check.json ; pour BigQuery, il lit le dataset et enregistre sa localisation. Si la vérification échoue, rien n’est enregistré. Un compte peut avoir jusqu’à 10 exports. La réponse est 201 avec l’export :
Pour S3 et Cloud Storage, destination reprend les réglages du bucket et ajoute path, le dossier où arrivent vos fichiers, par exemple s3://acme-geo/querying/acct_3f9a1c2b7d4e/ ou gs://acme-geo/querying/acct_3f9a1c2b7d4e/. nextWindowStart est le début de la prochaine fenêtre à planifier.

Erreurs

Fichiers et tables

Fichiers dans S3 et Cloud Storage

  • Les répertoires suivent le partitionnement Hive (dt=, et hour= pour les exports horaires) : Athena, les tables externes BigQuery et Spark les lisent comme des colonnes.
  • v1 est la version du schéma (schemaVersion de l’export). Un changement qui casse une colonne est publié en v2 à côté.
  • Une fenêtre est découpée en parties de 100 000 lignes au plus, dans l’ordre chronologique.
  • _manifest.json est écrit en dernier. Chargez une fenêtre dès que son manifeste existe et lisez-y la liste des parties :
rows dans le manifeste est égal au nombre de lignes de ses parties et au rows de l’exécution dans l’historique de livraison. Les noms de fichiers ne dépendent que de la fenêtre : une fenêtre renvoyée remplace les mêmes objets.

Tables BigQuery

Les exports BigQuery chargent dans querying_tasks_v1_<accountKey> et querying_monitor_results_v1_<accountKey>, créées au premier chargement et partitionnées par completedAt ou ranAt (par jour, ou par heure pour les exports horaires). Chaque fenêtre remplace sa propre partition : une fenêtre renvoyée n’est jamais dupliquée. payload, response, sources et scoringContext sont des colonnes JSON :

Schéma des lignes (v1)

tasks

monitor_results

Historique de livraison

Chaque fenêtre de chaque jeu de données est une exécution. Listez-les de la plus récente à la plus ancienne :
Filtrez avec status, data (tasks ou monitor_results) et limit (1–200, 50 par défaut) ; renvoyez nextCursor comme cursor pour la page suivante.
  • Nouvelles tentatives automatiques. Une tentative échouée est relancée après 15 minutes, puis le délai double jusqu’à 12 heures, huit tentatives en tout. error contient la raison donnée par le fournisseur de stockage : une autorisation manquante apparaît d’abord ici.
  • Renvoyer une fenêtre. POST /v1/exports/{id}/runs/{runId}/retry envoie une fenêtre immédiatement : une fenêtre échouée après correction de l’accès, ou une fenêtre livrée que vous voulez réécrire. Il remet attempts à zéro et renvoie l’exécution en pending. Une exécution en cours de livraison renvoie 409 EXPORT_RUN_RUNNING.
  • État de l’export. GET /v1/exports et GET /v1/exports/{id} ajoutent deliveredThrough (la fin de la dernière fenêtre livrée), failedRuns et retryingRuns (exécutions en attente qui ont déjà échoué au moins une fois).

Suspendre, reprendre et supprimer

  • PATCH /v1/exports/{id} avec {"enabled": false} suspend un export. {"enabled": true} le reprend et rattrape les fenêtres manquées, jusqu’à 30 jours en arrière.
  • DELETE /v1/exports/{id} arrête l’export. Les fichiers et partitions déjà livrés restent dans votre stockage.
  • La destination, la fréquence et les jeux de données ne peuvent pas changer. Créez un nouvel export et supprimez l’ancien.

Endpoints

Un export qui ne vous appartient pas renvoie 404 NOT_FOUND.