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⚓︎
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
, oudescription
, do conjunto ou dosresources
; -
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⚓︎
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
============= ================================================================================================================================================================================================================
- Solução: corrigir a propriedade
name
contendo especificações legíveis por máquina.
1.3. O caminho path
incorreto⚓︎
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 oschema
oudialect
, ou corrigindo seu nome, se for o caso.
2. Sobre os arquivos de dados e seu conteúdo⚓︎
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çãoFrictionless
); -
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 decimaisdecimalChar
, sempre quando o valor numérico utilizar essa grafia. Alterar o valor da propriedadetype
deinteger
paranumber
:
"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 nodatapackage.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 nodatapackage.json
.
2.2. Valores fora dos campos delimitadores (, ou ;):⚓︎
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
⚓︎
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', aplicarread_file.to_csv (csv_file_path, encoding = 'utf-8-sig')
.
Appendix - Lista de verificação Frictionless - 'Validation Checks'⚓︎
['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']
Created: March 10, 2023 15:05:51