Documentação Técnica

Salvar Definição

Este método permite a inserção de um arquivo com um lote (batch) de registros para serem consultados na fila de processamento da Plataforma de Dados.

Funcionamento

Esse método recebe como entrada os parâmetros necessários para a consulta de um lote de registros: o arquivo com os registros que devem ser processados, a API que deve ser consultada, o formato do arquivo de saída e assim por diante. Esses elementos (descritos em mais detalhes na secção abaixo) são utilizados para inserir o job na fila de processamento e, posteriormente, para a execução das consultas.

O arquivo de entrada, que contém os registros à serem processados, deve ser disponibilizado em formato TXT (texto), com um registro por linha. Se o registro tiver mais de uma coluna, as colunas devem ser separadas por um delimitador. Para arquivos sendo trocados via HTTP ou HTTPS, o arquivo de entrada deve estar disponível através de um link público, que permita o download do arquivo pelo processo de execução, do contrário a execução em batch irá falhar.

Para arquivos disponibilizados através de Buckets S3, as credenciais de acesso fornecidas na chamada da API devem ter permissão para pegar e colocar objetos no bucket e identificar a região do bucket. Ou seja, para esse acesso, precisamos de permissão para os métodos: GetBucketLocation, GetObject e PutObject.

É possível se utilizar de todos os mecanismos de consulta presentes na API convencional da Plataforma de Dados, seja para consulta de pessoas, empresas ou validações, combinados com os elementos dos arquivos de entrada através da definição de um template de consulta. Isso inclui a execução de consultas através de chaves alternativas, o envio de datas de referência para a execução de back tests e muito mais.

Além dos mecanismos disponíveis na API, o processamento em Batch possui também o suporte a retentativa de consultas. O objetivo desse mecanismo é apoiar processamentos de arquivos muito grandes ou que dependem de fontes de informação instáveis, possibilitando que consultas com erro sejam reexecutadas sem a necessidade de uma submissão do arquivo de entrada, simplificando o trabalho dos clientes. É importante lembrar que você nunca é cobrado por consultas com erro, então a retentativa não implica em custos adicionais para os clientes. As consultas são retentadas em duas situações:


  • Houve alguma falha de conexão ou de timeout de resposta na chamada da API de consultas; ou;
  • Todos os datasets consultados retornaram um código de erro menor ou igual à -1200 (ver a tabela de códigos de erro para detalhes).

Os parâmetros opcionais utilizados para a retentativa de consultas estão descritos na tabela abaixo.

O arquivo de saída é disponibilizado através de um link na área de transferência de arquivos da BigData Corp, que fica no endereço https://files.bigdatacorp.com.br/go, e estão disponíveis para download por até 30 dias após a execução do job. Alternativamente, se for utilizado o método de troca de arquivos via Buckets S3, o arquivo de saída é depositado no repositório definido pelo cliente na entrada.

ATENÇÃO: Após a chamada à esse método, o arquivo será validado e carregado para processamento, mas o processo de consulta só terá início quando for chamado o método StartJobExecution, descrito abaixo.

Parâmetros de Entrada

A tabela a seguir descreve os parâmetros de entrada deste método, indicando se são obrigatórios ou não, e os valores possíveis para os campos com valores pré-definidos.

CampoObrigatório?Valores PossíveisDescrição
InputFileUrlSimURL do arquivo de entradaUma URL válida e accessível pelo processo. Veja abaixo como formatar esse parâmetro para diferentes mecanismos de transferência.
OutputFileUrlNão.URL do arquivo de saídaVeja abaixo como formatar esse parâmetro para diferentes mecanismos de transferência.
OutputFilePasswordNão.Qualquer stringA senha que será requerida para acessar os arquivos de saída.
InputFileDelimiterNão. O carácter TAB ("\t") é o defaultQualquer stringO delimitador das colunas do arquivo de entrada
InputFileHasHeaderNão. false é o defaulttrue ou falseIndica se o arquivo de entrada tem um cabeçalho
OutputFileFormatNão. text é o defaulttext ou jsonIndica o formato do arquivo de saída do processamento
OutputFileDelimiterNão. O carácter TAB ("\t") é o defaultQualquer stringDelimitador de colunas utilizado no arquivo de saída. Ignorado quando o formato da saída é json
OutputRemoveEmptyColumnsNão. false é o defaulttrue ou falseIndica se colunas sem valores preenchidos devem ser removidas da saída.
InputKeysHeaderSimQualquer stringTexto que vai ser utilizado no cabeçalho do arquivo de saída para os valores de entrada que são copiados
InputFileSampleRateNão. -1 é o default-1 ou número de 0.01 a 1Para valores diferentes de -1, indica o percentual do arquivo de entrada que deve ser selecionado como amostra para execução
APINameSimPeople, Companies ou ValidationsA API que deve ser acionada pelo processo
DatasetsNãoLista de datasets, separados por vírgulaOs nomes dos datasets que devem ser consultados, da mesma forma que são preenchidos em uma consulta. Caso os datasets não estejam preenchidos, deve ser preenchido o campo de View (abaixo)
ViewNãoQualquer view já definida no sistemaA View que deve ser utilizada para consulta. Deve ser preenchido apenas no caso do campo Datasets (acima) estar vazio.
QueryTemplateSimUm template indicando como os parâmetros de consulta devem ser enviadosCada coluna no arquivo de entrada é representada por , aonde x é o número (començando em zero) da coluna desejada. Para um arquivo com apenas uma coluna, com os documentos, seria doc{{0}}
MaxQueryRetriesNãoQualquer número inteiro maior que 0Utilizado apenas na configuração de re-tentativas de consultas. Define a quantidade de vezes que a consulta à um determinado CPF ou CNPJ deve ser re-tentada antes do retorno ser tratado como erro.
QueryRetryBackoffNãoQualquer número inteiro maior que 0Utilizado apenas na configuração de re-tentativas de consultas. Define o tempo, em segundos, que o processo Batch irá esperar antes de tentar consultar novamente o CPF ou CNPJ que retornou com erro. É extremamente útil para consultas que apresentam problemas de disponibilidade ou demora de processamento, como as consultas on-demand envolvendo sites governamentais.
CopyEmailsNão. Lista vazia é o defaultUma lista de emailsOs e-mails que devem receber cópias das mensagens de execução do processo, além do e-mail do usuário
CopyPhonesNão. Lista vazia é o defaultUma lista de telefonesOs telefones que devem receber os avisos das etapas de execução do processo por SMS, além do e-mail do usuário. Os telefones devem ser informados no formato (ex: 5511999999999), e são aceitos apenas telefones celulares.
CopyHooksNão. Lista vazia é o defaultUma lista de objetos json com detalhesOs objetos JSON devem conter a URL aonde a notificação de execução do processo irá ser postada, e, caso exista, um "segredo" que deve ser postado junto com a notificação. Exemplo: [ { Url: "https://myurl.com", PostbackSecret: "my-postback-secret"} ]. Podem ser incluídas tantas URLs de notificação quanto o usuário queira
InputFileExpectedNumberOfRecordsNãoUm número inteiro maior do que zeroQuando esse parâmetro é informado, a quantidade de registros carregados do arquivo de entrada é verificada e, caso seja diferente do número informado, o processamento fica desabilitado e um erro é reportado para o usuário
AutomaticallyStartQueryingNão. false é o defaulttrue ou falseFlag que indica ao sistema que o processamento deve ser iniciado assim que a carga dos registros estiver finalizada, dispensando a chamada de StartJobExecution. Recomendamos seu uso apenas por clientes com experiência na execução desse tipo de processo
APIResultLimitNão. 1 é o defaultQualquer número inteiro maior que 0Esse parâmetro é utilizado para processamentos aonde as consultas estão sendo realizadas através de chaves alternativas, para permitir o controle da quantidade de resultados retornados por chave

Formatação das URLs dos arquivos de entrada e saída do processo

A sintaxe abaixo se aplica aos campos InputFileURL e OutputFileUrl, e é utilizada para especificar qual será o mecanismo de transferência dos arquivos, além dos parâmetros necessários para que a transferência seja realizada com sucesso. Listamos abaixo os mecanismos de transferência suportados, e a sintaxe para cada um dos mesmos:


  • Transferência via HTTP ou HTTPS: Nesse tipo de transferência, o arquivo de entrada será baixado a partir do link disponibilizado, e o arquivo de saída será gerado em uma área de transferência da BigDataCorp para download pelo cliente. O exemplo a seguir ilustra como preencher os parâmetros necessários:

    {
      "InputFileUrl": "web{https://www.example.com/mysamplefile.txt}",
      "InputKeysHeader" : "Documento",
      "APIName": "people",
      "Datasets": "basic_data",
      "QueryTemplate": "doc{{0}}"
    }
    
  • Transferência via S3 (serviço de armazenamento de dados da AWS): Nesse tipo de transferência, o cliente pode especificar um endereço de retorno independente do endereço de entrada. Caso o parâmetro de URL do arquivo de saída não seja preenchido, o arquivo de resultados será colocado no mesmo bucket do arquivo de entrada. O exemplo a seguir ilustra como preencher os parâmetros necessários:

    {
      "InputFileUrl": "file{s3://aws_access_key:aws_secret_key@bucket_name}, remotefilepath{path_to_file_in_s3}",
      "OutputFileUrl": "file{s3://aws_access_key:aws_secret_key@bucket_name}, remotefilepath{path_for_file_to_be_saved_at}",
      "InputKeysHeader" : "Documento",
      "InputFileDelimiter": "	",
      "InputFileHasHeader": false,
      "OutputFileDelimiter": "	",
      "APIName": "people",
      "Datasets": "basic_data",
      "QueryTemplate": "doc{{0}}"
    }
    
  • Transferência via FTP: Nesse modelo de transferência, o endereço de entrada e saída podem ser completamente diferentes. Os parâmetros entre parênteses "()" são opcionais, e, se não forem preenchidos, assumirã valores default. O exemplo a seguir ilustra como preencher os parâmetros necessários:

    {
      "InputFileUrl": "file{ftp://user(:password)@dns(:port)}, remotefilepath{path_to_file_in_ftp}",
      "OutputFileUrl": "file{ftp://user(:password)@dns(:port)}, remotefilepath{path_for_file_to_be_saved_at}",
      "InputKeysHeader" : "Documento",
      "InputFileDelimiter": "	",
      "InputFileHasHeader": false,
      "OutputFileDelimiter": "	",
      "APIName": "people",
      "Datasets": "basic_data",
      "QueryTemplate": "doc{{0}}"
    }
    
  • Transferência via SFTP: Nesse modelo de transferência, o endereço de entrada e saída podem ser completamente diferentes. Os parâmetros entre parênteses "()" são opcionais, e, se não forem preenchidos, assumirã valores default. O exemplo a seguir ilustra como preencher os parâmetros necessários:

    {
      "InputFileUrl": "file{sftp://user(:password)@dns(:port)}, remotefilepath{path_to_file_in_sftp}",
      "OutputFileUrl": "file{sftp://user(:password)@dns(:port)}, remotefilepath{path_for_file_to_be_saved_at}",
      "InputKeysHeader" : "Documento",
      "InputFileDelimiter": "	",
      "InputFileHasHeader": false,
      "OutputFileDelimiter": "	",
      "APIName": "people",
      "Datasets": "basic_data",
      "QueryTemplate": "doc{{0}}"
    }
    

IMPORTANTE! Os campos de InputFileUrl e OutputFileUrl são independentes. Pode ser especificado um arquivo de entrada presente no S3 e um arquivo de saída postado em uma pasta de SFTP, ou qualquer outra combinação dos mecanismos listados acima.

Uma senha será adicionada a um arquivo de retorno dependendo do tipo de ambiente de destino. Para ambientes internos, como S3, FTP ou SFTP, onde o arquivo é armazenado dentro do ambiente corporativo, não é adicionada uma senha ao arquivo. No entanto, para ambientes externos, acessíveis publicamente via URL, uma senha gerada automaticamente é sempre incluída para garantir a segurança do arquivo.

Se preferível, é possível especificar a senha a ser adicionada a um arquivo por meio do campo 'OutputFilePassword' ao fazer uma requisição, permitindo assim que arquivos enviados para ambientes externos podem ter uma senha definida manualmente. Vale ressaltar que, caso o campo 'OutputFilePassword' seja incluído na requisição, mas esteja vazio, preenchido apenas com espaços ou nulo, a senha atribuída ao arquivo será gerada automaticamente.

Em todos os casos onde uma senha é aplicada ao arquivo, ela será enviado por e-mail ao endereço cadastrado do usuário e aos e-mails listados no campo CopyEmails, também presente no reques atual.

Retorno

O método retorna um código e mensagem de erro, caso algum problema tenha ocorrido. Do contrário, é retornado o identificador único do job, que pode ser utilizado para recuperar outras informações sobre o mesmo ou para cancelar sua execução (veja os outros métodos da API de Processamento em Lote).

A tabela a seguir descreve os campos do objeto de retorno desse método.

CampoDescrição
JobIdIdentificador do job criado
StatusCodeCódigo de resultado da chamada
StatusMessageMensagem descritiva de resultado da chamada
TotalExecutionTimeTempo total de execução da requisição no servidor
RequestTimestampData e hora do término da execução da requisição no servidor

Códigos de Status

A tabela a seguir descreve os possíveis códigos e mensagens de retorno.

CódigoMensagemDescrição
0OKExecução com sucesso
-1INVALID AUTHENTICATION PARAMETERSO token de acesso fornecido na entrada é inválido
-2BAD REQUEST FORMATO request enviado não está bem formatado
-101INVALID INPUT FILE URLO link para o arquivo de entrada especificado não está funcional
-102INVALID OUTPUT FILE FORMATO formato de saída especificado está fora dos valores permitidos
-103INVALID SAMPLE RATEO sample rate definido está fora dos valores permitidos
-105INVALID API NAMEO nome da API que vai ser consultada pelo processo está fora dos valores permitidos
-106INVALID DATASETSO conjunto de datasets selecionado é inválido
-107INVALID QUERY TEMPLATEO template dos elementos de consulta definido é inválido
-108INVALID JOB IDO identificador do job passado na entrada é inválido
-109INVALID JOB STATUS FOR OPERATIONO job selecionado não pode ser pausado ou cancelado devido ao seu status atual
-1200UNEXPECTED ERROR. PLEASE CONTACT OUR SUPPORT TEAMOcorreu algum erro inesperado. Entre em contato com nossa equipe de atendimento

Exemplos

Exemplo de requisição para rodar a consulta do dataset de Dados Básicos de Pessoas para um arquivo de entrada com uma única coluna com os CPFs:

{
  "InputFileUrl": "web{https://www.example.com/mysamplefile.txt}",
  "InputKeysHeader" : "Documento",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "people",
  "Datasets": "basic_data",
  "QueryTemplate": "doc{{0}}"
}

Exemplo de requisição para consultar no modelo de backtest os dados básicos e e-mails de empresas para um arquivo de entrada com três colunas delimitadas por TAB: um id externo, o documento, e uma data de referência:

{
  "InputFileUrl": "web{https://www.example.com/mysamplefile.txt}",
  "InputFileDelimiter": "\t"
  "InputKeysHeader" : "Id_Externo\tDocumento\tData_Referencia",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "companies",
  "Datasets": "basic_data,emails",
  "QueryTemplate": "external_id{{0}},doc{{1}},referencedate{{2}}"
}

Exemplo de requisição para consultar, usando chaves alternativas, os datasets de dados básicos e telefones de pessoas, para um arquivo de entrada com duas colunas de entrada - nome e data de nascimento (no formato dia/mês/ano) - delimitadas por ponto-e-vírgula (";"):

{
  "InputFileUrl": "web{https://www.example.com/mysamplefile.txt}",
  "InputFileDelimiter": ";"
  "InputKeysHeader" : "Nome\tData_Nascimento",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "people",
  "Datasets": "basic_data,phones",
  "QueryTemplate": "name{{0}},birthdate{{1}},dateformat{dd/MM/yyyy}"
}

Exemplo de requisição para consultar o dataset on-demand de status na Receita Federal de CNPJs e retornar os resultados no formato JSON, para um arquivo com uma única coluna de entrada com os documentos, copiando um e-mail qualquer sobre o status de execução:

{
  "InputFileUrl": "web{https://www.example.com/mysamplefile.txt}",
  "OutputFileFormat": "json",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "companies",
  "Datasets": "ondemand_rf_status",
  "QueryTemplate": "doc{{0}}"
  "CopyEmails": ["[email protected]"],
}

Exemplo de requisição para rodar a consulta do dataset de Dados Básicos de Pessoas para um arquivo de entrada disponibilizado em um bucket do S3:

{
  "InputFileUrl": "file{s3://Sample_Access_Key:Sample_Secret_Key@Sample_Bucket}, remotefilepath{Sample_Folder/mysamplefile.txt}",
  "InputKeysHeader" : "Documento",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "people",
  "Datasets": "basic_data",
  "QueryTemplate": "doc{{0}}"
}

Exemplo de requisição para consultar uma view pré-definida no processo de Batch, ao invés de datasets, para um arquivo com uma única coluna de entrada com os documentos:

{
   "InputFileUrl": "file{s3://Sample_Access_Key:Sample_Secret_Key@Sample_Bucket}, remotefilepath{Sample_Folder/mysamplefile.txt}",
  "InputKeysHeader" : "Documento",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "people",
  "View": "minha_view_predefinida",
  "QueryTemplate": "doc{{0}}"
}

Exemplo de requisição com configuração de 2 retentativas para cada consulta realizada, com 30 segundos de espera entre cada consulta, para um arquivo com uma única coluna de entrada com os documentos:

{
  "InputFileUrl": "file{s3://Sample_Access_Key:Sample_Secret_Key@Sample_Bucket}, remotefilepath{Sample_Folder/mysamplefile.txt}",
  "InputKeysHeader" : "Documento",
  "InputFileDelimiter": "	",
  "InputFileHasHeader": false,
  "OutputFileDelimiter": "	",
  "APIName": "people",
  "Datasets": "basic_data",
  "QueryTemplate": "doc{{0}}",
  "MaxQueryRetries": 2,
  "QueryRetryBackoff": 30
}

BODY raw

{
  "InputFileUrl": "[URL do seu arquivo de entrada]",
  "InputFileDelimiter": "\t",
  "InputFileHasHeader": false,
  "OutputFileFormat": "txt",
  "OutputFileDelimiter": "\t",
  "OutputRemoveEmptyColumns": false,
  "InputKeysHeader" : "Documento",
  "InputFileSampleRate": -1,
  "CopyEmails": ["[email protected]","[email protected]"],
  "APIName": "companies",
  "Datasets": "basic_data,addresses_extended,phones_extended,emails_extended,activity_indicators,relationships,related_people_phones,related_people_emails",
  "QueryTemplate": "doc{{0}}"
}
Language
Authorization
Click Try It! to start a request and see the response here!