Skip to content

Erros comuns de validação⚓︎


Este documento segue, tanto quanto possível, a estrutura de classificação hierárquica por assunto e método de descrição abaixo:


Natureza/grupo do erro⚓︎

Título do erro⚓︎

Caso de uso

Item

Descrição sucinta

Exemplo copiado de mensagem de erro após frictionless validate na bash cell

Exemplo copiado de mensagem de erro de relatório online (github actions)

Print do arquivo e/ou pasta mostrando o erro

Solução proposta


1. Sobre os arquivos de metadados e seu conteúdo⚓︎

(inicio)

1.1. Sintaxe do datapackage.json:⚓︎

a. faltou abrir ou fechar algum campo com aspas, "", colchetes '[ ]' ou chaves '{ }'

Esse problema pode acontecer na inclusão ou edição de qualquer propriedade ou seu valor, como por exemplo:

  • edição do name, title, ou description, do conjunto ou dos resources;

  • nas propriedades das variáveis/colunas de cada resource (schema);

  • na inclusão de pastas para resource (i.e.: 'data/resource.csv'), schema.json, dialect.json, etc;

  • na inclusão de novo recurso;

  • na inclusão da propriedade owner_org; dentre outros ...

$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
=============  ===================================================================================================================================
code           message                                                          
=============  ===================================================================================================================================
package-error  The data package has an error: cannot extract metadata "datapackage.json" because "Expecting value: line 101 column 28 (char 3812)"
=============  ===================================================================================================================================

  • Solução: corrigir a sintaxe do arquivo datapackage.json na linha indicada pela mensagem de erro, utilizando o editor de texto ou o editor de arquivos do GitHub (que também podem fazer marcações visuais de erros de sintaxe).

b. faltou/sobrou alguma vírgula

Esse problema pode acontecer em diversas situações, tal qual exemplificado no caso de uso anterior.

$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
=============  ==========================================================================================================================================
code           message                                                          
=============  ==========================================================================================================================================
package-error  The data package has an error: cannot extract metadata "datapackage.json" because "Expecting ',' delimiter: line 96 column 11 (char 3621)"
=============  ==========================================================================================================================================

  • Solução: corrigir a sintaxe do arquivo datapackage.json na linha indicada pela mensagem de erro, utilizando o editor de texto ou o editor de arquivos do GitHub (que também podem fazer marcações visuais de erros de sintaxe).

1.2. Nome name do recurso contém caracteres fora da faixa permitida⚓︎

(inicio)

A especificação Frictionless não aceita espaços, letras maiúsculas ou caracteres especiais no valor deste campo:

$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
=============  ================================================================================================================================================================================================================
code           message                                                                                                                                          
=============  ================================================================================================================================================================================================================
package-error  The data package has an error: "'doa▒▒es-comodatos-amigo-estado-mg' does not match '^([-a-z0-9._/])+$'" at "resources/0/name" in metadata and at "properties/resources/items/properties/name/pattern" in profile
=============  ================================================================================================================================================================================================================

1.3. O caminho path incorreto⚓︎

(inicio)

a. onde se localizam os arquivos de dados:

$ frictionless validate datapackage.json
# -------
# invalid: doacoes-comodatos-amigo-estado-mg.csv
# -------

===  =====  ============  ==============================================================================================================================
row  field  code          message                                               
===  =====  ============  ==============================================================================================================================
            scheme-error  The data source could not be successfully loaded: [Errno 2] No such file or directory: 'doacoes-comodatos-amigo-estado-mg.csv'
===  =====  ============  ==============================================================================================================================

  • Solução: corrigir o valor da propriedade path incorporando o nome da pasta ou URL onde se localiza o recurso, ou corrigindo o nome do recurso, se for o caso.

b. onde se localizam os arquivos de metadados datapackage.json, o schema.json, ou o dialect.json

$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
============  =======================================================================================================================
code          message                                                           
============  =======================================================================================================================
schema-error  Schema is not valid: cannot extract metadata "schema.json" because "[Errno 2] No such file or directory: 'schema.json'"
============  =======================================================================================================================

  • Solução: corrigir o valor da propriedade path incorporando o nome da pasta ou URL onde se localiza o schema ou dialect, ou corrigindo seu nome, se for o caso.

2. Sobre os arquivos de dados e seu conteúdo⚓︎

(inicio)

2.1. Divergências de características dos dados no datapackage.json⚓︎

2.1.1. formatos de data

Observar se a estrutura física do dado está coerente com sua representação lógica no arquivo de metadados datapackage.json, ex:

  • AAAA/MM/DD (formato default para data na especificação Frictionless);

  • dd/mm/aaaa (formato usual no Brasil e como geralmente esse tipo de variável é exportado do excel)

  {
    "name": "date",
    "type": "date",
    "format": "default",
    "title": "Date"
  },
  • Solução: adequar o formato da data no datapackage.json ou no arquivo de dados:

2.1.2. dado obrigatório ausente (inicio)

$ frictionless validate datapackage.json
# -------
# invalid: data/doacoes-comodatos-amigo-estado-mg.csv
# -------

===  =====  ==========  =================================================================================================
row  field  code        message                                                 
===  =====  ==========  =================================================================================================
 51      9  type-error  Type error in the cell "" in row "51" and field "VALOR" at position "9": type is "number/default"
===  =====  ==========  =================================================================================================

{
            "name": "VALOR",
            "type": "number",
            "format": "default",
            "title": "Valor",
            "description": "Valor estimado do bem ou serviço doado ou oferecido em comodato. Pode ser em moeda nacional ou estrangeira.",
            "groupChar": ".",
            "decimalChar": ","
          }
        ]
        "missingValues": [
          "NA"
        ]

  • Solução: completar o valor ausente indicado no arquivo do recurso. Se ele não for obrigatório, aplicar 'NA' na célula indicada no arquivo do recurso.

2.1.3. valor numérico não inteiro (inicio)

  • faltou informar os separadores de milhar (groupChar) e decimais (decimalChar):
$ frictionless validate datapackage.json
# -------
# invalid: data/doacoes-comodatos-amigo-estado-mg.csv
# -------

===  =====  ==========  =============================================================================================================
row  field  code        message
===  =====  ==========  =============================================================================================================
  2      9  type-error  Type error in the cell "300.000,00" in row "2" and field "VALOR" at position "9": type is "number/default"
  3      9  type-error  Type error in the cell "220.000,00" in row "3" and field "VALOR" at position "9": type is "number/default"
  4      9  type-error  Type error in the cell "347.000,00" in row "4" and field "VALOR" at position "9": type is "number/default"

  • Solução: aplicar as propriedades de separador de milhar groupChar e/ou separador de decimais decimalChar, sempre quando o valor numérico utilizar essa grafia. Alterar o valor da propriedade type de integer para number:
"type": "number",
"format": "default",
"title": "Valor",
"groupChar": ".",
"decimalChar": ","

2.1.4. valor fora das características informadas (inicio)

a. type-error

$ frictionless validate datapackage.json
# -------
# invalid: data/doacoes-comodatos-amigo-estado-mg.csv
# -------

===  =====  ==========  =======================================================================================================
row  field  code        message                                                 
===  =====  ==========  =======================================================================================================
  2      9  type-error  Type error in the cell "300000%" in row "2" and field "VALOR" at position "9": type is "number/default"
===  =====  ==========  =======================================================================================================

  • Solução: alterar os valores no arquivo do recurso, observando as características das variáveis numéricas indicadas no datapackage.json. Caso o problema tenha sido na descrição do dado, alterar as propriedades necessárias no datapackage.json.

b. constraint-error - pattern

$ frictionless validate datapackage.json
# -------
# invalid: data/doacoes-comodatos-amigo-estado-mg.csv
# -------

===  =====  ================  ==============================================================================================================================================
row  field  code              message                                                                                                                           
===  =====  ================  ==============================================================================================================================================
  2     10  constraint-error  The cell "R$" in row at position "2" and field "MOEDA" at position "10" does not conform to a constraint: constraint "pattern" is "^[A-Z]{3}$"
===  =====  ================  ==============================================================================================================================================

  • Solução: alterar os valores no arquivo do recurso, observando as características das variáveis indicadas no datapackage.json. Caso o problema tenha sido na descrição do dado, alterar as propriedades necessárias no datapackage.json.

2.2. Valores fora dos campos delimitadores (, ou ;):⚓︎

(inicio)

Na conversão de tipos de arquivo, texto ou valores de uma coluna podem 'vazar'. Observar se há sinais de pontuação (',', ';') que também funcionam como delimitadores, e podem redundar no erro:

$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
==========  ======================================
code        message
==========  ======================================
task-error  The task has an error: 'fieldPosition'
==========  ======================================

  • Solução: verificar se colunas de texto contêm ',' e/ou ';' que possam estar sendo interpretados como delimitadores de coluna. Delimitar os valores das colunas de texto em suas respsectivas células, utilizando aspas no editor de csv.

2.3. Arquivo de dados sem encoding utf-8⚓︎

(inicio)

a. encoding Western, Latin, Windows...

b. encoding UTF-8 sem Byte Order Mask (BOM)

A assinatura 'Byte Order Mask (BOM)' preserva a visualiação adequada dos caracteres especiais, quando há conversão de arquivo tabular do formato excel para csv. Quando esta não está aplicada, pode ocorrer o problema em outras ferramentas de edição de csv, como o excel:

  • Solução: gerar o arquivo csv com o BOM. No editor de texto Sublime, 'Save with Encoding --> UTF-8 with BOM'. Via Python, usando o pacote 'Pandas', aplicar read_file.to_csv (csv_file_path, encoding = 'utf-8-sig').

Appendix - Lista de verificação Frictionless - 'Validation Checks'⚓︎

(inicio)

['hash-count-error', 'byte-count-error', 'field-count-error', 'row-count-error', 'blank-header', 'extra-label', 'missing-label', 'blank-label', 'duplicate-label', 'incorrect-label', 'blank-row', 'primary-key-error', 'foreign-key-error', 'extra-cell', 'missing-cell', 'type-error', 'constraint-error', 'unique-error']


Last update: May 18, 2023 14:40:45
Created: March 10, 2023 15:05:51

Comments