Como executar jobs de maneira programática

Para executar um job do BigQuery com programação usando a API REST ou as bibliotecas de cliente, siga estas etapas:

  1. Chame o método jobs.insert usando um ID do job exclusivo que é gerado pelo seu código de cliente.
  2. Solicite periodicamente o recurso do job e verifique a propriedade do status para saber quando o job for concluído.
  3. Verifique se o job foi concluído com sucesso.

Permissões exigidas

Para executar trabalhos do BigQuery, conceda permissões bigquery.jobs.create à conta de usuário ou serviço usada para enviar o job, ou conceda à conta um papel de IAM predefinido no nível do projeto, que inclua permissões de bigquery.jobs.create. Os seguintes papéis predefinidos de IAM incluem as permissões bigquery.jobs.create:

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Controle de acesso.

Como executar jobs

Para executar um job de maneira programática:

  1. Inicie o job chamando o método jobs.insert. Ao chamar o método jobs.insert, inclua uma representação do recurso do job que contenha estes elementos:

    • O local na propriedade location na seção jobReference.
    • O código do job gerado pelo código do cliente. O servidor gerará um código do job se você omiti-lo, mas a prática recomendada é gerar o código do job no lado do cliente para permitir uma nova tentativa confiável da chamada jobs.insert.

      Por exemplo:

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

  2. Na seção configuration do recurso do job, inclua uma propriedade filha que especifique o tipo de job: carregar, consultar, extrair ou copiar.

  3. Depois de chamar o método jobs.insert, verifique o status do job chamando jobs.get com o código e o local do job. Depois, confira o valor status.state para saber o status dele. Quando status.state for DONE, a execução do job foi interrompida. No entanto, um status DONE não significa que o job foi concluído com sucesso, apenas que ele não está mais em execução.

  4. Verifique o sucesso do job. Se tiver uma propriedade status.errorResult, o job falhou. A propriedade status.errorResult contém informações que descrevem o que deu errado em um job com falha. Se status.errorResult estiver ausente, o job foi concluído com sucesso, mesmo que haja alguns erros não fatais, como problemas ao importar algumas linhas em um job de carregamento. Erros não fatais são retornados na lista status.errors do job.

Como gerar um código de job

Como prática recomendada, gere um código de job usando o código de cliente e envie esse código de job ao chamar jobs.insert. Quando jobs.insert é chamado sem especificar um código de job, esse código é criado pelo BigQuery. Entretanto, não é possível verificar o status desse job até o retorno da chamada. Também pode ser difícil informar se o job foi inserido com sucesso. Com um código de job próprio, é possível verificar o status dele a qualquer momento e tentar novamente com esse mesmo código para garantir que ele inicie exatamente uma vez.

O código de job é uma string que contém letras (a-z, A-Z), números (0-9), sublinhados (_) ou traços (-), com tamanho máximo de 1.024 caracteres. Os códigos de job precisam ser exclusivos em um projeto.

Uma abordagem comum para gerar um código de job exclusivo é usar um prefixo e um sufixo legíveis com um carimbo de data/hora ou um GUID. Por exemplo: daily_import_job_1447971251.

Um exemplo de um método para gerar GUIDs pode ser encontrado no módulo UUID do Python. Para ver um exemplo de como usar o método uuid4() do Python com jobs.insert, consulte Como carregar dados do Cloud Storage.

A seguir

  • Consulte Como executar consultas para um exemplo de código que inicie e pesquise um job de consulta.
  • Para mais informações sobre como criar uma representação de recurso do job, consulte a página Visão geral dos jobs na referência da API.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.