diff --git a/.github/workflows/elementary.yaml b/.github/workflows/elementary.yaml index 594155d1..eaa03bac 100644 --- a/.github/workflows/elementary.yaml +++ b/.github/workflows/elementary.yaml @@ -18,8 +18,8 @@ jobs: warehouse-type: bigquery adapter-version: 1.5.9 profiles-yml: ${{ secrets.ELEMENTARY_PROFILES_YML }} - edr-command: edr report --file-path "report.html" && edr send-report --google-service-account-path - "/tmp/gcs_keyfile.json" --gcs-bucket-name "basedosdados" --update-bucket-website + edr-command: edr report --file-path "report.html" --days-back 90 && edr send-report --google-service-account-path + "/tmp/gcs_keyfile.json" --gcs-bucket-name "basedosdados" --update-bucket-website --days-back 90 "true" bigquery-keyfile: ${{ secrets.BIGQUERY_KEYFILE }} gcs-keyfile: ${{ secrets.GCS_KEYFILE }} diff --git a/.github/workflows/scripts/triggers_flow_execution.py b/.github/workflows/scripts/triggers_flow_execution.py new file mode 100644 index 00000000..8d08ad76 --- /dev/null +++ b/.github/workflows/scripts/triggers_flow_execution.py @@ -0,0 +1,166 @@ +from argparse import ArgumentParser +from time import sleep +import re +from backend import Backend +from utils import expand_alls, get_datasets_tables_from_modified_files +from table_test import get_flow_run_state, get_materialization_flow_id, get_flow_status_logs + +if __name__ == "__main__": + # Start argument parser + arg_parser = ArgumentParser() + + # Add GraphQL URL argument + arg_parser.add_argument( + "--graphql-url", + type=str, + required=True, + help="URL of the GraphQL endpoint.", + ) + + # Add list of modified files argument + arg_parser.add_argument( + "--dataset-id", + type=str, + required=True, + help="Table id", + ) + arg_parser.add_argument( + "--table-id", + type=str, + required=False, + default="", + help="Table id", + ) + + arg_parser.add_argument( + "--alias", + type=str, + required=False, + default="False", + help="DBT alias", + ) + + # Add Prefect backend URL argument + arg_parser.add_argument( + "--prefect-backend-url", + type=str, + required=False, + default="https://prefect.basedosdados.org/api", + help="Prefect backend URL.", + ) + + # Add prefect base URL argument + arg_parser.add_argument( + "--prefect-base-url", + type=str, + required=False, + default="https://prefect.basedosdados.org", + help="Prefect base URL.", + ) + + # Add Prefect API token argument + arg_parser.add_argument( + "--prefect-backend-token", + type=str, + required=True, + help="Prefect backend token.", + ) + + # Add materialization mode argument + arg_parser.add_argument( + "--materialization-mode", + type=str, + required=False, + default="prod", + help="Materialization mode.", + ) + + # Add materialization label argument + arg_parser.add_argument( + "--materialization-label", + type=str, + required=False, + default="basedosdados", + help="Materialization label.", + ) + + # Add dbt command label argument + arg_parser.add_argument( + "--dbt-command", + type=str, + required=False, + default = "run", + help="Materialization label.", + ) + + # Get arguments + args = arg_parser.parse_args() + # Expand `__all__` tables + backend = Backend(args.graphql_url) + + # Launch materialization flows + backend = Backend(args.prefect_backend_url) + flow_id = get_materialization_flow_id(backend, args.prefect_backend_token) + launched_flow_run_ids = [] + print( + f"Launching materialization flow for {args.dataset_id}.{args.table_id}" + ) + parameters = { + "dataset_id": args.dataset_id, + "dbt_alias": args.alias, + "mode": args.materialization_mode, + "table_id": args.table_id, + "dbt_command": args.dbt_command, + "disable_elementary": False, + } + + mutation = """ + mutation ($flow_id: UUID, $parameters: JSON, $label: String!) { + create_flow_run (input: { + flow_id: $flow_id, + parameters: $parameters, + labels: [$label], + }) { + id + } + } + """ + variables = { + "flow_id": flow_id, + "parameters": parameters, + "label": args.materialization_label, + } + + response = backend._execute_query( + mutation, + variables, + headers={"Authorization": f"Bearer {args.prefect_backend_token}"}, + ) + + flow_run_id = response["create_flow_run"]["id"] + launched_flow_run_ids.append(flow_run_id) + flow_run_url = f"{args.prefect_base_url}/flow-run/{flow_run_id}" + print(f" - Materialization flow run launched: {flow_run_url}") + + # Keep monitoring the launched flow runs until they are finished + for launched_flow_run_id in launched_flow_run_ids: + print(f"Monitoring flow run {launched_flow_run_id}...") + flow_run_state = get_flow_run_state( + flow_run_id=launched_flow_run_id, + backend=backend, + auth_token=args.prefect_backend_token, + ) + while flow_run_state not in ["Success", "Failed", "Cancelled"]: + sleep(5) + flow_run_state = get_flow_run_state( + flow_run_id=launched_flow_run_id, + backend=backend, + auth_token=args.prefect_backend_token, + ) + if flow_run_state != "Success": + raise Exception( + f'Flow run {launched_flow_run_id} finished with state "{flow_run_state}". ' + f"Check the logs at {args.prefect_base_url}/flow-run/{launched_flow_run_id}" + ) + else: + print("Congrats! Everything seems fine!") diff --git a/.github/workflows/triggers-elementary-model.yaml b/.github/workflows/triggers-elementary-model.yaml new file mode 100644 index 00000000..f03c051f --- /dev/null +++ b/.github/workflows/triggers-elementary-model.yaml @@ -0,0 +1,30 @@ +--- +name: Triggers Elementary Models +on: + push: + branches: [main, master] + schedule: + - cron: 00 23 * * 1 + workflow_dispatch: + +jobs: + run_elementary_models: + name: Run elementary model + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + ref: ${{ github.head_ref }} + - name: Set up poetry + run: pipx install poetry + - name: Set up python + uses: actions/setup-python@v4 + with: + cache: poetry + python-version: '3.9' + - name: Install requirements + run: poetry install --only=dev + - name: Run script to test DBT model + run: |- + poetry run python .github/workflows/scripts/triggers_flow_execution.py --dataset-id elementary --graphql-url ${{ secrets.BACKEND_GRAPHQL_URL }} --prefect-backend-token ${{ secrets.PREFECT_BACKEND_TOKEN }} diff --git a/models/br_camara_dados_abertos/schema.yml b/models/br_camara_dados_abertos/schema.yml index f33a3941..6ee08c46 100644 --- a/models/br_camara_dados_abertos/schema.yml +++ b/models/br_camara_dados_abertos/schema.yml @@ -7,95 +7,59 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_votacao, id_orgao, id_evento] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_votacao description: ID da votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + tests: [not_null] - name: data description: Data tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_registro description: Data do registro da votação tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: horario_registro description: Horário do registro da votação - name: id_orgao description: ID do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + tests: [not_null] - name: sigla_orgao description: Sigla do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_evento description: ID do evento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - custom_relationships: + to: ref('br_camara_dados_abertos__evento') + field: id_evento + ignore_values: ['0', '71957', '71921'] # O valor 5410 será ignorado + proportion_allowed_failures: 0 - name: aprovacao description: Indicador se ocorreu a aprovação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: voto_sim description: Quantidade de votos - Sim - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: voto_nao description: Quantidade de votos - Não - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: voto_outro description: Quantidade de votos - Outros - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao description: Descrição sobre a votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_hora_ultima_votacao description: Data e hora da última abertura da votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao_ultima_votacao description: Descrição da última abertura da votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_hora_ultima_proposicao description: Data e hora da última apresentação da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao_ultima_proposicao description: Descrição da última apresentação da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_ultima_proposicao description: ID da última proposição apresentada - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__votacao_objeto description: Cada votação é uma decisão sobre uma e somente uma Proposição, que no Dados Abertos é o chamado objeto da votação. Muitas vezes, porém, a proposição @@ -104,60 +68,37 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_votacao, id_proposicao] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_votacao description: ID da votação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__votacao') + field: id_votacao - name: data description: Data tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao description: Descrição sobre a votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_proposicao description: ID proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ano_proposicao description: Ano da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ementa description: Ementa da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: codigo_tipo description: Código do tipo da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_tipo description: Sigla do tipo da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: numero description: Número da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: titulo description: Título da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__votacao_parlamentar description: Separados por ano de ocorrência das votações, estes arquivos têm, em cada linha/registro, identificadores de uma votação, os identificadores básicos @@ -166,58 +107,43 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_votacao, id_deputado] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_votacao description: ID da votação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__votacao') + field: id_votacao - name: data description: Data tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: horario description: Horário - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: voto description: Voto - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado - description: ID do deputado tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado + description: ID do deputado - name: nome description: Nome do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_partido description: Sigla do partido - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_uf description: Sigla da Unidade da Federação tests: - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_legislatura description: ID da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__votacao_orientacao_bancada description: Para votações de qualquer tipo, os Partidos e Blocos, bem como as lideranças de Governo, Minoria, Maioria e Oposição, podem recomendar a seus @@ -225,32 +151,23 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_votacao, sigla_bancada] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_votacao description: ID da votação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__votacao') + field: id_votacao - name: sigla_orgao description: Sigla do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao description: Descrição sobre a votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_bancada description: Sigla da bancada - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: orientacao description: Orientação da bancada - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__votacao_proposicao description: Quando alguém fala algo como "a votação do PL 1234", o significado no Dados Abertos é "as várias votações de proposições relacionadas ao PL 1234". @@ -258,126 +175,88 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_votacao, id_proposicao] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_votacao description: ID da votação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__votacao') + field: id_votacao - name: data description: Data tests: - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao description: Descrição sobre a votação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_proposicao description: ID proposição tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - custom_relationships: + to: ref('br_camara_dados_abertos__proposicao_microdados') + field: id_proposicao + ignore_values: ['33463', '130292', '42069'] + proportion_allowed_failures: 0 - name: ano_proposicao description: Ano da proposição tests: - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: titulo description: Título da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ementa description: Ementa da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: codigo_tipo description: Código do tipo da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_tipo description: Sigla do tipo da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: numero description: Número da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__deputado description: Lista com identificadores e informações sobre todos os parlamentares que já estiveram em exercício em algum momento na história da Câmara. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_deputado] + - not_null_proportion_multiple_columns: + at_least: 0.001 columns: - name: nome description: Nome - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_civil description: Nome cívil - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_nascimento description: Data de Nascimento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_falecimento description: Data de Falecimento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: id_municipio_nascimento description: ID Município - IBGE 7 Dígitos referente ao nascimento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_brasil__municipio') field: id_municipio - name: sigla_uf_nascimento description: Sigla da Unidade da Federação referente ao nascimento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado description: ID deputado tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado - name: sexo description: Sexo - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_inicial_legislatura description: ID inicial da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_final_legislatura description: ID final da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_site description: URL do site - name: url_rede_social @@ -395,43 +274,29 @@ models: - entidade - sigla_uf - titulo + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: ano_inicio description: Ano início tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - name: ano_fim description: Ano fim tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - name: id_deputado description: ID deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_uf description: Sigla da Unidade da Federação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: entidade description: Entidade - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: titulo description: Título da ocupação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__deputado_profissao description: Lista com identificadores e informações sobre as profissões que o parlamentar declarou à Câmara que já exerceu ou que pode exercer pela sua formação @@ -439,82 +304,52 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_deputado, data, horario, id_profissao] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_deputado description: ID do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data description: Data tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: horario description: Horario - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_profissao description: ID da profissão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: titulo description: Título da profissão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__proposicao_autor description: Dados que relacionam identificadores básicos de proposições a identificadores básicos de autores. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_proposicao, tipo_autor, ordem_assinatura] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_proposicao description: ID proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado description: ID do deputado autor tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado - name: tipo_autor description: Tipo de Autor (i.e Deputado, Órgão do Poder Legislativo) - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_autor description: Nome do autor - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_partido description: Sigla do partido do autor - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_uf_autor description: Sigla da Unidade da Federação a qual o autor está vinculado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ordem_assinatura description: Ordem assinatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: proponente description: Indica se o autor é o proponente da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__proposicao_microdados description: Dados em que cada registro contém dados sobre uma proposição apresentada à Câmara dos Deputados para deliberação, como identificador universal (URI), @@ -523,178 +358,96 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_proposicao] + - not_null_proportion_multiple_columns: + at_least: 0.01 columns: - name: ano description: Ano tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - name: data description: Data da apresentação da proposição tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: horario description: Horário da apresentação da proposição tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__hora') field: hora - name: id_proposicao description: ID proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url description: URL proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: numero description: Número da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla description: Sigla do tipo de proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tipo description: Especificação do tipo de proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ementa description: Ementa - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ementa_detalhada description: Ementa detalhada - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: palavra_chave description: Palavras-chave - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_orgao_numerador description: URL do órgão responsável pela numeração - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_principal description: URL da proposição principal, se aplicável. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_posterior description: URL da proposição posterior, se houver. - name: url_teor_proposicao description: URL para o texto completo. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_hora_ultimo_status description: Data e hora do último status da proposta. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_relator_ultimo_status description: URL do relator associado ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_orgao_ultimo_status description: Sigla do órgão relacionado ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: regime_ultimo_status description: Regime de tramitação associado ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tramitacao_ultimo_status description: Descrição da tramitação associada ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: situacao_ultimo_status description: Descrição da situação associada ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: despacho_ultimo_status description: Despacho relacionado ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: apreciacao_ultimo_status description: Informações sobre a apreciação no último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sequencia_ultimo_status description: Sequencia do último status - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_ultimo_status description: URL relacionada ao último status. - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__proposicao_tema description: Cada registro corresponde a uma área temática na qual uma proposição foi classificada pelo Centro de Documentação e Informação da Câmara. tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ano, id_proposicao, tema, relevancia] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: ano description: Ano tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - name: id_proposicao description: ID proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tipo_proposicao description: Sigla do tipo da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: numero description: Número da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tema description: Descrição do tema - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: relevancia description: Relevancia - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__legislatura description: Lista com os identificadores de todos os períodos de trabalho da Câmara desde sua criação em 1827. De forma simplificada, pode-se dizer que esses @@ -704,38 +457,28 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_legislatura] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: ano description: Ano da eleição tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__ano') field: ano.ano - name: id_legislatura description: ID da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url description: URL da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_inicio description: Data inicio tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_final description: Data final tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data @@ -748,72 +491,40 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_legislatura, data_inicio, nome_deputado] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_legislatura description: ID da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_inicio description: Data inicio da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_final description: Data final da legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_orgao description: ID do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_orgao description: URL do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_orgao description: Sigla do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_orgao description: Nome do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado description: ID do deputado tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado - name: nome_deputado description: Nome do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: cargo description: Cargo do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_deputado description: URL do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_partido description: Sigla do partido - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_uf description: Sigla da Unidade da Federação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla @@ -824,71 +535,43 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_orgao] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_orgao description: ID do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome description: Nome do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: apelido description: Apelido do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla description: Sigla do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tipo_orgao description: Tipo do orgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_inicio description: Data Inicio tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_instalacao description: Data de instalação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_final description: Data final tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: situacao description: Situação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: casa description: Casa - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sala description: Sala - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__orgao_deputado description: Arquivos com identificadores básicos de órgãos da Câmara e dos deputados que foram seus integrantes, com os cargos que cada um ocupou (inclusive de suplência) @@ -902,61 +585,39 @@ models: - data_inicio - data_final - sigla_partido + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_orgao description: ID do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome description: Nome do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla description: Sigla do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_deputado description: Nome do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: cargo description: Cargo - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_uf description: Sigla da Unidade da Federação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_brasil__uf') field: sigla - name: data_inicio description: Data inicio tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_final description: Data final tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: sigla_partido description: Sigla do partido - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__evento description: Lista com identificadores e informações diversas sobre as reuniões, sessões, audiências, seminários e outros eventos realizados pelos diversos órgãos @@ -966,62 +627,31 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_evento] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_evento description: ID do evento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_documento_pauta description: URL da pauta - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_inicio description: Data de início - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: horario_inicio description: Horário de início - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_final description: Data final - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: horario_final description: Horário final - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: situacao description: Situação do evento (e.g. Encerrada, Cancelada, etc) - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: descricao description: Descrição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: tipo description: Tipo do evento (e.g. Reunião deliberativa, Palestra, etc) - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: local_externo description: Nome do local externo que o evento foi realizado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_local description: Local onde foi realizado o evento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__evento_orgao description: Lista que liga identificadores de eventos aos identificadores dos órgãos que os realizaram. Cada registro desses arquivos identifica um evento @@ -1031,22 +661,19 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_evento, id_orgao] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_evento description: ID do evento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - custom_relationships: + to: ref('br_camara_dados_abertos__evento') + field: id_evento - name: id_orgao description: ID do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: sigla_orgao description: Sigla do órgão - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__evento_presenca_deputado description: Lista que liga os identificadores de eventos aos identificadores dos deputados que marcaram presença nos eventos realizados. No caso de eventos @@ -1056,30 +683,29 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_evento, id_deputado] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_evento description: ID do evento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - custom_relationships: + to: ref('br_camara_dados_abertos__evento') + field: id_evento - name: data_inicio description: Data de início tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: horario_inicio description: Horário de início - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado description: ID do deputado tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado - name: br_camara_dados_abertos__evento_requerimento description: Lista que liga os identificadores de eventos aos identificadores dos requerimentos. Eventos como as audiências públicas das comissões são realizados @@ -1089,22 +715,19 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_evento, titulo_requerimento] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_evento description: ID do evento tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - custom_relationships: + to: ref('br_camara_dados_abertos__evento') + field: id_evento - name: titulo_requerimento description: Título do requerimento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_proposicao description: ID da proposição - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__frente description: As frentes são formadas por deputados e senadores de diferentes partidos que se unem em prol de um determinado assunto. São mais ou menos próximas do @@ -1113,60 +736,34 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_frente] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_frente description: ID da frente - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + tests: [not_null] - name: titulo description: Título - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_criacao description: Data tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: id_legislatura description: ID legislatura - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: telefone description: Telefone - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: situacao description: Situação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_documento description: URL do documento - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_coordenador description: ID do coordenador - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: nome_coordenador description: Nome do coordenador - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_foto_coordenador description: URL da foto do coordenador - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__frente_deputado description: Identificadores básicos de cada frente parlamentar são vinculados aos identificadores básicos dos deputados que foram cadastrados como seus integrantes, @@ -1175,32 +772,27 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [id_frente, id_deputado, titulo_deputado] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: id_frente description: ID da frente tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__frente') + field: id_frente - name: titulo_deputado description: Título do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: id_deputado description: ID do deputado tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 + - relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado - name: nome_deputado description: Nome do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: url_foto_deputado description: URL da foto do deputado - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__funcionario description: Dados sobre todos os parlamentares e funcionários em atividade na Câmara (servidores, secretários parlamentares e ocupantes dos Cargos de Natureza @@ -1210,66 +802,41 @@ models: tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: [ponto] + - not_null_proportion_multiple_columns: + at_least: 0.05 columns: - name: nome description: Nome - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: cargo description: Cargo - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: funcao description: Função - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: data_inicio_historico description: Data de inicio tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_nomeacao description: Data de nomeação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: data_publicacao_nomeacao description: Data da publicação da nomeação tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - relationships: to: ref('br_bd_diretorios_data_tempo__data') field: data.data - name: grupo description: Grupo - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ponto description: Código do ponto - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: ato_nomeacao description: Ato de nomeação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: lotacao description: Lotação - tests: - - dbt_utils.not_null_proportion: - at_least: 0.05 - name: br_camara_dados_abertos__licitacao description: Os identificadores internos e oficiais das licitações realizadas a cada ano pela Câmara dos Deputados, juntos a diversas informações como modalidade @@ -1637,6 +1204,12 @@ models: description: Cadastro de Pessoa Física (CPF) do parlamentar - name: id_deputado description: ID do deputado + tests: + - custom_relationships: + to: ref('br_camara_dados_abertos__deputado') + field: id_deputado + ignore_values: ['228042', '223398'] # O valor 5410 será ignorado + proportion_allowed_failures: 0 - name: ano_legislatura description: Ano de início da legislatura tests: @@ -1686,8 +1259,10 @@ models: description: Valor de face do documento comprobatório da despesa - name: valor_retido description: Valor retido + tests: [not_null] - name: valor_liquido description: Valor da despesa efetivamente debitado da Cota Parlamentar + tests: [not_null] - name: numero_parcela description: Valor numérico diferente de 0 quando a despesa cadastrada é reembolsada pela CEAP de forma parcelada