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)