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 dietrustPolicy aus der Identitätsantwort als Vertrauensrichtlinie der Rolle. Sie akzeptiert nur unsere
Export-Identität und nur mit dem Sitzungsnamen Ihres Kontos:
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.
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üssel403 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:
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 Exportenhour=), sodass Athena, externe BigQuery-Tabellen und Spark sie als Spalten lesen. v1ist die Schemaversion (schemaVersiondes Exports). Eine Änderung, die eine Spalte bricht, erscheint alsv2daneben.- Ein Zeitfenster wird in Teile mit bis zu 100.000 Zeilen aufgeteilt, in zeitlicher Reihenfolge.
_manifest.jsonwird 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 inquerying_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.
errorenthält den Grund des Speicheranbieters; eine fehlende Berechtigung zeigt sich also zuerst hier. - Zeitfenster erneut senden.
POST /v1/exports/{id}/runs/{runId}/retrysendet ein Zeitfenster sofort: ein fehlgeschlagenes, nachdem Sie die Berechtigung korrigiert haben, oder ein geliefertes, das neu geschrieben werden soll. Es setztattemptszurück und gibt den Lauf alspendingzurück. Ein Lauf, der gerade geliefert wird, ergibt409 EXPORT_RUN_RUNNING. - Export-Zustand.
GET /v1/exportsundGET /v1/exports/{id}ergänzendeliveredThrough(das Ende des zuletzt gelieferten Zeitfensters),failedRunsundretryingRuns(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.