Zum Hauptinhalt springen
Jede Stunde oder jeden UTC-Tag schreibt ein Export die Ergebnisse des Zeitfensters als gzip-komprimiertes JSON Lines in einen Amazon-S3- oder Google-Cloud-Storage-Bucket oder lädt sie in eine Partition einer BigQuery-Tabelle. Ihr Data Warehouse liest sie wie jede andere Quelle, ganz ohne Polling-Schleife. Sie geben unserer Export-Identität Schreibrechte auf den Bucket oder das Dataset; Schlüssel oder Passwörter teilen Sie nie. Alle Schlüssel, Buckets, Konto-IDs und Rollen auf dieser Seite sind Platzhalter.

Was exportiert wird

Tasks, die mit einem beliebigen Schlüssel des Kontos, aus dem Playground oder von Monitoren gesendet wurden, sind alle enthalten. Ein Zeitfenster enthält genau die Zeilen, deren Zeitpunkt in [windowStart, windowEnd) liegt. Lieferzeitpunkt. Ein Zeitfenster ist 10 Minuten nach seinem Ende fällig, damit an der Grenze abgerechnete Gebühren enthalten sind. Fällige Zeitfenster holt ein Job ab, der alle 15 Minuten läuft; die Lieferung beginnt daher normalerweise 10 bis 25 Minuten nach dem Ende des Zeitfensters.

Export einrichten

1

Export-Identität abrufen

accountKey benennt Ihren Ordner und Ihre Tabellen. Jeder Pfad und jede Tabelle, die wir schreiben, trägt ihn, sodass mehrere querying.ai-Konten einen Bucket oder ein Dataset teilen können und jedes nur seine eigenen Dateien schreibt. Berechtigen Sie die Identität aus Ihrer Antwort, nicht den Platzhalter oben.
2

Zugriff gewähren

Gewähren Sie der Identität Zugriff auf Ihr Ziel. Siehe Zugriff gewähren für S3, Cloud Storage und BigQuery.
3

Export erstellen

POST /v1/exports prüft die Berechtigung und speichert den Export. Siehe Export erstellen.
4

Erste Lieferung beobachten

GET /v1/exports/{id}/runs listet jedes Zeitfenster und seinen Status. Siehe Lieferverlauf.

Zugriff gewähren

Amazon S3

Legen Sie in Ihrem AWS-Konto eine IAM-Rolle an, die unsere Google-Identität übernehmen kann. Verwenden Sie die trustPolicy aus der Identitätsantwort als Vertrauensrichtlinie der Rolle. Sie akzeptiert nur unsere Export-Identität und nur mit dem Sitzungsnamen Ihres Kontos:
Hängen Sie eine Berechtigungsrichtlinie an, mit der die Rolle unter Ihrem Präfix schreiben darf:
Verschlüsselt der Bucket mit einem kundenverwalteten KMS-Schlüssel, erlauben Sie zusätzlich kms:GenerateDataKey für diesen Schlüssel.

Google Cloud Storage

Weisen Sie dem Export-Dienstkonto Storage Object User (roles/storage.objectUser) für den Bucket zu. Damit legt es die Dateien an und ersetzt sie, wenn ein Zeitfenster erneut gesendet wird.
Um die Berechtigung auf Ihren Ordner zu beschränken, fügen Sie eine IAM-Bedingung auf resource.name.startsWith("projects/_/buckets/acme-geo/objects/querying/acct_3f9a1c2b7d4e/") hinzu.

BigQuery

Weisen Sie dem Export-Dienstkonto BigQuery Data Editor (roles/bigquery.dataEditor) für das Dataset zu. Die Ladejobs laufen in unserem eigenen Projekt, das Laden kostet Sie also nichts; Sie zahlen nur für Speicher und die Abfragen, die Sie ausführen.

Export erstellen

Verwenden Sie einen API-Schlüssel ohne Engine-Beschränkung: Ein Export enthält jedes Ergebnis des Kontos, daher erhält ein auf einige Engines beschränkter Schlüssel 403 KEY_SCOPE.
Vor dem Speichern prüft der Export die Berechtigung. Für S3 und Cloud Storage schreibt er <prefix><accountKey>/_querying/connection-check.json; für BigQuery liest er das Dataset und speichert dessen Standort. Schlägt die Prüfung fehl, wird nichts gespeichert. Ein Konto kann bis zu 10 Exporte haben. Die Antwort ist 201 mit dem Export:
Für S3 und Cloud Storage gibt destination die Bucket-Einstellungen zurück und ergänzt path, den Ordner, in dem Ihre Dateien landen, etwa s3://acme-geo/querying/acct_3f9a1c2b7d4e/ oder gs://acme-geo/querying/acct_3f9a1c2b7d4e/. nextWindowStart ist der Beginn des nächsten zu planenden Zeitfensters.

Fehler

Dateien und Tabellen

Dateien in S3 und Cloud Storage

  • Die Verzeichnisse folgen der Hive-Partitionierung (dt= und bei stündlichen Exporten hour=), sodass Athena, externe BigQuery-Tabellen und Spark sie als Spalten lesen.
  • v1 ist die Schemaversion (schemaVersion des Exports). Eine Änderung, die eine Spalte bricht, erscheint als v2 daneben.
  • Ein Zeitfenster wird in Teile mit bis zu 100.000 Zeilen aufgeteilt, in zeitlicher Reihenfolge.
  • _manifest.json wird zuletzt geschrieben. Laden Sie ein Zeitfenster, sobald sein Manifest existiert, und lesen Sie die Liste der Teile daraus:
rows im Manifest entspricht der Zeilenzahl seiner Teile und dem rows des Laufs im Lieferverlauf. Dateinamen hängen nur vom Zeitfenster ab, daher ersetzt ein erneut gesendetes Zeitfenster dieselben Objekte.

BigQuery-Tabellen

BigQuery-Exporte laden in querying_tasks_v1_<accountKey> und querying_monitor_results_v1_<accountKey>, die beim ersten Laden angelegt und nach completedAt bzw. ranAt partitioniert werden (nach Tag, bei stündlichen Exporten nach Stunde). Jedes Zeitfenster ersetzt seine eigene Partition, daher verdoppelt sich ein erneut gesendetes Zeitfenster nie. payload, response, sources und scoringContext sind JSON-Spalten:

Zeilenschema (v1)

tasks

monitor_results

Lieferverlauf

Jedes Zeitfenster jedes Datensatzes ist ein Lauf. Listen Sie sie auf, neueste zuerst:
Filtern Sie mit status, data (tasks oder monitor_results) und limit (1–200, Standard 50); geben Sie nextCursor als cursor zurück, um die nächste Seite zu erhalten.
  • Automatische Wiederholungen. Ein fehlgeschlagener Versuch wird nach 15 Minuten wiederholt, danach mit sich verdoppelnder Wartezeit bis zu 12 Stunden, insgesamt acht Versuche. error enthält den Grund des Speicheranbieters; eine fehlende Berechtigung zeigt sich also zuerst hier.
  • Zeitfenster erneut senden. POST /v1/exports/{id}/runs/{runId}/retry sendet ein Zeitfenster sofort: ein fehlgeschlagenes, nachdem Sie die Berechtigung korrigiert haben, oder ein geliefertes, das neu geschrieben werden soll. Es setzt attempts zurück und gibt den Lauf als pending zurück. Ein Lauf, der gerade geliefert wird, ergibt 409 EXPORT_RUN_RUNNING.
  • Export-Zustand. GET /v1/exports und GET /v1/exports/{id} ergänzen deliveredThrough (das Ende des zuletzt gelieferten Zeitfensters), failedRuns und retryingRuns (wartende Läufe, die bereits mindestens einmal fehlgeschlagen sind).

Pausieren, fortsetzen und löschen

  • PATCH /v1/exports/{id} mit {"enabled": false} pausiert einen Export. {"enabled": true} setzt ihn fort und holt die verpassten Zeitfenster nach, bis zu 30 Tage zurück.
  • DELETE /v1/exports/{id} beendet den Export. Bereits gelieferte Dateien und Partitionen bleiben in Ihrem Speicher.
  • Ziel, Intervall und Datensätze lassen sich nicht ändern. Erstellen Sie einen neuen Export und löschen Sie den alten.

Endpunkte

Ein Export, der Ihnen nicht gehört, ergibt 404 NOT_FOUND.