Manual de Estilo de Modelos e Tabelas
Esta página é baseada no manual de estilo da Base dos Dados
Modelos DBT
Organização do Diretório models
O diretório queries/models
deve ser dividido em pastas referentes aos datasets do BigQuery em que cada tabela será criada. Cada pasta
de dataset pode conter uma subpasta staging
, para armazenar os modelos intermediários para a criação das tabelas e views finais. Além disso, cada
dataset deve contenter um arquivo schema.yml para a criação das descrições das tabelas, views e colunas.
Exemplo:
└── queries
└── models
└── nome_dataset
├── nome_modelo.sql # instruções sql para materialização de uma tabela ou view
├── schema.yml # estrutura e documentação do modelo
└── staging
└── nome_modelo_intermediario.sql
Estruturação dos Modelos
Tabelas e Datasets
Nomeação de Datasets
-
Caso sejam para tabelas de uso geral, os datasets são nomeados de acordo com a categoria dos dados armazenados.
Exemplo:bilhetagem
financeiro
subsidio
-
Os datasets também podem ser nomeados de forma a indicar a finalidade específica em que os dados são usados
Exemplo:validacao_dados_jae
-
Ou com o nome de um dashboard, utilizando o prefixo
dashboard_
Exemplo:dashboard_subsidio_sppo
Nomeação de Tabelas
-
As tabelas devem ser sempre nomeadas no singular
-
Caso a tabela tenha algum qualificador, por exemplo
aux
eview
, ele deve ser colocado como prefixo. Exemplo:aux_gratuidade
-
A nomeação de tabelas não agregadas é menos estruturada, devendo apenas indicar claramente qual informação que se encontra nela.
-
Para tabelas agregadas, nós nomeamos de forma a indicar o nivel de agregação do menor para o maior. Exemplo:
ordem_pagamento_servico_operador_dia
- Este exemplo indica uma tabela com os dados das ordens de pagamento, agregados por
servico
(campo mais específico),operador
edia
(campo mais geral)
- Este exemplo indica uma tabela com os dados das ordens de pagamento, agregados por
Nomeação e Tipos de Colunas
- Procurar usar os nomes que já são utilizados. Exemplos:
data
,servico
,modo
,id_veiculo
. - Ser o mais claro e intuitivo possível.
- O nome das colunas devem ser escritos em snake_case (todas as letras minúsculas e palavras separadas por
_
). - Colunas do tipo booleano devem ter um prefixo
indicador_
. Exemplo:indicador_transacao_valida
. - Colunas numéricas com ponto flutuante que representam valores financeiros devem utilizar o tipo
NUMERIC
. - Colunas de id devem ser do tipo
STRING
, exceto se este for o campo de partição da tabela.
Ordenamento de Colunas
- Os primeiros campos devem ser sempre a coluna de partição da tabela (se houver) e a chave única da tabela, nesta ordem.
- Caso não tenha chave única, as chaves primárias devem ser dispostas em ordem decrescente de abrangência (Exemplo:
modo
,id_servico
,id_operador
) - As próximas colunas devem ser outras informações identificadores em ordem decrescente de abrangência.
- Colunas de
id
, sua descrição e outras informações relativas a ele devem permanecer agrupadas. Sempre com oid
sendo a primeira coluna. Exemplos:id_servico
,servico
,descricao_servico
,id_operador
,operador
- Colunas qualitativas devem ser agrupadas por tema e dispostas em ordem decrescente de relevância.
- O mesmo deve ser feito para colunas quantitativas, em seguida.
-
Por fim, deve ser incluídas as colunas de controle:
datetime_captura
(se aplicável),datetime_ultima_atualizacao
,versao
-
Exemplo de ordenamento:
data
(partição)
id_transacao
(chave única)
datetime_transacao
(identificador temporal)
datetime_processamento
(identificador temporal)
modo
(identificador modo)
id_consorcio
(identificador consorcio)
consorcio
(identificador consorcio)
id_operadora
(identificador operadora)
operadora
(identificador operadora)
id_servico_jae
(identificador servico)
servico_jae
(identificador servico)
descricao_servico_jae
(identificador servico)
sentido
(identificador sentido)
id_veiculo
(identificador veiculo)
id_validador
(identificador validador)
id_cliente
(identificador cliente)
tipo_pagamento
(qualitativa)
tipo_transacao
(qualitativa)
tipo_transacao_smtr
(qualitativa)
tipo_gratuidade
(qualitativa)
id_tipo_integracao
(qualitativa)
id_integracao
(qualitativa)
latitude
(qualitativa)
longitude
(qualitativa)
stop_id
(qualitativa)
stop_lat
(qualitativa)
stop_lon
(qualitativa)
valor_transacao
(quantitativa)
valor_pagamento
(quantitativa)
datetime_captura
(controle)
datetime_ultima_atualizacao
(controle),
versao
(controle)
Descrições de tabelas e colunas
As descrições de tabelas e colunas devem seguir um padrão específico para garantir clareza e consistência. A estrutura adotada é a seguinte:
- Descrição dos dados: Explicação clara e objetiva sobre o conteúdo da coluna ou tabela;
- Explicação/Observação: Se aplicável, qualquer informação adicional relevante deve ser incluída entre colchetes em minúsculo (exceto siglas)
[]
; - Unidade de medida: Se aplicável, sempre por último, observadas também as regras da seção específica.
Exemplo:
- "Receita total esperada com base na quilometragem [IRK x km] (R$)"
- "Nome curto da linha operada pelo veículo com variação de serviço [ex.: 010, 011SN, ...]"
- "Parâmetros de remuneração do subsídio dos serviços de ônibus [SPPO] por tipo de viagem [descontinuada a partir de 2024-03-01]"
Unidades de medida
As unidades de medida devem ser registradas na descrição da coluna entre parênteses, garantindo clareza e padronização na interpretação dos dados. Nossas regras são:
- Caso a coluna represente um valor absoluto, utilize apenas a unidade correspondente (ex.:
R$
,km
,min
); - Se a unidade estiver associada a uma referência, utilize o formato "Unidade/Referência" para indicar a relação entre grandezas (ex.:
R$/km
,km/h
); - Sempre use abreviações padronizadas para unidades conforme Sistema Internacional de Unidades (SI), evitando variações informais (ex.:
h
para horas, nãohrs
); - Caso a unidade não seja óbvia, inclua uma explicação sucinta entre colchetes.
Exemplo:
- "Receita total aferida [receita tarifária + subsidio pago] (R$)"
- "Valor máximo de subsídio, conforme tipo de viagem (R$/km)"
- "Distância percorrida (km)"
Dicionários
- Sempre que possível e necessário, cada conjunto de dados deverá incluir até um dicionário;
- Para cada tabela, coluna e cobertura temporal, cada chave mapeia unicamente um valor;
- Chaves não podem ter valores nulos;
- Dicionários devem cobrir todas as chaves disponíveis nas tabelas originais.
Cobertura temporal
Preencher a coluna cobertura_temporal
nos metadados de tabela, coluna e chave (em dicionários) segue o seguinte padrão.
- Formato geral:
data_inicial(unidade_temporal)data_final
data_inicial
edata_final
estão na correspondente unidade temporal.- Exemplo: tabela com unidade
ano
tem cobertura2005(1)2018
. - Exemplo: tabela com unidade
mes
tem cobertura2005-08(1)2018-12
. - Exemplo: tabela com unidade
semana
tem cobertura2005-08-01(7)2018-08-31
. - Exemplo: tabela com unidade
dia
tem cobertura2005-08-01(1)2018-12-31
.
- Exemplo: tabela com unidade
- Caso a
data_final
ainda não tenha sido alcançada:- Exemplo: tabela com unidade
ano
tem cobertura2005(1)
. - Exemplo: tabela com unidade
mes
tem cobertura2005-08(1)
. - Exemplo: tabela com unidade
semana
tem cobertura2005-08-01(7)
. - Exemplo: tabela com unidade
dia
tem cobertura2005-08-01(1)
.
- Exemplo: tabela com unidade