Ejecuta trabajos de manera programática

Para ejecutar un trabajo de BigQuery de manera programática mediante API de REST o bibliotecas cliente, debes hacer lo siguiente:

  1. Llama al método jobs.insert mediante un ID de trabajo único generado por tu código de cliente.
  2. De manera periódica, solicita el recurso de trabajo y examina la propiedad de estado para saber cuándo se completa el trabajo.
  3. Comprueba si el trabajo finalizó de forma correcta.

Permisos necesarios

Para ejecutar trabajos de BigQuery, otorga permisos bigquery.jobs.create a la cuenta de servicio o usuario que se usó para enviar el trabajo o también otórgale a tu cuenta una función de IAM predefinida a nivel de proyecto que incluye los permisos bigquery.jobs.create. Las siguientes funciones de IAM predefinidas incluyen los permisos bigquery.jobs.create:

Para obtener más información sobre los permisos y las funciones de IAM en BigQuery, consulta Control de acceso.

Ejecuta trabajos

Para ejecutar un trabajo de manera programática, haz lo siguiente:

  1. Comienza el trabajo mediante una llamada al método jobs.insert. Cuando llamas al método jobs.insert, incluye una representación del recurso de trabajo que contenga lo siguiente:

    • Tu ubicación en la propiedad location en la sección jobReference
    • El ID de trabajo que generó tu código de cliente. El servidor genera un ID de trabajo para ti si lo omites, pero se recomienda generar el ID de trabajo del lado del cliente a fin de permitir el reintento confiable de la llamada jobs.insert

      Por ejemplo:

      {
        "jobReference": {
          "projectId": "my_project",
          "jobId": "job_123",
          “location”: “asia-northeast1”
        },
        "configuration":
        {
          // ..
        },
      }
      

  2. En la sección configuration del recurso de trabajo, incluye una propiedad secundaria que especifique el tipo de trabajo carga, consulta, extracción o copia.

  3. Después de llamar al método jobs.insert, verifica el estado del trabajo mediante una llamada jobs.get con el ID de trabajo y la ubicación, y verifica el valor status.state para conocer el estado del trabajo. Cuando status.state es DONE, el trabajo dejó de ejecutarse; sin embargo, un estado DONE solo significa que el trabajo ya no se ejecuta, no que este trabajo se completó de forma correcta.

  4. Comprueba si el trabajo se realizó de forma correcta. Si el trabajo tiene una propiedad errorResult, significa que el trabajo falló. La propiedad status.errorResult contiene información que describe qué salió mal en el trabajo con errores. Si status.errorResult está ausente, el trabajo se completó de forma correcta, aunque puede haber algunos errores no fatales, como problemas cuando se importan algunas filas. Los errores no fatales se muestran en la lista status.errors del trabajo.

Genera un ID de trabajo

Se recomienda generar un ID de trabajo mediante tu código de cliente y envía ese ID de trabajo cuando llames a jobs.insert. Si llamas a jobs.insert sin especificar un ID de trabajo, BigQuery creará uno para ti, pero no podrás verificar el estado de ese trabajo hasta que se muestre la llamada. Además, puede ser difícil saber si el trabajo se insertó con éxito. Si usas tu propio ID de trabajo, puedes verificar su estado en cualquier momento y puedes volver a intentarlo con el mismo ID de trabajo para asegurarte de que el trabajo se inicie exactamente una vez.

El ID de trabajo es una string que consta de letras (a-z, A-Z), números (0-9), guiones bajos (_) o guiones (-) con una longitud máxima de 1,024 caracteres. Los ID de trabajo deben ser únicos en un proyecto.

Un enfoque común para generar un ID de trabajo único es usar un a prefijo legible y un sufijo que consta de una marca de tiempo o un GUID. Por ejemplo: daily_import_job_1447971251.

Se puede encontrar un ejemplo de un método que genera GUID en el módulo UUID de Python. Para obtener un ejemplo del uso del método uuid4() de Python con jobs.insert, consulta Carga datos desde Cloud Storage.

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.