Saltar al contenido principal
Cada hora o cada día UTC, una exportación escribe los resultados de la ventana como JSON Lines comprimido con gzip en un bucket de Amazon S3 o Google Cloud Storage, o los carga en una partición de una tabla de BigQuery. Tu data warehouse los lee como cualquier otra fuente, sin bucle de sondeo. Concedes a nuestra identidad de exportación permiso de escritura en el bucket o el dataset; nunca compartes claves ni contraseñas. Todas las claves, buckets, IDs de cuenta y roles de esta página son ejemplos.

Qué se exporta

Se incluyen las tareas enviadas con cualquier clave de la cuenta, desde el Playground y por los monitores. Una ventana contiene exactamente las filas cuyo tiempo cae en [windowStart, windowEnd). Momento de la entrega. Una ventana vence 10 minutos después de cerrarse, para que incluya los cobros liquidados en el límite. Un proceso que se ejecuta cada 15 minutos recoge las ventanas vencidas, así que la entrega suele empezar entre 10 y 25 minutos después de que se cierre la ventana.

Configurar una exportación

1

Consulta tu identidad de exportación

accountKey da nombre a tu carpeta y a tus tablas. Todas las rutas y tablas que escribimos lo llevan, así que varias cuentas de querying.ai pueden compartir un bucket o dataset y cada una escribe solo sus propios archivos. Concede permiso a la identidad que muestra tu respuesta, no al ejemplo de arriba.
2

Concede acceso

Concede a la identidad acceso a tu destino. Consulta Conceder acceso para S3, Cloud Storage y BigQuery.
3

Crea la exportación

POST /v1/exports comprueba el permiso y guarda la exportación. Consulta Crear la exportación.
4

Sigue la primera entrega

GET /v1/exports/{id}/runs lista cada ventana y su estado. Consulta Historial de entregas.

Conceder acceso

Amazon S3

Crea en tu cuenta de AWS un rol de IAM que nuestra identidad de Google pueda asumir. Usa el trustPolicy de la respuesta de identidad como política de confianza del rol. Acepta solo nuestra identidad de exportación y solo con el nombre de sesión de tu cuenta:
Adjunta una política de permisos que deje al rol escribir bajo tu prefijo:
Si el bucket cifra con una clave KMS administrada por el cliente, permite también kms:GenerateDataKey sobre esa clave.

Google Cloud Storage

Concede a la cuenta de servicio de exportación Storage Object User (roles/storage.objectUser) en el bucket. Crea los archivos y los reemplaza cuando una ventana se vuelve a enviar.
Para limitar el permiso a tu carpeta, añade una condición de IAM sobre resource.name.startsWith("projects/_/buckets/acme-geo/objects/querying/acct_3f9a1c2b7d4e/").

BigQuery

Concede a la cuenta de servicio de exportación BigQuery Data Editor (roles/bigquery.dataEditor) en el dataset. Ejecutamos los trabajos de carga en nuestro propio proyecto, así que cargar no te cuesta nada; solo pagas el almacenamiento y las consultas que ejecutes.

Crear la exportación

Usa una clave de API sin restricción de motores: una exportación lleva todos los resultados de la cuenta, así que una clave limitada a algunos motores recibe 403 KEY_SCOPE.
Antes de guardarla, la exportación comprueba el permiso. En S3 y Cloud Storage escribe <prefix><accountKey>/_querying/connection-check.json; en BigQuery lee el dataset y registra su ubicación. Si la comprobación falla, no se guarda nada. Una cuenta puede tener hasta 10 exportaciones. La respuesta es 201 con la exportación:
En S3 y Cloud Storage, destination repite la configuración del bucket y añade path, la carpeta donde llegan tus archivos, como s3://acme-geo/querying/acct_3f9a1c2b7d4e/ o gs://acme-geo/querying/acct_3f9a1c2b7d4e/. nextWindowStart es el inicio de la siguiente ventana que se planificará.

Errores

Archivos y tablas

Archivos en S3 y Cloud Storage

  • Los directorios siguen la partición de Hive (dt=, y hour= en exportaciones por hora), así que Athena, las tablas externas de BigQuery y Spark los leen como columnas.
  • v1 es la versión del esquema (schemaVersion en la exportación). Un cambio que rompa una columna se publica como v2 a su lado.
  • Una ventana se divide en partes de hasta 100.000 filas, en orden temporal.
  • _manifest.json se escribe al final. Carga una ventana cuando exista su manifiesto y toma de él la lista de partes:
rows del manifiesto coincide con el número de líneas de sus partes y con el rows de la ejecución en el historial de entregas. Los nombres de archivo dependen solo de la ventana, así que una ventana reenviada reemplaza los mismos objetos.

Tablas de BigQuery

Las exportaciones a BigQuery cargan en querying_tasks_v1_<accountKey> y querying_monitor_results_v1_<accountKey>, creadas en la primera carga y particionadas por completedAt o ranAt (por día, o por hora en exportaciones por hora). Cada ventana reemplaza su propia partición, así que una ventana reenviada nunca se duplica. payload, response, sources y scoringContext son columnas JSON:

Esquema de filas (v1)

tasks

monitor_results

Historial de entregas

Cada ventana de cada conjunto de datos es una ejecución. Lístalas de la más reciente a la más antigua:
Filtra con status, data (tasks o monitor_results) y limit (1–200, por defecto 50); devuelve nextCursor como cursor para obtener la página siguiente.
  • Reintentos automáticos. Un intento fallido se reintenta a los 15 minutos y después con un intervalo que se duplica hasta 12 horas, ocho intentos en total. error contiene el motivo del proveedor de almacenamiento, así que un permiso que falta aparece aquí primero.
  • Volver a enviar una ventana. POST /v1/exports/{id}/runs/{runId}/retry envía una ventana ahora: una fallida después de corregir el permiso, o una entregada que quieres reescribir. Reinicia attempts y devuelve la ejecución como pending. Una ejecución que se está entregando devuelve 409 EXPORT_RUN_RUNNING.
  • Estado de la exportación. GET /v1/exports y GET /v1/exports/{id} añaden deliveredThrough (el final de la última ventana entregada), failedRuns y retryingRuns (ejecuciones pendientes que ya fallaron al menos una vez).

Pausar, reanudar y eliminar

  • PATCH /v1/exports/{id} con {"enabled": false} pausa una exportación. {"enabled": true} la reanuda y recupera las ventanas que se perdió, hasta 30 días atrás.
  • DELETE /v1/exports/{id} detiene la exportación. Los archivos y particiones ya entregados se quedan en tu almacenamiento.
  • El destino, la frecuencia y los conjuntos de datos no se pueden cambiar. Crea una exportación nueva y elimina la anterior.

Endpoints

Una exportación que no te pertenece devuelve 404 NOT_FOUND.