From 40ee4c06ebe8443a9fd125be6a7b305a758bacd0 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha <66736583+eng-rodrigocunha@users.noreply.github.com> Date: Fri, 5 Jan 2024 14:13:21 -0300 Subject: [PATCH 1/3] commit inicial (#6) --- .../dicionario.sql | 13 - .../ordem_pagamento.sql | 129 ---- .../br_rj_riodejaneiro_bilhetagem/schema.yml | 125 --- .../transacao.sql | 134 ---- .../staging_cliente.sql | 37 - .../staging_consorcio.sql | 30 - .../staging_conta_bancaria.sql | 33 - .../staging_contato_pessoa_juridica.sql | 34 - .../staging_grupo.sql | 31 - .../staging_grupo_linha.sql | 32 - .../staging_linha.sql | 43 -- .../staging_linha_consorcio.sql | 35 - .../staging_operadora_transporte.sql | 34 - .../staging_ordem_pagamento.sql | 47 -- .../staging_ordem_ressarcimento.sql | 52 -- .../staging_pessoa_juridica.sql | 33 - .../brt_aux_registros_filtrada.sql | 71 -- ...brt_aux_registros_flag_trajeto_correto.sql | 93 --- .../brt_aux_registros_parada.sql | 71 -- .../brt_aux_registros_velocidade.sql | 92 --- .../brt_registros.sql | 9 - .../brt_registros_desaninhada.sql | 12 - .../br_rj_riodejaneiro_gtfs/agency_gtfs.sql | 18 - .../calendar_dates_gtfs.sql | 19 - .../br_rj_riodejaneiro_gtfs/calendar_gtfs.sql | 26 - .../fare_attributes_gtfs.sql | 23 - .../fare_rules_gtfs.sql | 22 - .../feed_info_gtfs.sql | 25 - .../frequencies_gtfs.sql | 18 - .../ordem_servico_diaria.sql | 68 -- .../ordem_servico_gtfs.sql | 73 -- .../br_rj_riodejaneiro_gtfs/routes_gtfs.sql | 29 - .../models/br_rj_riodejaneiro_gtfs/schema.yml | 342 --------- .../servicos_sentido.sql | 79 -- .../shapes_geom_gtfs.sql | 77 -- .../br_rj_riodejaneiro_gtfs/shapes_gtfs.sql | 19 - .../stop_times_gtfs.sql | 28 - .../br_rj_riodejaneiro_gtfs/stops_gtfs.sql | 31 - .../br_rj_riodejaneiro_gtfs/trips_gtfs.sql | 26 - .../br_rj_riodejaneiro_onibus_gps/schema.yaml | 332 -------- .../sppo_aux_registros_filtrada.sql | 81 -- ...ppo_aux_registros_flag_trajeto_correto.sql | 96 --- .../sppo_aux_registros_parada.sql | 77 -- .../sppo_aux_registros_realocacao.sql | 73 -- .../sppo_aux_registros_velocidade.sql | 91 --- .../sppo_realocacao.sql | 15 - .../sppo_registros.sql | 15 - .../rho_registros_sppo.sql | 18 - .../rho_registros_sppo_view.sql | 16 - .../models/br_rj_riodejaneiro_rdo/schema.yaml | 7 - .../recurso_sppo_viagens_individuais.sql | 113 --- .../br_rj_riodejaneiro_recurso/schema.yml | 35 - .../br_rj_riodejaneiro_sigmob/agency.sql | 26 - .../agency_desaninhada.sql | 10 - .../agg_stops_vistoriadas.sql | 21 - .../br_rj_riodejaneiro_sigmob/calendar.sql | 26 - .../calendar_desaninhada.sql | 14 - .../data_versao_efetiva.sql | 209 ----- .../frota_determinada.sql | 26 - .../frota_determinada_desaninhada.sql | 12 - .../br_rj_riodejaneiro_sigmob/holidays.sql | 26 - .../br_rj_riodejaneiro_sigmob/linhas.sql | 26 - .../linhas_desaninhada.sql | 18 - .../br_rj_riodejaneiro_sigmob/routes.sql | 26 - .../routes_desaninhada.sql | 56 -- .../br_rj_riodejaneiro_sigmob/schema.yaml | 114 --- .../br_rj_riodejaneiro_sigmob/shapes.sql | 26 - .../br_rj_riodejaneiro_sigmob/shapes_geom.sql | 121 --- .../stop_details.sql | 26 - .../stop_details_desaninhada.sql | 45 -- .../br_rj_riodejaneiro_sigmob/stop_times.sql | 26 - .../stop_times_desaninhada.sql | 9 - .../br_rj_riodejaneiro_sigmob/stops.sql | 26 - .../stops_desaninhada.sql | 51 -- .../br_rj_riodejaneiro_sigmob/trips.sql | 26 - .../trips_desaninhada.sql | 45 -- .../staging_operadora_empresa.sql | 34 - .../staging_operadora_pessoa_fisica.sql | 36 - .../br_rj_riodejaneiro_veiculos/gps_brt.sql | 139 ---- .../gps_brt_15_minutos.sql | 139 ---- .../br_rj_riodejaneiro_veiculos/gps_sppo.sql | 139 ---- .../models/cadastro/diretorio_consorcios.sql | 38 - .../models/cadastro/diretorio_operadoras.sql | 105 --- .../models/cadastro/operadoras_contato.sql | 26 - queries/models/cadastro/schema.yml | 92 --- .../models/dashboard_subsidio_sppo/README.md | 87 --- .../models/dashboard_subsidio_sppo/schema.yml | 334 -------- .../subsidio_parametros.sql | 24 - .../dashboard_subsidio_sppo/sumario_dia.sql | 116 --- .../sumario_servico_dia.sql | 105 --- .../sumario_servico_dia_historico.sql | 103 --- .../sumario_servico_dia_tipo.sql | 218 ------ .../sumario_servico_dia_tipo_sem_glosa.sql | 47 -- .../sumario_servico_tipo_viagem_dia.sql | 153 ---- .../valor_tipo_penalidade.sql | 21 - .../viagens_realizadas.sql | 6 - .../viagens_remuneradas.sql | 183 ----- queries/models/example/my_first_dbt_model.sql | 27 - .../models/example/my_second_dbt_model.sql | 6 - queries/models/example/schema.yml | 21 - .../models/projeto_subsidio_sppo/README.md | 138 ---- .../aux_recurso_duplicado.sql | 32 - .../aux_recurso_fora_prazo.sql | 31 - .../aux_recurso_incorreto.sql | 54 -- .../aux_recurso_viagem_nao_planejada.sql | 38 - .../aux_recurso_viagem_paga.sql | 45 -- .../aux_recurso_viagem_recalculada.sql | 36 - .../aux_registros_status_trajeto.sql | 78 -- .../aux_viagem_circular.sql | 69 -- .../aux_viagem_inicio_fim.sql | 77 -- .../aux_viagem_registros.sql | 49 -- .../recurso_avaliado.sql | 34 - .../recurso_filtrada.sql | 38 - .../registros_status_viagem.sql | 48 -- .../models/projeto_subsidio_sppo/schema.yml | 715 ------------------ .../subsidio_data_versao_efetiva.sql | 149 ---- .../subsidio_quadro_horario.sql | 13 - .../subsidio_shapes_geom.sql | 98 --- .../subsidio_trips_desaninhada.sql | 17 - .../sumario_subsidio_dia_periodo_recurso.sql | 76 -- .../sumario_subsidio_dia_pos_recurso.sql | 20 - .../sumario_subsidio_dia_recurso.sql | 33 - .../projeto_subsidio_sppo/viagem_completa.sql | 171 ----- .../viagem_completa_recurso.sql | 111 --- .../viagem_conformidade.sql | 74 -- .../viagem_conformidade_recurso.sql | 250 ------ .../viagem_planejada.sql | 159 ---- queries/models/veiculo/README.md | 31 - queries/models/veiculo/schema.yml | 231 ------ queries/models/veiculo/sppo_infracao.sql | 43 -- queries/models/veiculo/sppo_licenciamento.sql | 42 - .../sppo_licenciamento_solicitacao.sql | 40 - .../models/veiculo/sppo_licenciamento_stu.sql | 27 - queries/models/veiculo/sppo_veiculo_dia.sql | 185 ----- 134 files changed, 9544 deletions(-) delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem/dicionario.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_contato_pessoa_juridica.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql delete mode 100644 queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_filtrada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_flag_trajeto_correto.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_parada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_velocidade.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql delete mode 100644 queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/calendar_dates_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/schema.yml delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/shapes_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_filtrada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_flag_trajeto_correto.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_parada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_realocacao.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_velocidade.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql delete mode 100644 queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql delete mode 100644 queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo_view.sql delete mode 100644 queries/models/br_rj_riodejaneiro_rdo/schema.yaml delete mode 100644 queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql delete mode 100644 queries/models/br_rj_riodejaneiro_recurso/schema.yml delete mode 100755 queries/models/br_rj_riodejaneiro_sigmob/agency.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/agency_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/calendar.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/calendar_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/holidays.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/linhas.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/linhas_desaninhada.sql delete mode 100755 queries/models/br_rj_riodejaneiro_sigmob/routes.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/schema.yaml delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/shapes.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql delete mode 100755 queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/stop_times_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/stops.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql delete mode 100755 queries/models/br_rj_riodejaneiro_sigmob/trips.sql delete mode 100644 queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql delete mode 100644 queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql delete mode 100644 queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql delete mode 100644 queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql delete mode 100644 queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql delete mode 100644 queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql delete mode 100644 queries/models/cadastro/diretorio_consorcios.sql delete mode 100644 queries/models/cadastro/diretorio_operadoras.sql delete mode 100644 queries/models/cadastro/operadoras_contato.sql delete mode 100644 queries/models/cadastro/schema.yml delete mode 100644 queries/models/dashboard_subsidio_sppo/README.md delete mode 100644 queries/models/dashboard_subsidio_sppo/schema.yml delete mode 100644 queries/models/dashboard_subsidio_sppo/subsidio_parametros.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_dia.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_servico_dia.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo_sem_glosa.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/sumario_servico_tipo_viagem_dia.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/viagens_realizadas.sql delete mode 100644 queries/models/dashboard_subsidio_sppo/viagens_remuneradas.sql delete mode 100644 queries/models/example/my_first_dbt_model.sql delete mode 100644 queries/models/example/my_second_dbt_model.sql delete mode 100644 queries/models/example/schema.yml delete mode 100644 queries/models/projeto_subsidio_sppo/README.md delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql delete mode 100644 queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql delete mode 100644 queries/models/projeto_subsidio_sppo/recurso_avaliado.sql delete mode 100644 queries/models/projeto_subsidio_sppo/recurso_filtrada.sql delete mode 100644 queries/models/projeto_subsidio_sppo/registros_status_viagem.sql delete mode 100644 queries/models/projeto_subsidio_sppo/schema.yml delete mode 100644 queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql delete mode 100644 queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql delete mode 100644 queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql delete mode 100644 queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql delete mode 100644 queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql delete mode 100644 queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql delete mode 100644 queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql delete mode 100644 queries/models/projeto_subsidio_sppo/viagem_completa.sql delete mode 100644 queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql delete mode 100644 queries/models/projeto_subsidio_sppo/viagem_conformidade.sql delete mode 100644 queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql delete mode 100644 queries/models/projeto_subsidio_sppo/viagem_planejada.sql delete mode 100644 queries/models/veiculo/README.md delete mode 100644 queries/models/veiculo/schema.yml delete mode 100644 queries/models/veiculo/sppo_infracao.sql delete mode 100644 queries/models/veiculo/sppo_licenciamento.sql delete mode 100644 queries/models/veiculo/sppo_licenciamento_solicitacao.sql delete mode 100644 queries/models/veiculo/sppo_licenciamento_stu.sql delete mode 100644 queries/models/veiculo/sppo_veiculo_dia.sql diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem/dicionario.sql b/queries/models/br_rj_riodejaneiro_bilhetagem/dicionario.sql deleted file mode 100644 index 7c303eca..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/dicionario.sql +++ /dev/null @@ -1,13 +0,0 @@ -{{ - config( - materialized="table", - ) -}} -SELECT - SAFE_CAST(chave AS STRING) AS chave, - SAFE_CAST(cobertura_temporal AS STRING) AS cobertura_temporal, - SAFE_CAST(id_tabela AS STRING) AS id_tabela, - SAFE_CAST(coluna AS STRING) AS coluna, - SAFE_CAST(valor AS STRING) AS valor -FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "dicionario") }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql b/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql deleted file mode 100644 index f330e147..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql +++ /dev/null @@ -1,129 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={ - "field":"data_ordem", - "data_type":"date", - "granularity": "day" - }, - incremental_strategy="insert_overwrite" - ) -}} - -WITH transacao_agg AS ( - SELECT - data, - DATE_ADD(data, INTERVAL 1 DAY) AS data_ordem, - ANY_VALUE(id_consorcio) AS id_consorcio, - id_operadora, - servico, - COUNT(*) AS quantidade_total_transacao_captura, - ROUND(SUM(valor_transacao), 1) AS valor_total_transacao_captura - FROM - {{ ref("transacao") }} - WHERE - {% if is_incremental() -%} - data BETWEEN DATE_SUB(DATE("{{var('date_range_start')}}"), INTERVAL 1 DAY) AND DATE_SUB(DATE("{{var('date_range_end')}}"), INTERVAL 1 DAY) - {% else %} - data < CURRENT_DATE("America/Sao_Paulo") - {%- endif %} - GROUP BY - data, - id_operadora, - servico -), -ordem_pagamento AS ( - SELECT - r.data_ordem, - p.data_pagamento, - dc.id_consorcio, - do.id_operadora, - l.nr_linha AS servico, - r.id_ordem_pagamento AS id_ordem_pagamento, - r.id_ordem_ressarcimento AS id_ordem_ressarcimento, - r.qtd_debito AS quantidade_transacao_debito, - r.valor_debito, - r.qtd_vendaabordo AS quantidade_transacao_especie, - r.valor_vendaabordo AS valor_especie, - r.qtd_gratuidade AS quantidade_transacao_gratuidade, - r.valor_gratuidade, - r.qtd_integracao AS quantidade_transacao_integracao, - r.valor_integracao, - r.qtd_rateio_credito AS quantidade_transacao_rateio_credito, - r.valor_rateio_credito, - r.qtd_rateio_debito AS quantidade_transacao_rateio_debito, - r.valor_rateio_debito, - r.qtd_debito + r.qtd_vendaabordo + r.qtd_gratuidade + r.qtd_integracao + r.qtd_rateio_credito + r.qtd_rateio_debito AS quantidade_total_transacao, - ROUND(r.valor_bruto, 1) AS valor_total_transacao_bruto, - r.valor_taxa AS valor_desconto_taxa, - r.valor_liquido AS valor_total_transacao_liquido - FROM - {{ ref("staging_ordem_ressarcimento") }} r - LEFT JOIN - {{ ref("staging_ordem_pagamento") }} p - ON - r.id_ordem_pagamento = p.id_ordem_pagamento - LEFT JOIN - {{ ref("staging_consorcio") }} c - ON - r.id_consorcio = c.cd_consorcio - LEFT JOIN - {{ ref("staging_linha") }} AS l - ON - r.id_linha = l.cd_linha - LEFT JOIN - {{ ref("staging_operadora_transporte") }} AS o - ON - r.id_operadora = o.cd_operadora_transporte - LEFT JOIN - {{ ref("diretorio_operadoras") }} AS do - ON - r.id_operadora = do.id_operadora_jae - LEFT JOIN - {{ ref("diretorio_consorcios") }} AS dc - ON - r.id_consorcio = dc.id_consorcio_jae - {% if is_incremental() -%} - WHERE - DATE(r.data) BETWEEN DATE("{{var('date_range_start')}}") AND DATE("{{var('date_range_end')}}") - {%- endif %} -) -SELECT - COALESCE(op.data_ordem, t.data_ordem) AS data_ordem, - op.data_pagamento, - COALESCE(op.id_consorcio, t.id_consorcio) AS id_consorcio, - COALESCE(op.id_operadora, t.id_operadora) AS id_operadora, - COALESCE(op.servico, t.servico) AS servico, - op.id_ordem_pagamento, - op.id_ordem_ressarcimento, - op.quantidade_transacao_debito, - op.valor_debito, - op.quantidade_transacao_especie, - op.valor_especie, - op.quantidade_transacao_gratuidade, - op.valor_gratuidade, - op.quantidade_transacao_integracao, - op.valor_integracao, - op.quantidade_transacao_rateio_credito, - op.valor_rateio_credito, - op.quantidade_transacao_rateio_debito, - op.valor_rateio_debito, - op.quantidade_total_transacao, - op.valor_total_transacao_bruto, - op.valor_desconto_taxa, - op.valor_total_transacao_liquido, - t.quantidade_total_transacao_captura, - t.valor_total_transacao_captura, - COALESCE( - (t.quantidade_total_transacao_captura = op.quantidade_total_transacao AND t.valor_total_transacao_captura = op.valor_total_transacao_bruto), - false - ) AS flag_ordem_valida, - '{{ var("version") }}' AS versao -FROM - ordem_pagamento op -FULL OUTER JOIN - transacao_agg t -ON - t.data_ordem = op.data_ordem - AND t.servico = op.servico - AND t.id_operadora = op.id_operadora diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml b/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml deleted file mode 100644 index cea9ea19..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml +++ /dev/null @@ -1,125 +0,0 @@ -version: 2 - -models: - - name: transacao - description: "Tabela de transações" - columns: - - name: data - description: "Data da transação (partição)" - - name: hora - description: "Hora da transação" - - name: datetime_transacao - description: "Data e hora da transação em GMT-3 (formato YYYY-MM-ddTHH:mm:ss.ssssss)" - - name: datetime_processamento - description: "Data e hora de processamento da transação em GMT-3 (formato YYYY-MM-ddTHH:mm:ss.ssssss)" - - name: datetime_captura - description: "Timestamp de captura em GMT-3 (formato YYYY-MM-dd HH:mm:ssTZD)" - - name: modo - description: "Tipo de transporte (SPPO = ônibus, STPL = van, BRT)" - - name: id_consorcio - description: "Identificador do consórcio na tabela cadastro.consorcios" - - name: id_operadora - description: "Identificador da operadora na tabela cadastro.operadoras" - - name: servico - description: "Nome curto da linha operada pelo veículo com variação de serviço (ex: 010, 011SN, ...)" - - name: sentido - description: "Sentido de operação do serviço (0 = ida, 1 = volta)" - - name: id_veiculo - description: "Identificador único do veículo" - - name: id_cliente - description: "Identificador único do cliente" - - name: id_transacao - description: "Identificador único da transação" - - name: id_tipo_pagamento - description: "Código do tipo de pagamento utilizado" - - name: id_tipo_transacao - description: "Tipo de transação realizada" - - name: id_tipo_integracao - description: "Tipo da integração realizada (identificador relacionado à matriz de integração)" - - name: id_integracao - description: "Identificador único da integração" - - name: latitude - description: "Latitude da transação (WGS84)" - - name: longitude - description: "Longitude da transação (WGS84)" - - name: stop_id - description: "Código identificador do ponto de embarque (GTFS)" - - name: stop_lat - description: "Latitude do ponto de embarque (GTFS)" - - name: stop_lon - description: "Longitude do ponto de embarque (GTFS)" - - name: valor_transacao - description: "Valor debitado na transação atual (R$)" - - name: versao - description: "Código de controle de versão do dado (SHA Github)" - - name: ordem_pagamento - description: "Tabela de ordem de pagamento do banco de dados de dados da Jaé" - columns: - - name: data_ordem - description: "Data da ordem de pagamento (partição)" - - name: data_pagamento - description: "Data de pagamento da ordem" - - name: id_consorcio - description: "Identificador do consórcio na tabela cadastro.consorcios" - - name: id_operadora - description: "Identificador da operadora na tabela cadastro.operadoras" - - name: servico - description: "Nome curto da linha operada com variação de serviço (ex: 010, 011SN, ...)" - - name: id_ordem_pagamento - description: "Identificador da ordem pagamento no banco de dados da Jaé" - - name: id_ordem_ressarcimento - description: "Identificador da ordem ressarcimento no banco de dados da Jaé" - - name: quantidade_transacao_debito - description: "Quantidade de transações feitas na modalidade débito" - - name: valor_debito - description: "Valor total das transações feitas na modalidade débito (R$)" - - name: quantidade_transacao_especie - description: "Quantidade de transações feitas em espécie" - - name: valor_especie - description: "Valor total das transações feitas em espécie (R$)" - - name: quantidade_transacao_gratuidade - description: "Quantidade de transações feitas com gratuidade" - - name: valor_gratuidade - description: "Valor total das transações feitas com gratuidade (R$)" - - name: quantidade_transacao_integracao - description: "Quantidade de transações feitas com integração" - - name: valor_integracao - description: "Valor total das transações feitas com integração (R$)" - - name: quantidade_transacao_rateio_credito - description: "" - - name: valor_rateio_credito - description: "" - - name: quantidade_transacao_rateio_debito - description: "" - - name: valor_rateio_debito - description: "" - - name: quantidade_total_transacao - description: "Quantidade total de transações realizadas" - - name: valor_total_transacao_bruto - description: "Valor total das transações realizadas (R$)" - - name: valor_desconto_taxa - description: "Valor da taxa descontado do valor total (R$)" - - name: valor_total_transacao_liquido - description: "Valor total das transações menos o valor_desconto_taxa (R$)" - - name: quantidade_total_transacao_captura - description: "Quantidade total de transações calculada pela captura de transações" - - name: valor_total_transacao_captura - description: "Valor total das transações realizadas calculada pela captura de transações (R$)" - - name: indicador_ordem_valida - description: "Indicador de validação da ordem de pagamento i.e. se a quantidade e valor total informados são encontrados na captura de transações individuais" - - name: versao - description: "Código de controle de versão do dado (SHA Github)" - - name: dicionario - description: "Dicionário de dados" - columns: - - name: chave - description: "Chave" - - name: cobertura_temporal - description: "Cobertura temporal" - - name: id_tabela - description: "Nome da tabela" - - name: coluna - description: "Nome da coluna" - - name: valor - description: "Valor" - \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql b/queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql deleted file mode 100644 index 0bda3abe..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql +++ /dev/null @@ -1,134 +0,0 @@ --- depends_on: {{ ref('operadoras_contato') }} -{{ - config( - materialized="incremental", - partition_by={ - "field":"data", - "data_type":"date", - "granularity": "day" - }, - unique_key="id_transacao", - ) -}} -WITH transacao_aberta AS ( - SELECT - data, - hora, - id, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.assinatura') AS STRING) AS assinatura, - SAFE_CAST(JSON_VALUE(content, '$.cd_aplicacao') AS STRING) AS cd_aplicacao, - SAFE_CAST(JSON_VALUE(content, '$.cd_emissor') AS STRING) AS cd_emissor, - SAFE_CAST(JSON_VALUE(content, '$.cd_linha') AS STRING) AS cd_linha, - SAFE_CAST(JSON_VALUE(content, '$.cd_matriz_integracao') AS STRING) AS cd_matriz_integracao, - SAFE_CAST(JSON_VALUE(content, '$.cd_operadora') AS STRING) AS cd_operadora, - SAFE_CAST(JSON_VALUE(content, '$.cd_secao') AS STRING) AS cd_secao, - SAFE_CAST(JSON_VALUE(content, '$.cd_status_transacao') AS STRING) AS cd_status_transacao, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E6S%Ez', SAFE_CAST(JSON_VALUE(content, '$.data_processamento') AS STRING)), "America/Sao_Paulo") AS data_processamento, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E6S%Ez', SAFE_CAST(JSON_VALUE(content, '$.data_transacao') AS STRING)), "America/Sao_Paulo") AS data_transacao, - SAFE_CAST(JSON_VALUE(content, '$.id_cliente') AS STRING) AS id_cliente, - SAFE_CAST(JSON_VALUE(content, '$.id_produto') AS STRING) AS id_produto, - SAFE_CAST(JSON_VALUE(content, '$.id_servico') AS STRING) AS id_servico, - SAFE_CAST(JSON_VALUE(content, '$.id_tipo_midia') AS STRING) AS id_tipo_midia, - SAFE_CAST(JSON_VALUE(content, '$.is_abt') AS BOOL) AS is_abt, - SAFE_CAST(JSON_VALUE(content, '$.latitude_trx') AS FLOAT64) AS latitude_trx, - SAFE_CAST(JSON_VALUE(content, '$.longitude_trx') AS FLOAT64) AS longitude_trx, - SAFE_CAST(JSON_VALUE(content, '$.nr_logico_midia_operador') AS STRING) AS nr_logico_midia_operador, - SAFE_CAST(JSON_VALUE(content, '$.numero_serie_validador') AS STRING) AS numero_serie_validador, - SAFE_CAST(JSON_VALUE(content, '$.pan_hash') AS STRING) AS pan_hash, - SAFE_CAST(JSON_VALUE(content, '$.posicao_validador') AS STRING) AS posicao_validador, - SAFE_CAST(JSON_VALUE(content, '$.sentido') AS STRING) AS sentido, - SAFE_CAST(JSON_VALUE(content, '$.tipo_integracao') AS STRING) AS tipo_integracao, - SAFE_CAST(JSON_VALUE(content, '$.tipo_transacao') AS STRING) AS tipo_transacao, - SAFE_CAST(JSON_VALUE(content, '$.uid_origem') AS STRING) AS uid_origem, - SAFE_CAST(JSON_VALUE(content, '$.valor_tarifa') AS FLOAT64) AS valor_tarifa, - SAFE_CAST(JSON_VALUE(content, '$.valor_transacao') AS FLOAT64) AS valor_transacao, - SAFE_CAST(JSON_VALUE(content, '$.veiculo_id') AS STRING) AS veiculo_id, - SAFE_CAST(JSON_VALUE(content, '$.vl_saldo') AS FLOAT64) AS vl_saldo - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "transacao") }} - {% if is_incremental() -%} - WHERE - DATE(data) BETWEEN DATE("{{var('date_range_start')}}") AND DATE("{{var('date_range_end')}}") - AND DATETIME(PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S%Ez', timestamp_captura), "America/Sao_Paulo") BETWEEN DATETIME("{{var('date_range_start')}}") AND DATETIME("{{var('date_range_end')}}") - {%- endif %} -), -transacao_deduplicada AS ( - SELECT - * EXCEPT(rn) - FROM - ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY id ORDER BY timestamp_captura DESC) AS rn - FROM - transacao_aberta - ) - WHERE - rn = 1 -) -SELECT - EXTRACT(DATE FROM data_transacao) AS data, - EXTRACT(HOUR FROM data_transacao) AS hora, - data_transacao AS datetime_transacao, - data_processamento AS datetime_processamento, - t.timestamp_captura AS datetime_captura, - g.ds_grupo AS modo, - dc.id_consorcio AS id_consorcio, - do.id_operadora AS id_operadora, - l.nr_linha AS servico, - sentido, - NULL AS id_veiculo, - COALESCE(id_cliente, pan_hash) AS id_cliente, - id AS id_transacao, - id_tipo_midia AS id_tipo_pagamento, - tipo_transacao AS id_tipo_transacao, - tipo_integracao AS id_tipo_integracao, - NULL AS id_integracao, - latitude_trx AS latitude, - longitude_trx AS longitude, - NULL AS stop_id, - NULL AS stop_lat, - NULL AS stop_lon, - valor_transacao, - '{{ var("version") }}' as versao -FROM - transacao_deduplicada AS t -LEFT JOIN - {{ ref("staging_linha") }} AS l -ON - t.cd_linha = l.cd_linha - AND t.data_transacao >= l.datetime_inclusao -LEFT JOIN - {{ ref("staging_grupo_linha") }} AS gl -ON - t.cd_linha = gl.cd_linha - AND t.data_transacao >= gl.datetime_inicio_validade - AND (t.data_transacao <= gl.datetime_fim_validade OR gl.datetime_fim_validade IS NULL) -LEFT JOIN - {{ ref("staging_grupo") }} AS g -ON - gl.cd_grupo = g.cd_grupo - AND t.data_transacao >= g.datetime_inclusao -LEFT JOIN - {{ ref("staging_linha_consorcio") }} AS lc -ON - t.cd_linha = lc.cd_linha - AND t.data_transacao >= lc.datetime_inicio_validade - AND (t.data_transacao <= lc.datetime_fim_validade OR lc.datetime_fim_validade IS NULL) -LEFT JOIN - {{ ref("staging_consorcio") }} AS c -ON - lc.cd_consorcio = c.cd_consorcio -LEFT JOIN - {{ ref("staging_operadora_transporte") }} AS o -ON - t.cd_operadora = o.cd_operadora_transporte -LEFT JOIN - {{ ref("diretorio_operadoras") }} AS do -ON - t.cd_operadora = do.id_operadora_jae -LEFT JOIN - {{ ref("diretorio_consorcios") }} AS dc -ON - lc.cd_consorcio = dc.id_consorcio_jae diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql deleted file mode 100644 index 3182a75b..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql +++ /dev/null @@ -1,37 +0,0 @@ -{{ - config( - alias='cliente', - ) -}} - -WITH - cliente AS ( - SELECT - data, - SAFE_CAST(CD_CLIENTE AS STRING) AS cd_cliente, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_DOCUMENTO') AS STRING) AS cd_tipo_documento, - SAFE_CAST(JSON_VALUE(content, '$.NM_CLIENTE') AS STRING) AS nm_cliente, - SAFE_CAST(JSON_VALUE(content, '$.NM_CLIENTE_SOCIAL') AS STRING) AS nm_cliente_social, - SAFE_CAST(JSON_VALUE(content, '$.IN_TIPO_PESSOA_FISICA_JURIDICA') AS STRING) AS in_tipo_pessoa_fisica_juridica, - SAFE_CAST(JSON_VALUE(content, '$.NR_DOCUMENTO') AS STRING) AS nr_documento, - SAFE_CAST(JSON_VALUE(content, '$.NR_DOCUMENTO_ALTERNATIVO') AS STRING) AS nr_documento_alternativo, - SAFE_CAST(JSON_VALUE(content, '$.TX_EMAIL') AS STRING) AS tx_email, - SAFE_CAST(JSON_VALUE(content, '$.NR_TELEFONE') AS STRING) AS nr_telefone, - SAFE_CAST(JSON_VALUE(content, '$.DT_CADASTRO') AS STRING) AS dt_cadastro - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "cliente") }} - ), - cliente_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_cliente ORDER BY timestamp_captura DESC) AS rn - FROM - cliente - ) -SELECT - * EXCEPT(rn) -FROM - cliente_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql deleted file mode 100644 index 9e2f51d5..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql +++ /dev/null @@ -1,30 +0,0 @@ -{{ - config( - alias='consorcio', - ) -}} - -WITH - consorcio AS ( - SELECT - data, - SAFE_CAST(CD_CONSORCIO AS STRING) AS cd_consorcio, - timestamp_captura, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - SAFE_CAST(JSON_VALUE(content, '$.NM_CONSORCIO') AS STRING) AS nm_consorcio - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "consorcio") }} - ), - consorcio_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_consorcio ORDER BY timestamp_captura DESC) AS rn - FROM - consorcio - ) -SELECT - * EXCEPT(rn) -FROM - consorcio_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql deleted file mode 100644 index 69dff169..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql +++ /dev/null @@ -1,33 +0,0 @@ -{{ - config( - alias='conta_bancaria', - ) -}} - -WITH - conta_bancaria AS ( - SELECT - data, - SAFE_CAST(CD_CLIENTE AS STRING) AS cd_cliente, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.CD_AGENCIA') AS STRING) AS cd_agencia, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_CONTA') AS STRING) AS cd_tipo_conta, - SAFE_CAST(JSON_VALUE(content, '$.NM_BANCO') AS STRING) AS nm_banco, - SAFE_CAST(JSON_VALUE(content, '$.NR_BANCO') AS STRING) AS nr_banco, - SAFE_CAST(JSON_VALUE(content, '$.NR_CONTA') AS STRING) AS nr_conta, - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "conta_bancaria") }} - ), - conta_bancaria_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_cliente ORDER BY timestamp_captura DESC) AS rn - FROM - conta_bancaria - ) -SELECT - * EXCEPT(rn) -FROM - conta_bancaria_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_contato_pessoa_juridica.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_contato_pessoa_juridica.sql deleted file mode 100644 index 8e26794a..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_contato_pessoa_juridica.sql +++ /dev/null @@ -1,34 +0,0 @@ -{{ - config( - alias='contato_pessoa_juridica', - ) -}} - -WITH - contato_pessoa_juridica AS ( - SELECT - data, - SAFE_CAST(NR_SEQ_CONTATO AS STRING) AS nr_seq_contato, - SAFE_CAST(CD_CLIENTE AS STRING) AS cd_cliente, - timestamp_captura, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - SAFE_CAST(JSON_VALUE(content, '$.NM_CONTATO') AS STRING) AS nm_contato, - SAFE_CAST(JSON_VALUE(content, '$.NR_RAMAL') AS STRING) AS nr_ramal, - SAFE_CAST(JSON_VALUE(content, '$.NR_TELEFONE') AS STRING) AS nr_telefone, - SAFE_CAST(JSON_VALUE(content, '$.TX_EMAIL') AS STRING) AS tx_email, - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "contato_pessoa_juridica") }} - ), - contato_pessoa_juridica_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY nr_seq_contato, cd_cliente ORDER BY timestamp_captura DESC) AS rn - FROM - contato_pessoa_juridica - ) -SELECT - * EXCEPT(rn) -FROM - contato_pessoa_juridica_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql deleted file mode 100644 index 8360a105..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql +++ /dev/null @@ -1,31 +0,0 @@ -{{ - config( - alias='grupo', - ) -}} - -WITH - grupo AS ( - SELECT - data, - timestamp_captura, - SAFE_CAST(CD_GRUPO AS STRING) AS cd_grupo, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_GRUPO') AS STRING) AS cd_tipo_grupo, - SAFE_CAST(JSON_VALUE(content, '$.DS_GRUPO') AS STRING) AS ds_grupo, - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "grupo") }} - ), - grupo_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_grupo ORDER BY timestamp_captura DESC) AS rn - FROM - grupo - ) -SELECT - * EXCEPT(rn) -FROM - grupo_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql deleted file mode 100644 index f38c0f4f..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql +++ /dev/null @@ -1,32 +0,0 @@ -{{ - config( - alias='grupo_linha', - ) -}} - -WITH - grupo_linha AS ( - SELECT - data, - timestamp_captura, - SAFE_CAST(CD_GRUPO AS STRING) AS cd_grupo, - SAFE_CAST(CD_LINHA AS STRING) AS cd_linha, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INICIO_VALIDADE') AS STRING)), "America/Sao_Paulo") AS datetime_inicio_validade, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_FIM_VALIDADE') AS STRING)), "America/Sao_Paulo") AS datetime_fim_validade - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "grupo_linha") }} - ), - grupo_linha_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_grupo, cd_linha ORDER BY timestamp_captura DESC) AS rn - FROM - grupo_linha - ) -SELECT - * EXCEPT(rn) -FROM - grupo_linha_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql deleted file mode 100644 index 5bdf0ef9..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql +++ /dev/null @@ -1,43 +0,0 @@ -{{ - config( - alias='linha', - ) -}} - -WITH - linha AS ( - SELECT - data, - timestamp_captura, - SAFE_CAST(CD_LINHA AS STRING) AS cd_linha, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - SAFE_CAST(JSON_VALUE(content, '$.CD_LINHA_OFICIAL') AS STRING) AS cd_linha_oficial, - SAFE_CAST(JSON_VALUE(content, '$.CD_LOCAL_OPERACAO_LINHA') AS STRING) AS cd_local_operacao_linha, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_CATEGORIA_LINHA') AS STRING) AS cd_tipo_categoria_linha, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_LINHA') AS STRING) AS cd_tipo_linha, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_MATRIZ_CALCULO_SUBSIDIO') AS STRING) AS cd_tipo_matriz_calculo_subsidio, - SAFE_CAST(JSON_VALUE(content, '$.IN_SITUACAO_ATIVIDADE') AS STRING) AS in_situacao_atividade, - SAFE_CAST(JSON_VALUE(content, '$.KM_LINHA') AS FLOAT64) AS km_linha, - SAFE_CAST(JSON_VALUE(content, '$.LATITUDE_DESTINO') AS STRING) AS latitude_destino, - SAFE_CAST(JSON_VALUE(content, '$.LATITUDE_ORIGEM') AS STRING) AS latitude_origem, - SAFE_CAST(JSON_VALUE(content, '$.LONGITUDE_DESTINO') AS STRING) AS longitude_destino, - SAFE_CAST(JSON_VALUE(content, '$.LONGITUDE_ORIGEM') AS STRING) AS longitude_origem, - SAFE_CAST(JSON_VALUE(content, '$.NM_LINHA') AS STRING) AS nm_linha, - SAFE_CAST(JSON_VALUE(content, '$.NR_LINHA') AS STRING) AS nr_linha, - SAFE_CAST(JSON_VALUE(content, '$.QUANTIDADE_SECAO') AS STRING) AS quantidade_secao - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "linha") }} - ), - linha_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_linha ORDER BY timestamp_captura DESC) AS rn - FROM - linha - ) -SELECT - * EXCEPT(rn) -FROM - linha_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql deleted file mode 100644 index a6b2705d..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql +++ /dev/null @@ -1,35 +0,0 @@ -{{ - config( - alias='linha_consorcio', - ) -}} - -WITH - linha_consorcio AS ( - SELECT - data, - timestamp_captura, - SAFE_CAST(CD_CONSORCIO AS STRING) AS cd_consorcio, - SAFE_CAST(CD_LINHA AS STRING) AS cd_linha, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%d', SAFE_CAST(JSON_VALUE(content, '$.DT_INICIO_VALIDADE') AS STRING)), "America/Sao_Paulo") AS datetime_inicio_validade, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%d', SAFE_CAST(JSON_VALUE(content, '$.DT_FIM_VALIDADE') AS STRING)), "America/Sao_Paulo") AS datetime_fim_validade - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "linha_consorcio") }} - ), - linha_consorcio_rn AS ( - SELECT - *, - CASE - WHEN datetime_fim_validade IS NULL THEN ROW_NUMBER() OVER (PARTITION BY cd_linha ORDER BY timestamp_captura DESC, datetime_inicio_validade DESC) - ELSE ROW_NUMBER() OVER (PARTITION BY cd_consorcio, cd_linha ORDER BY timestamp_captura DESC) - END AS rn - FROM - linha_consorcio - ) -SELECT - * EXCEPT(rn) -FROM - linha_consorcio_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql deleted file mode 100644 index b980933c..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql +++ /dev/null @@ -1,34 +0,0 @@ -{{ - config( - alias='operadora_transporte', - ) -}} - -WITH - operadora_transporte AS ( - SELECT - data, - SAFE_CAST(CD_OPERADORA_TRANSPORTE AS STRING) AS cd_operadora_transporte, - timestamp_captura, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S%Ez', SAFE_CAST(JSON_VALUE(content, '$.DT_INCLUSAO') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - SAFE_CAST(JSON_VALUE(content, '$.CD_CLIENTE') AS STRING) AS cd_cliente, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_CLIENTE') AS STRING) AS cd_tipo_cliente, - SAFE_CAST(JSON_VALUE(content, '$.CD_TIPO_MODAL') AS STRING) AS cd_tipo_modal, - SAFE_CAST(JSON_VALUE(content, '$.IN_SITUACAO_ATIVIDADE') AS STRING) AS in_situacao_atividade, - SAFE_CAST(JSON_VALUE(content, '$.DS_TIPO_MODAL') AS STRING) AS ds_tipo_modal - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "operadora_transporte") }} - ), - operadora_transporte_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_operadora_transporte ORDER BY timestamp_captura DESC) AS rn - FROM - operadora_transporte - ) -SELECT - * EXCEPT(rn) -FROM - operadora_transporte_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql deleted file mode 100644 index c62a1f74..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql +++ /dev/null @@ -1,47 +0,0 @@ -{{ - config( - alias='ordem_pagamento', - ) -}} - -WITH - ordem_pagamento AS ( - SELECT - data, - SAFE_CAST(id AS STRING) AS id_ordem_pagamento, - timestamp_captura, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%Ez', SAFE_CAST(JSON_VALUE(content, '$.data_inclusao') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - PARSE_DATE('%Y-%m-%d', SAFE_CAST(JSON_VALUE(content, '$.data_ordem') AS STRING)) AS data_ordem, - PARSE_DATE('%Y-%m-%d', SAFE_CAST(JSON_VALUE(content, '$.data_pagamento') AS STRING)) AS data_pagamento, - SAFE_CAST(JSON_VALUE(content, '$.id_status_ordem') AS STRING) AS id_status_ordem, - SAFE_CAST(JSON_VALUE(content, '$.qtd_debito') AS INTEGER) AS qtd_debito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_gratuidade') AS INTEGER) AS qtd_gratuidade, - SAFE_CAST(JSON_VALUE(content, '$.qtd_integracao') AS INTEGER) AS qtd_integracao, - SAFE_CAST(JSON_VALUE(content, '$.qtd_rateio_credito') AS INTEGER) AS qtd_rateio_credito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_rateio_debito') AS INTEGER) AS qtd_rateio_debito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_vendaabordo') AS INTEGER) AS qtd_vendaabordo, - SAFE_CAST(JSON_VALUE(content, '$.valor_bruto') AS FLOAT64) AS valor_bruto, - SAFE_CAST(JSON_VALUE(content, '$.valor_debito') AS FLOAT64) AS valor_debito, - SAFE_CAST(JSON_VALUE(content, '$.valor_gratuidade') AS FLOAT64) AS valor_gratuidade, - SAFE_CAST(JSON_VALUE(content, '$.valor_integracao') AS FLOAT64) AS valor_integracao, - SAFE_CAST(JSON_VALUE(content, '$.valor_liquido') AS FLOAT64) AS valor_liquido, - SAFE_CAST(JSON_VALUE(content, '$.valor_rateio_credito') AS FLOAT64) AS valor_rateio_credito, - SAFE_CAST(JSON_VALUE(content, '$.valor_rateio_debito') AS FLOAT64) AS valor_rateio_debito, - SAFE_CAST(JSON_VALUE(content, '$.valor_taxa') AS FLOAT64) AS valor_taxa, - SAFE_CAST(JSON_VALUE(content, '$.valor_vendaabordo') AS FLOAT64) AS valor_vendaabordo - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "ordem_pagamento") }} - ), - ordem_pagamento_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY id_ordem_pagamento ORDER BY timestamp_captura DESC) AS rn - FROM - ordem_pagamento - ) -SELECT - * EXCEPT(rn) -FROM - ordem_pagamento_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql deleted file mode 100644 index c6366092..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql +++ /dev/null @@ -1,52 +0,0 @@ -{{ - config( - alias='ordem_ressarcimento', - ) -}} - -WITH - ordem_ressarcimento AS ( - SELECT - data, - SAFE_CAST(id AS STRING) AS id_ordem_ressarcimento, - timestamp_captura, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%Ez', SAFE_CAST(JSON_VALUE(content, '$.data_inclusao') AS STRING)), "America/Sao_Paulo") AS datetime_inclusao, - PARSE_DATE('%Y-%m-%d', SAFE_CAST(JSON_VALUE(content, '$.data_ordem') AS STRING)) AS data_ordem, - SAFE_CAST(JSON_VALUE(content, '$.id_consorcio') AS STRING) AS id_consorcio, - SAFE_CAST(JSON_VALUE(content, '$.id_linha') AS STRING) AS id_linha, - SAFE_CAST(JSON_VALUE(content, '$.id_operadora') AS STRING) AS id_operadora, - SAFE_CAST(JSON_VALUE(content, '$.id_ordem_pagamento') AS STRING) AS id_ordem_pagamento, - SAFE_CAST(JSON_VALUE(content, '$.id_ordem_pagamento_consorcio') AS STRING) AS id_ordem_pagamento_consorcio, - SAFE_CAST(JSON_VALUE(content, '$.id_ordem_pagamento_consorcio_operadora') AS STRING) AS id_ordem_pagamento_consorcio_operadora, - SAFE_CAST(JSON_VALUE(content, '$.id_status_ordem') AS STRING) AS id_status_ordem, - SAFE_CAST(JSON_VALUE(content, '$.qtd_debito') AS INTEGER) AS qtd_debito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_gratuidade') AS INTEGER) AS qtd_gratuidade, - SAFE_CAST(JSON_VALUE(content, '$.qtd_integracao') AS INTEGER) AS qtd_integracao, - SAFE_CAST(JSON_VALUE(content, '$.qtd_rateio_credito') AS INTEGER) AS qtd_rateio_credito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_rateio_debito') AS INTEGER) AS qtd_rateio_debito, - SAFE_CAST(JSON_VALUE(content, '$.qtd_vendaabordo') AS INTEGER) AS qtd_vendaabordo, - SAFE_CAST(JSON_VALUE(content, '$.valor_bruto') AS FLOAT64) AS valor_bruto, - SAFE_CAST(JSON_VALUE(content, '$.valor_debito') AS FLOAT64) AS valor_debito, - SAFE_CAST(JSON_VALUE(content, '$.valor_gratuidade') AS FLOAT64) AS valor_gratuidade, - SAFE_CAST(JSON_VALUE(content, '$.valor_integracao') AS FLOAT64) AS valor_integracao, - SAFE_CAST(JSON_VALUE(content, '$.valor_liquido') AS FLOAT64) AS valor_liquido, - SAFE_CAST(JSON_VALUE(content, '$.valor_rateio_credito') AS FLOAT64) AS valor_rateio_credito, - SAFE_CAST(JSON_VALUE(content, '$.valor_rateio_debito') AS FLOAT64) AS valor_rateio_debito, - SAFE_CAST(JSON_VALUE(content, '$.valor_taxa') AS FLOAT64) AS valor_taxa, - SAFE_CAST(JSON_VALUE(content, '$.valor_vendaabordo') AS FLOAT64) AS valor_vendaabordo - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "ordem_ressarcimento") }} - ), - ordem_ressarcimento_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY id_ordem_ressarcimento ORDER BY timestamp_captura DESC) AS rn - FROM - ordem_ressarcimento - ) -SELECT - * EXCEPT(rn) -FROM - ordem_ressarcimento_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql deleted file mode 100644 index f875a626..00000000 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql +++ /dev/null @@ -1,33 +0,0 @@ -{{ - config( - alias='pessoa_juridica', - ) -}} - -WITH - pessoa_juridica AS ( - SELECT - data, - SAFE_CAST(CD_CLIENTE AS STRING) AS cd_cliente, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.NM_RAZAO_SOCIAL') AS STRING) AS nm_razao_social, - SAFE_CAST(JSON_VALUE(content, '$.NM_FANTASIA') AS STRING) AS nm_fantasia, - SAFE_CAST(JSON_VALUE(content, '$.NR_INSCRICAO_ESTADUAL_MUNICIPAL') AS STRING) AS nr_inscricao_estadual_municipal, - SAFE_CAST(JSON_VALUE(content, '$.TX_EMAIL_ALTERNATIVO') AS STRING) AS tx_email_alternativo, - SAFE_CAST(JSON_VALUE(content, '$.NR_DOCUMENTO') AS STRING) AS nr_documento, - FROM - {{ source("br_rj_riodejaneiro_bilhetagem_staging", "pessoa_juridica") }} - ), - pessoa_juridica_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY cd_cliente ORDER BY timestamp_captura DESC) AS rn - FROM - pessoa_juridica - ) -SELECT - * EXCEPT(rn) -FROM - pessoa_juridica_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_filtrada.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_filtrada.sql deleted file mode 100644 index d4fee6f1..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_filtrada.sql +++ /dev/null @@ -1,71 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - } - ) -}} -/* -- Descrição: -Filtragem e tratamento básico de registros de gps. -1. Filtra registros antigos. Remove registros que tem diferença maior - que 1 minuto entre o timestamp_captura e timestamp_gps. -2. Filtra registros que estão fora de uma caixa que contém a área do - município de Rio de Janeiro. -*/ -WITH -box AS ( - /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ - SELECT - * - FROM - {{ var('limites_caixa') }}), -gps AS ( - /* 1. Filtra registros antigos. Remove registros que tem diferença maior - que 1 minuto entre o timestamp_captura e timestamp_gps.*/ - SELECT - *, - ST_GEOGPOINT(longitude, latitude) posicao_veiculo_geo - FROM - {{ ref('brt_registros_desaninhada') }} - {% if is_incremental() -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <= "{{var('date_range_end')}}" - AND DATETIME_DIFF(timestamp_captura, timestamp_gps, MINUTE) BETWEEN 0 AND 1 - {%- endif %} - ), -filtrada AS ( - /* 2. Filtra registros que estão fora de uma caixa que contém a área do - município de Rio de Janeiro.*/ - SELECT - id_veiculo, - latitude, - longitude, - posicao_veiculo_geo, - velocidade, - servico, - timestamp_gps, - timestamp_captura, - data, - hora, - row_number() over (partition by id_veiculo, timestamp_gps, servico) rn - FROM - gps - WHERE - ST_INTERSECTSBOX(posicao_veiculo_geo, - ( SELECT min_longitude FROM box), - ( SELECT min_latitude FROM box), - ( SELECT max_longitude FROM box), - ( SELECT max_latitude FROM box)) - ) -SELECT - * except(rn), - "{{ var("version") }}" as versao -FROM - filtrada -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_flag_trajeto_correto.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_flag_trajeto_correto.sql deleted file mode 100644 index d85a58ea..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_flag_trajeto_correto.sql +++ /dev/null @@ -1,93 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} -/* -Descrição: -Calcula se o veículo está dentro do trajeto correto dado o traçado (shape) cadastrado no SIGMOB em relação à linha que está sendo -transmitida. -1. Calcula as intersecções definindo um 'buffer', utilizado por st_dwithin para identificar se o ponto está à uma -distância menor ou igual ao tamanho do buffer em relação ao traçado definido no SIGMOB. -2. Calcula um histórico de intersecções nos ultimos 10 minutos de registros de cada carro. Definimos que o carro é -considerado fora do trajeto definido se a cada 10 minutos, ele não esteve dentro do traçado planejado pelo menos uma -vez. -3. Identifica se a linha informada no registro capturado existe nas definições presentes no SIGMOB. -4. Definimos em outra tabela uma 'data_versao_efetiva', esse passo serve tanto para definir qual versão do SIGMOB utilizaremos em -caso de falha na captura, quanto para definir qual versão será utilizada para o cálculo retroativo do histórico de registros que temos. -5. Como não conseguimos identificar o itinerário que o carro está realizando, no passo counts, os resultados de -intersecções são dobrados, devido ao fato de cada linha apresentar dois itinerários possíveis (ida/volta). Portanto, -ao final, realizamos uma agregação LOGICAL_OR que é true caso o carro esteja dentro do traçado de algum dos itinerários -possíveis para a linha informada. -*/ -WITH - registros AS ( - SELECT id_veiculo, servico as linha, latitude, longitude, data, posicao_veiculo_geo, timestamp_gps - FROM - {{ ref('brt_aux_registros_filtrada') }} r - {% if not flags.FULL_REFRESH -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {%- endif %} - ), - intersec AS ( - SELECT - r.*, - s.data_versao, - s.linha_gtfs, - s.route_id, - -- 1. Buffer e intersecções - CASE - WHEN st_dwithin(shape, posicao_veiculo_geo, {{ var('tamanho_buffer_metros') }}) THEN TRUE - ELSE FALSE - END AS flag_trajeto_correto, - -- 2. Histórico de intersecções nos últimos 10 minutos a partir da timestamp_gps atual - CASE - WHEN - COUNT(CASE WHEN st_dwithin(shape, posicao_veiculo_geo, {{ var('tamanho_buffer_metros') }}) THEN 1 END) - OVER (PARTITION BY id_veiculo - ORDER BY UNIX_SECONDS(TIMESTAMP(timestamp_gps)) - RANGE BETWEEN {{ var('intervalo_max_desvio_segundos') }} PRECEDING AND CURRENT ROW) >= 1 - THEN True - ELSE False - END AS flag_trajeto_correto_hist, - -- 3. Identificação de cadastro da linha no SIGMOB - CASE WHEN s.linha_gtfs IS NULL THEN False ELSE True END AS flag_linha_existe_sigmob, - -- 4. Join com data_versao_efetiva para definição de quais shapes serão considerados no cálculo das flags - FROM registros r - LEFT JOIN ( - SELECT * - FROM {{ ref('shapes_geom') }} - WHERE id_modal_smtr in ({{ var('brt_id_modal_smtr')|join(', ') }}) - AND data_versao = "{{var('versao_fixa_sigmob')}}" - ) s - ON - r.linha = s.linha_gtfs - ) - -- 5. Agregação com LOGICAL_OR para evitar duplicação de registros - SELECT - id_veiculo, - linha as servico, - linha_gtfs, - route_id, - data, - timestamp_gps, - LOGICAL_OR(flag_trajeto_correto) AS flag_trajeto_correto, - LOGICAL_OR(flag_trajeto_correto_hist) AS flag_trajeto_correto_hist, - LOGICAL_OR(flag_linha_existe_sigmob) AS flag_linha_existe_sigmob, - -- STRUCT({{ maestro_sha }} AS versao_maestro, - -- {{ maestro_bq_sha }} AS versao_maestro_bq, - -- data_versao AS data_versao_sigmob - -- ) versao - FROM - intersec i - GROUP BY - id_veiculo, - linha, - linha_gtfs, - route_id, - data, - data_versao, - timestamp_gps - \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_parada.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_parada.sql deleted file mode 100644 index eef00ee3..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_parada.sql +++ /dev/null @@ -1,71 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} -/* -Descrição: -Identifica veículos parados em terminais ou garagens conhecidas. -1. Selecionamos os terminais conhecidos e uma geometria do tipo polígono (Polygon) que contém buracos nas -localizações das garagens. -2. Calculamos as distâncias do veículos em relação aos terminais conhecidos. Definimos aqui a coluna 'nrow', -que identifica qual o terminal que está mais próximo do ponto informado. No passo final, recuperamos apenas -os dados com nrow = 1 (menor distância em relação à posição do veículo) -3. Definimos uma distancia_limiar_parada. Caso o veículo esteja a uma distância menor que este valor de uma -parada, será considerado como parado no terminal com menor distancia. -4. Caso o veiculo não esteja intersectando o polígono das garagens, ele será considerado como parado dentro -de uma garagem (o polígono é vazado nas garagens, a não intersecção implica em estar dentro de um dos 'buracos'). -*/ -WITH - terminais as ( - -- 1. Selecionamos terminais, criando uma geometria de ponto para cada. - select - ST_GEOGPOINT(longitude, latitude) ponto_parada, nome_estacao nome_parada, 'terminal' tipo_parada - from {{ var('brt_terminais') }} - ), - garagem_polygon AS ( - -- 1. Selecionamos o polígono das garagens. - SELECT ST_GEOGFROMTEXT(WKT,make_valid => true) AS poly - FROM {{ var('polygon_garagem') }} - ), - distancia AS ( - --2. Calculamos as distâncias e definimos nrow - SELECT - id_veiculo, - timestamp_gps, - data, - servico, - posicao_veiculo_geo, - nome_parada, - tipo_parada, - ROUND(ST_DISTANCE(posicao_veiculo_geo, ponto_parada), 1) distancia_parada, - ROW_NUMBER() OVER (PARTITION BY timestamp_gps, id_veiculo, servico ORDER BY ST_DISTANCE(posicao_veiculo_geo, ponto_parada)) nrow - FROM terminais p - JOIN ( - SELECT * - FROM - {{ ref('brt_aux_registros_filtrada') }} - {% if not flags.FULL_REFRESH -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {% endif %} - ) r - on 1=1 - ) -SELECT - data, - id_veiculo, - timestamp_gps, - servico, - /* - 3. e 4. Identificamos o status do veículo como 'terminal', 'garagem' (para os veículos parados) ou - 'nao_identificado' (para os veículos mais distantes de uma parada que o limiar definido) - */ - case - when distancia_parada < {{ var('distancia_limiar_parada') }} then tipo_parada - when not ST_INTERSECTS(posicao_veiculo_geo, (SELECT poly FROM garagem_polygon)) then 'garagem' - else null - end tipo_parada, -FROM distancia -WHERE nrow = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_velocidade.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_velocidade.sql deleted file mode 100644 index 3fed5312..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_aux_registros_velocidade.sql +++ /dev/null @@ -1,92 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} -/* -Descrição: -Estimativa das velocidades dos veículos nos últimos 10 minutos contados a partir da timestamp_gps atual. -Essa metodologia serve para determinar quais carros estão em movimento e quais estão parados. -1. Calculamos a velocidade do veículo no último trecho de 10 minutos de operação. -A implementação utiliza a função 'first_value' com uma janela (cláusula 'over') de até 10 minutos anteriores à -timestamp_gps atual e calcula a distância do ponto mais antigo (o first_value na janela) ao ponto atual (posicao_veiculo_geo). -Dividimos essa distância pela diferença de tempo entre a timestamp_gps atual e a timestamp_gps do ponto mais -antigo da janela (o qual recuperamos novamente com o uso de first_value). -Esta diferença de tempo (datetime_diff) é calculada em segundos, portanto multiplicamos o resultado da divisão por um fator -3.6 para que a velocidade esteja em quilômetros por hora. O resultado final é arrendondado sem casas decimais. -Por fim, cobrimos esse cálculo com a função 'if_null' e retornamos zero para a velocidade em casos onde a divisão retornaria -um valor nulo. -2. Após o calculo da velocidade, definimos a coluna 'status_movimento'. Veículos abaixo da 'velocidade_limiar_parado', são -considerados como 'parado'. Caso contrário, são considerados 'andando' -*/ -with - t_velocidade as ( - select - data, - id_veiculo, - timestamp_gps, - servico, - ST_DISTANCE( - posicao_veiculo_geo, - lag(posicao_veiculo_geo) over ( - partition by id_veiculo, servico - order by timestamp_gps) - ) distancia, - IFNULL( - SAFE_DIVIDE( - ST_DISTANCE( - posicao_veiculo_geo, - lag(posicao_veiculo_geo) over ( - partition by id_veiculo, servico - order by timestamp_gps) - ), - DATETIME_DIFF( - timestamp_gps, - lag(timestamp_gps) over ( - partition by id_veiculo, servico - order by timestamp_gps), - SECOND - )), - 0 - ) * 3.6 velocidade - FROM {{ ref('brt_aux_registros_filtrada') }} - {% if not flags.FULL_REFRESH -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {% endif %} - ), - medias as ( - select - data, - id_veiculo, - timestamp_gps, - servico, - distancia, - velocidade, # velocidade do pontual - AVG(velocidade) OVER ( - PARTITION BY id_veiculo, servico - ORDER BY unix_seconds(timestamp(timestamp_gps)) - RANGE BETWEEN {{ var('janela_movel_velocidade') }} PRECEDING AND CURRENT ROW - ) velocidade_media # velocidade com média móvel - from t_velocidade - ) -SELECT - timestamp_gps, - data, - id_veiculo, - servico, - distancia, - ROUND( - CASE WHEN velocidade_media > {{ var('velocidade_maxima') }} - THEN {{ var('velocidade_maxima') }} - ELSE velocidade_media - END, - 1) as velocidade, - -- 2. Determinação do estado de movimento do veículo. - case - when velocidade_media < {{ var('velocidade_limiar_parado') }} then false - else true - end flag_em_movimento, - -- STRUCT({{ maestro_sha }} AS versao_maestro, {{ maestro_bq_sha }} AS versao_maestro_bq) versao -FROM medias \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql deleted file mode 100644 index 5758fc61..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql +++ /dev/null @@ -1,9 +0,0 @@ -SELECT - SAFE_CAST(id_veiculo AS STRING) id_veiculo, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_gps), "America/Sao_Paulo" ) AS DATETIME) timestamp_gps, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, - REPLACE(content,"None","") content, - data, - hora -from - {{var('brt_registros_staging')}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql deleted file mode 100644 index b9773e34..00000000 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql +++ /dev/null @@ -1,12 +0,0 @@ -SELECT -data, -hora, -id_veiculo, -timestamp_gps, -timestamp_captura, -SAFE_CAST(json_value(content,"$.latitude") AS FLOAT64) latitude, -SAFE_CAST(json_value(content,"$.longitude") AS FLOAT64) longitude, -json_value(content,"$.servico") servico, -json_value(content,"$.sentido") sentido, -SAFE_CAST(json_value(content,"$.velocidade") AS INT64) velocidade, -from {{ ref('brt_registros') }} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql deleted file mode 100644 index 7e40699b..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql +++ /dev/null @@ -1,18 +0,0 @@ -{{ config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['agency_id', 'data_versao'], - alias = 'agency', -) }} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(agency_id AS STRING) agency_id, - SAFE_CAST(JSON_VALUE(content, '$.agency_name') AS STRING) agency_name, - SAFE_CAST(JSON_VALUE(content, '$.agency_url') AS STRING) agency_url, - SAFE_CAST(JSON_VALUE(content, '$.agency_timezone') AS STRING) agency_timezone, - SAFE_CAST(JSON_VALUE(content, '$.agency_lang') AS STRING) agency_lang, - '{{ var("version") }}' as versao_modelo - FROM {{ source('br_rj_riodejaneiro_gtfs_staging', 'agency') }} - WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/calendar_dates_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/calendar_dates_gtfs.sql deleted file mode 100644 index 98612dd1..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/calendar_dates_gtfs.sql +++ /dev/null @@ -1,19 +0,0 @@ -{{ config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['service_id', 'date', 'data_versao'], - alias = 'calendar_dates' -) }} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(service_id AS STRING) service_id, - PARSE_DATE('%Y%m%d', SAFE_CAST(date AS STRING)) date, - SAFE_CAST(JSON_VALUE(content, '$.exception_type') AS STRING) exception_type, - '{{ var("version") }}' as versao_modelo -FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'calendar_dates' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql deleted file mode 100644 index 81f7b2b4..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql +++ /dev/null @@ -1,26 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['service_id', 'data_versao'], - alias = 'calendar' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(service_id AS STRING) service_id, - SAFE_CAST(JSON_VALUE(content, '$.monday') AS STRING) monday, - SAFE_CAST(JSON_VALUE(content, '$.tuesday') AS STRING) tuesday, - SAFE_CAST(JSON_VALUE(content, '$.wednesday') AS STRING) wednesday, - SAFE_CAST(JSON_VALUE(content, '$.thursday') AS STRING) thursday, - SAFE_CAST(JSON_VALUE(content, '$.friday') AS STRING) friday, - SAFE_CAST(JSON_VALUE(content, '$.saturday') AS STRING) saturday, - SAFE_CAST(JSON_VALUE(content, '$.sunday') AS STRING) sunday, - PARSE_DATE('%Y%m%d', SAFE_CAST(JSON_VALUE(content, '$.start_date') AS STRING)) start_date, - PARSE_DATE('%Y%m%d', SAFE_CAST(JSON_VALUE(content, '$.end_date') AS STRING)) end_date, - '{{ var("version") }}' as versao_modelo - FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'calendar' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql deleted file mode 100644 index 9aa93e40..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql +++ /dev/null @@ -1,23 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['fare_id', 'data_versao'], - alias = 'fare_attributes' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(fare_id AS STRING) fare_id, - SAFE_CAST(JSON_VALUE(content, '$.price') AS FLOAT64) price, - SAFE_CAST(JSON_VALUE(content, '$.currency_type') AS STRING) currency_type, - SAFE_CAST(JSON_VALUE(content, '$.payment_method') AS STRING) payment_method, - SAFE_CAST(JSON_VALUE(content, '$.transfers') AS STRING) transfers, - SAFE_CAST(JSON_VALUE(content, '$.agency_id') AS STRING) agency_id, - SAFE_CAST(JSON_VALUE(content, '$.transfer_duration') AS INT64) transfer_duration, - '{{ var("version") }}' as versao_modelo -FROM {{source( - 'br_rj_riodejaneiro_gtfs_staging', - 'fare_attributes' - )}} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql deleted file mode 100644 index 27d72b8d..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql +++ /dev/null @@ -1,22 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['fare_id', 'data_versao'], - alias = 'fare_rules' -)}} - - -SELECT - SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(JSON_VALUE(content, '$.fare_id') AS STRING) fare_id, - SAFE_CAST(JSON_VALUE(content, '$.route_id') AS STRING) route_id, - SAFE_CAST(JSON_VALUE(content, '$.origin_id') AS STRING) origin_id, - SAFE_CAST(JSON_VALUE(content, '$.destination_id') AS STRING) destination_id, - SAFE_CAST(JSON_VALUE(content, '$.contains_id') AS STRING) contains_id, - '{{ var("version") }}' as versao_modelo - FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'fare_rules' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql deleted file mode 100644 index c2620a06..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql +++ /dev/null @@ -1,25 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['feed_publisher_name', 'data_versao'], - alias = 'feed_info' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(feed_publisher_name AS STRING) feed_publisher_name, - SAFE_CAST(JSON_VALUE(content, '$.feed_publisher_url') AS STRING) feed_publisher_url, - SAFE_CAST(JSON_VALUE(content, '$.feed_lang') AS STRING) feed_lang, - SAFE_CAST(JSON_VALUE(content, '$.default_lang') AS STRING) default_lang, - PARSE_DATE('%Y%m%d', SAFE_CAST(JSON_VALUE(content, '$.feed_start_date') AS STRING)) feed_start_date, - PARSE_DATE('%Y%m%d', SAFE_CAST(JSON_VALUE(content, '$.feed_end_date') AS STRING)) feed_end_date, - SAFE_CAST(JSON_VALUE(content, '$.feed_version') AS STRING) feed_version, - SAFE_CAST(JSON_VALUE(content, '$.feed_contact_email') AS STRING) feed_contact_email, - SAFE_CAST(JSON_VALUE(content, '$.feed_contact_url') AS STRING) feed_contact_url, - '{{ var("version") }}' as versao_modelo - FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'feed_info' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql deleted file mode 100644 index 4573ebaa..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql +++ /dev/null @@ -1,18 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['trip_id', 'start_time', 'data_versao'], - alias = 'frequencies' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(trip_id AS STRING) trip_id, - SAFE_CAST(start_time AS STRING) start_time, - SAFE_CAST(JSON_VALUE(content, '$.end_time') AS STRING) end_time, - SAFE_CAST(JSON_VALUE(content, '$.headway_secs') AS INT64) headway_secs, - SAFE_CAST(JSON_VALUE(content, '$.exact_times') AS STRING) exact_times, - '{{ var("version") }}' as versao_modelo - FROM {{source('br_rj_riodejaneiro_gtfs_staging', 'frequencies')}} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql b/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql deleted file mode 100644 index 12651e2e..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql +++ /dev/null @@ -1,68 +0,0 @@ -{{ config( - materialized="view" -) }} - -WITH - data_versao AS ( - SELECT - data_versao, - data_versao AS data_inicio, - COALESCE(DATE_SUB(LEAD(data_versao) OVER (ORDER BY data_versao), INTERVAL 1 DAY), LAST_DAY(data_versao, MONTH)) AS data_fim - FROM ( - SELECT - DISTINCT data_versao, - FROM - {{ ref("ordem_servico_gtfs") }} )), - ordem_servico_pivot AS ( - SELECT - * - FROM - {{ ref("ordem_servico_gtfs") }} - PIVOT( MAX(partidas_ida) AS partidas_ida, - MAX(partidas_volta) AS partidas_volta, - MAX(viagens_planejadas) AS viagens_planejadas, - MAX(distancia_total_planejada) AS km FOR - tipo_dia IN ( - 'Dia Útil' AS du, - 'Ponto Facultativo' AS pf, - 'Sabado' AS sab, - 'Domingo' AS dom ))) -SELECT - DATA, - tipo_dia, - servico, - vista, - consorcio, - sentido, - CASE - {% set tipo_dia = {"Dia Útil": "du", "Ponto Facultativo": "pf", "Sabado": "sab", "Domingo": "dom"} %} - {% set sentido = {"ida": ("I", "C"), "volta": "V"} %} - {%- for key_s, value_s in sentido.items() %} - {%- for key_td, value_td in tipo_dia.items() %} - WHEN sentido {% if key_s == "ida" %} IN {{ value_s }} {% else %} = "{{ value_s }}" {% endif %} AND tipo_dia = "{{ key_td }}" THEN {% if key_td in ["Sabado", "Domingo"] %} ROUND(SAFE_DIVIDE((partidas_{{ key_s }}_du * km_{{ value_td }}), km_du)) {% else %} partidas_{{ key_s }}_{{ value_td }} {% endif %} - {% endfor -%} - {% endfor -%} -END - AS viagens_planejadas, - horario_inicio AS inicio_periodo, - horario_fim AS fim_periodo -FROM - UNNEST(GENERATE_DATE_ARRAY((SELECT MIN(data_inicio) FROM data_versao), (SELECT MAX(data_fim) FROM data_versao))) AS DATA -LEFT JOIN - data_versao AS d -ON - DATA BETWEEN d.data_inicio - AND d.data_fim -LEFT JOIN - {{ ref("subsidio_data_versao_efetiva") }} AS sd -USING - (DATA) -LEFT JOIN - ordem_servico_pivot AS o -USING - (data_versao) -LEFT JOIN - {{ ref("servicos_sentido") }} -USING - (data_versao, - servico) diff --git a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_gtfs.sql deleted file mode 100644 index 3aaf19ce..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_gtfs.sql +++ /dev/null @@ -1,73 +0,0 @@ -{{ config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['servico', 'data_versao'], - alias = 'ordem_servico' -) }} - -WITH ordem_servico AS ( - SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(servico AS STRING) servico, - SAFE_CAST(JSON_VALUE(content, '$.vista') AS STRING) vista, - SAFE_CAST(JSON_VALUE(content, '$.consorcio') AS STRING) consorcio, - SAFE_CAST(JSON_VALUE(content, '$.horario_inicio') AS STRING) horario_inicio, - SAFE_CAST(JSON_VALUE(content, '$.horario_fim') AS STRING) horario_fim, - SAFE_CAST(JSON_VALUE(content, '$.extensao_ida') AS FLOAT64) extensao_ida, - SAFE_CAST(JSON_VALUE(content, '$.extensao_volta') AS FLOAT64) extensao_volta, - SAFE_CAST(JSON_VALUE(content, '$.partidas_ida_du') AS INT64) partidas_ida_du, - SAFE_CAST(JSON_VALUE(content, '$.partidas_volta_du') AS INT64) partidas_volta_du, - SAFE_CAST(JSON_VALUE(content, '$.viagens_du') AS FLOAT64) viagens_du, - SAFE_CAST(JSON_VALUE(content, '$.km_dia_util') AS FLOAT64) km_du, - SAFE_CAST(JSON_VALUE(content, '$.partidas_ida_pf') AS INT64) partidas_ida_pf, - SAFE_CAST(JSON_VALUE(content, '$.partidas_volta_pf') AS INT64) partidas_volta_pf, - SAFE_CAST(JSON_VALUE(content, '$.viagens_pf') AS FLOAT64) viagens_pf, - SAFE_CAST(JSON_VALUE(content, '$.km_pf') AS FLOAT64) km_pf, - NULL partidas_ida_sabado, - NULL partidas_volta_sabado, - SAFE_CAST(NULL AS FLOAT64) viagens_sabado, - SAFE_CAST(JSON_VALUE(content, '$.km_sabado') AS FLOAT64) km_sabado, - NULL partidas_ida_domingo, - NULL partidas_volta_domingo, - SAFE_CAST(NULL AS FLOAT64) viagens_domingo, - SAFE_CAST(JSON_VALUE(content, '$.km_domingo') AS FLOAT64) km_domingo, - '{{ var("version") }}' as versao_modelo - FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'ordem_servico' - ) }} - WHERE data_versao = '{{ var("data_versao_gtfs") }}') -SELECT * -FROM ordem_servico UNPIVOT ( - ( - partidas_ida, - partidas_volta, - viagens_planejadas, - distancia_total_planejada - ) FOR tipo_dia IN ( - ( - partidas_ida_du, - partidas_volta_du, - viagens_du, - km_du - ) AS 'Dia Útil', - ( - partidas_ida_pf, - partidas_volta_pf, - viagens_pf, - km_pf - ) AS 'Ponto Facultativo', - ( - partidas_ida_sabado, - partidas_volta_sabado, - viagens_sabado, - km_sabado - ) AS 'Sabado', - ( - partidas_ida_domingo, - partidas_volta_domingo, - viagens_domingo, - km_domingo - ) AS 'Domingo' - ) - ) diff --git a/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql deleted file mode 100644 index a3da2df7..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql +++ /dev/null @@ -1,29 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['route_id', 'data_versao'], - alias = 'routes' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(route_id AS STRING) route_id, - SAFE_CAST(JSON_VALUE(content, '$.agency_id') AS STRING) agency_id, - SAFE_CAST(JSON_VALUE(content, '$.route_short_name') AS STRING) route_short_name, - SAFE_CAST(JSON_VALUE(content, '$.route_long_name') AS STRING) route_long_name, - SAFE_CAST(JSON_VALUE(content, '$.route_desc') AS STRING) route_desc, - SAFE_CAST(JSON_VALUE(content, '$.route_type') AS STRING) route_type, - SAFE_CAST(JSON_VALUE(content, '$.route_url') AS STRING) route_url, - SAFE_CAST(JSON_VALUE(content, '$.route_color') AS STRING) route_color, - SAFE_CAST(JSON_VALUE(content, '$.route_text_color') AS STRING) route_text_color, - SAFE_CAST(JSON_VALUE(content, '$.route_sort_order') AS INT64) route_sort_order, - SAFE_CAST(JSON_VALUE(content, '$.continuous_pickup') AS STRING) continuous_pickup, - SAFE_CAST(JSON_VALUE(content, '$.continuous_drop_off') AS STRING) continuous_drop_off, - SAFE_CAST(JSON_VALUE(content, '$.network_id') AS STRING) network_id, - '{{ var("version") }}' as versao_modelo - FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'routes' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/schema.yml b/queries/models/br_rj_riodejaneiro_gtfs/schema.yml deleted file mode 100644 index 25594898..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/schema.yml +++ /dev/null @@ -1,342 +0,0 @@ -version: 2 -sources: - - name: "br_rj_riodejaneiro_gtfs" - -models: - - name: agency_gtfs - description: "Agência de transporte público com serviços representados neste conjunto de dados." - columns: - - name: agency_id - description: "Identifica uma marca de transporte público que geralmente é sinônimo de agência de transporte público." - - name: agency_name - description: "Nome completo da agência de transporte público." - - name: agency_url - description: "URL da agência de transporte público." - - name: agency_timezone - description: "Fuso horário onde a agência de transporte público está localizada" - - name: agency_lang - description: "Idioma principal usado por esta agência de transporte público." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: calendar_gtfs - description: "Datas de serviço especificadas usando uma programação semanal com datas de início e término." - columns: - - name: service_id - description: "Identifica um conjunto de datas em que o serviço está disponível para uma ou mais rotas." - - name: monday - description: "Indica se o serviço funciona todas as segundas-feiras no intervalo de datas especificado pelos campos start_date e end_date" - - name: tuesday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica às terças-feiras." - - name: wednesday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica às quartas-feiras." - - name: thursday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica às quintas-feiras." - - name: friday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica às sextas-feiras." - - name: saturday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica aos sábados." - - name: sunday - description: "Funciona da mesma forma que segunda-feira, exceto se aplica aos domingos." - - name: start_date - description: "Inicie o dia de serviço para o intervalo de serviço." - - name: end_date - description: "Finalize o dia de serviço para o intervalo de serviço." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: calendar_dates_gtfs - description: "Exceções para os serviços definidos no calendar.txt." - columns: - - name: service_id - description: "Identifica um conjunto de datas quando ocorre uma exceção de serviço para uma ou mais rotas" - - name: date - description: "Data em que ocorre a exceção de serviço." - - name: exception_type - description: "Indica se o serviço está disponível na data especificada no campo de data." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: fare_attributes_gtfs - description: "Informações sobre tarifas para rotas de uma agência de transporte público." - columns: - - name: fare_id - description: "Identifica uma classe de tarifa." - - name: price - description: "Preço da tarifa, na unidade especificada por currency_type." - - name: currency_type - description: "Moeda usada para pagar a tarifa." - - name: payment_method - description: "Indica quando a tarifa deve ser paga." - - name: transfers - description: "Indica o número de transferências permitidas nesta tarifa" - - name: agency_id - description: "Identifica a agência relevante para uma tarifa." - - name: transfer_duration - description: "Período de tempo em segundos antes que uma transferência expire." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: fare_rules_gtfs - description: "Regras para aplicação de tarifas de itinerários." - columns: - - name: fare_id - description: "Identifica uma classe de tarifa." - - name: route_id - description: "Identifica uma rota associada à classe de tarifa." - - name: origin_id - description: "Identifica uma zona de origem." - - name: destination_id - description: "Identifica uma zona de destino." - - name: contains_id - description: "Identifica as zonas nas quais um passageiro entrará ao usar uma determinada classe de tarifa." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: feed_info_gtfs - description: "Metadados do conjunto de dados, incluindo informações sobre editor, versão e expiração." - columns: - - name: feed_publisher_name - description: "Nome completo da organização que publica o conjunto de dados." - - name: feed_publisher_url - description: "URL do site da organização que publica o conjunto de dados." - - name: feed_lang - description: "Idioma padrão usado para o texto neste conjunto de dados." - - name: default_lang - description: "Define o idioma que deve ser usado quando o consumidor de dados não conhece o idioma do passageiro." - - name: feed_start_date - description: "O conjunto de dados fornece informações de programação completas e confiáveis ​​para serviço no período que vai do início do dia feed_start_date até o final do dia feed_end_date." - - name: feed_end_date - description: "O conjunto de dados fornece informações de programação completas e confiáveis ​​para serviço no período que vai do início do dia feed_start_date até o final do dia feed_end_date." - - name: feed_version - description: "String que indica a versão atual do conjunto de dados GTFS." - - name: feed_contact_email - description: "Endereço de e-mail para comunicação sobre o conjunto de dados GTFS e práticas de publicação de dados." - - name: feed_contact_url - description: "n, um formulário web, suporte técnico ou outras ferramentas para comunicação sobre o conjunto de dados GTFS e práticas de publicação de dados." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: frequencies_gtfs - description: "Intervalo (tempo entre viagens) para serviço baseado em intervalo ou uma representação compactada de serviço com horário fixo." - columns: - - name: trip_id - description: "Identifica uma viagem à qual se aplica o intervalo de serviço especificado." - - name: start_time - description: "Hora em que o primeiro veículo sai da primeira parada da viagem com o intervalo especificado." - - name: end_time - description: "Hora em que o serviço muda para um intervalo diferente (ou cessa) na primeira parada da viagem." - - name: headway_secs - description: "Tempo, em segundos, entre partidas da mesma parada (intervalo) da viagem, durante o intervalo de tempo especificado por start_time e end_time." - - name: exact_times - description: "Indica o tipo de serviço para uma viagem." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: routes_gtfs - description: "Rotas de trânsito. Uma rota é um grupo de viagens exibidas aos passageiros como um único serviço." - columns: - - name: route_id - description: "Identifica uma rota." - - name: agency_id - description: "Agência para a rota especificada." - - name: route_short_name - description: "Nome abreviado de uma rota." - - name: route_long_name - description: "Nome completo de uma rota." - - name: route_desc - description: "Descrição de uma rota que fornece informações úteis e de qualidade." - - name: route_type - description: "Indica o tipo de transporte utilizado em uma rota." - - name: route_url - description: "URL de uma página da web sobre uma rota específica." - - name: route_color - description: "Designação de cores da rota que corresponda ao material voltado para o público." - - name: route_text_color - description: "Cor legível a ser usada para texto desenhado contra um fundo de route_color." - - name: route_sort_order - description: "Ordena as rotas de forma ideal para apresentação aos clientes." - - name: continuous_pickup - description: "Indica que o passageiro pode embarcar no veículo de transporte público em qualquer ponto ao longo do trajeto de viagem do veículo, conforme descrito em shape.txt, em cada viagem do trajeto." - - name: continuous_drop_off - description: "Indica que o passageiro pode descer do veículo de transporte público em qualquer ponto ao longo do trajeto de viagem do veículo, conforme descrito em shape.txt, em cada viagem da rota." - - name: network_id - description: "Identifica um grupo de rotas. Várias linhas em rotas.txt podem ter o mesmo network_id." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: shapes_geom_gtfs - description: "Tabela com os shapes dos serviços." - columns: - - name: shape_id - description: "Identifica uma forma." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: shape - description: "Dado geográfico construído com a query." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: shapes_gtfs - description: "Regras para mapear caminhos de deslocamento de veículos, às vezes chamados de alinhamentos de rotas." - columns: - - name: shape_id - description: "Identifica uma forma." - - name: shape_pt_sequence - description: "Sequência na qual os pontos da forma se conectam para formar a forma." - - name: shape_pt_lat - description: "Latitude de um ponto de forma." - - name: shape_pt_lon - description: "Longitude de um ponto de forma." - - name: shape_dist_traveled - description: "Distância real percorrida ao longo da forma desde o primeiro ponto da forma até o ponto especificado neste registro." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: stops_gtfs - description: "Paradas onde os veículos pegam ou deixam os passageiros. Também define estações e entradas de estação." - columns: - - name: stop_id - description: "Identifica uma localização: paragem/plataforma, estação, entrada/saída, nó genérico ou área de embarque" - - name: stop_code - description: "Texto curto ou um número que identifica a localização dos passageiros." - - name: stop_name - description: "Nome do local." - - name: tts_stop_name - description: "Versão legível do stop_name." - - name: stop_desc - description: "Descrição do local que fornece informações úteis e de qualidade." - - name: stop_lat - description: "Latitude do local." - - name: stop_lon - description: "Longitude do local." - - name: zone_id - description: "Identifica a zona tarifária para uma parada." - - name: stop_url - description: "URL de uma página da web sobre o local." - - name: location_type - description: "Tipo de localização." - - name: parent_station - description: "Define a hierarquia entre os diferentes locais definidos em stops.txt." - - name: stop_timezone - description: "Fuso horário do local." - - name: wheelchair_boarding - description: "Indica se o embarque para cadeiras de rodas é possível no local." - - name: level_id - description: "Nível do local." - - name: platform_code - description: "Identificador de plataforma para uma parada de plataforma (uma parada pertencente a uma estação)." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: stop_times_gtfs - description: "Horários em que um veículo chega e sai das paradas de cada viagem." - columns: - - name: trip_id - description: "Identifica uma viagem." - - name: stop_sequence - description: "Ordem das paradas para uma viagem específica." - - name: stop_id - description: "Identifica a parada atendida." - - name: arrival_time - description: "Hora de chegada na parada (definida por stop_times.stop_id) para uma viagem específica (definida por stop_times.trip_id) no fuso horário especificado por agency.agency_timezone, não por stops.stop_timezone." - - name: departure_time - description: "Hora de partida da parada (definida por stop_times.stop_id) para uma viagem específica (definida por stop_times.trip_id) no fuso horário especificado por agency.agency_timezone, não por stops.stop_timezone." - - name: stop_headsign - description: "Texto que aparece na sinalização identificando o destino da viagem aos passageiros." - - name: pickup_type - description: "Indica o método de coleta." - - name: drop_off_type - description: " Indica o método de entrega." - - name: continuous_pickup - description: "Indica que o passageiro pode embarcar no veículo de transporte público em qualquer ponto ao longo do trajeto de viagem do veículo, conforme descrito em shape.txt, deste stop_time até o próximo stop_time na stop_sequence da viagem." - - name: continuous_drop_off - description: "Indica que o passageiro pode descer do veículo de transporte público em qualquer ponto ao longo do caminho de viagem do veículo, conforme descrito por shape.txt, deste stop_time até o próximo stop_time na stop_sequence da viagem." - - name: shape_dist_traveled - description: "Distância real percorrida ao longo do formato associado, desde a primeira parada até a parada especificada neste registro." - - name: timepoint - description: "Indica se os horários de chegada e saída de uma parada são rigorosamente respeitados pelo veículo ou se são horários aproximados e/ou interpolados." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: trips_gtfs - description: "Viagens para cada rota." - columns: - - name: trip_id - description: "Identifica uma viagem." - - name: route_id - description: "Identifica uma rota." - - name: service_id - description: "Identifica um conjunto de datas em que o serviço está disponível para uma ou mais rotas." - - name: trip_headsign - description: "Texto que aparece na sinalização identificando o destino da viagem aos passageiros." - - name: trip_short_name - description: "Texto voltado ao público usado para identificar a viagem aos passageiros, por exemplo, para identificar os números dos trens para viagens de trens suburbanos." - - name: direction_id - description: "Indica a direção de deslocamento de uma viagem." - - name: block_id - description: "Identifica o bloco ao qual pertence a viagem." - - name: shape_id - description: "Identifica uma forma geoespacial que descreve o caminho de deslocamento do veículo para uma viagem." - - name: wheelchair_accessible - description: "Indica acessibilidade para cadeiras de rodas." - - name: bikes_allowed - description: "Indica se bicicletas são permitidas." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." - - - name: ordem_servico_gtfs - description: "Dados das linhas presentes no município." - columns: - - name: servico - description: "Número da linha de ônibus." - - name: vista - description: "Letreiro do ônibus." - - name: consorcio - description: "Nome do consórcio responsável pela linha." - - name: horario_inicio - description: "Horário inicial de funcionamento." - - name: horario_fim - description: "Horário da última viagem." - - name: extensao_ida - description: "Distância percorrida na ida." - - name: extensao_volta - description: "Distância percorrida na volta." - - name: partidas_ida - description: "Quantidade de partidas no sentido ida." - - name: partidas_volta - description: "Quantidade de partidas no sentido volta." - - name: viagens_planejadas - description: "Quantidade de viagens realizadas." - - name: distancia_total_planejada - description: "Distância total planejada diária para o serviço. " - - name: tipo_dia - description: "Tipo de dia, se dia útil, sábado, domingo ou ponto facultativo." - - name: data_versao - description: "Data de referência do feed (versão)." - - name: versao_modelo - description: "Código de controle de versão (SHA do GitHub)." diff --git a/queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql b/queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql deleted file mode 100644 index 5e0bbfdb..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql +++ /dev/null @@ -1,79 +0,0 @@ -{{ config( - materialized="view" -) }} - -WITH - servicos_exclusivos_sabado AS ( - SELECT - DISTINCT servico - FROM - {{ ref("ordem_servico_gtfs") }} - WHERE - tipo_dia = "Dia Útil" - AND viagens_planejadas = 0), - servicos AS ( - SELECT - * EXCEPT(versao_modelo, - shape) - FROM - {{ ref("trips_gtfs") }} AS t - LEFT JOIN - {{ ref("shapes_geom_gtfs") }} AS s - USING - (data_versao, - shape_id) - WHERE - (data_versao >= "2023-06-01" AND - ( trip_short_name NOT IN (SELECT * FROM servicos_exclusivos_sabado) - AND (service_id LIKE "U_R%" - OR service_id LIKE "U_O%") ) - OR ( trip_short_name IN (SELECT * FROM servicos_exclusivos_sabado) - AND (service_id LIKE "S_R%" - OR service_id LIKE "S_O%"))) - OR - (data_versao < "2023-06-01" AND - ( trip_short_name NOT IN (SELECT * FROM servicos_exclusivos_sabado) - OR ( trip_short_name IN (SELECT * FROM servicos_exclusivos_sabado) - AND service_id = "S"))) - AND shape_distance IS NOT NULL), - servicos_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY data_versao, trip_short_name, direction_id ORDER BY trip_short_name, service_id, shape_id, direction_id) AS rn - FROM - servicos ), - servicos_filtrada AS ( - SELECT - * EXCEPT(rn) - FROM - servicos_rn - WHERE - rn = 1), - servicos_potencialmente_circulares AS ( - SELECT - data_versao, - trip_short_name, - COUNT(DISTINCT direction_id) AS q_direcoes - FROM - servicos_filtrada - GROUP BY - 1, - 2 - HAVING - COUNT(DISTINCT direction_id) = 1 ) -SELECT - data_versao, - trip_short_name AS servico, - CASE - WHEN q_direcoes = 1 AND ST_DISTANCE(start_pt, end_pt) <= 50 THEN "C" - WHEN direction_id = "0" THEN "I" - WHEN direction_id = "1" THEN "V" -END - AS sentido -FROM - servicos_filtrada AS sf -LEFT JOIN - servicos_potencialmente_circulares AS spc -USING - (data_versao, - trip_short_name) \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql deleted file mode 100644 index 4ec84c74..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql +++ /dev/null @@ -1,77 +0,0 @@ -{{ config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['shape_id', 'data_versao'], - alias = 'shapes_geom' -) }} - - -WITH contents AS ( - SELECT shape_id, - ST_GEOGPOINT(shape_pt_lon, shape_pt_lat) AS ponto_shape, - shape_pt_sequence, - data_versao, - FROM {{ref('shapes_gtfs')}} s - WHERE data_versao = '{{ var("data_versao_gtfs") }}' -), -pts AS ( - SELECT *, - MAX(shape_pt_sequence) OVER(PARTITION BY data_versao, shape_id) final_pt_sequence - FROM contents c - ORDER BY data_versao, - shape_id, - shape_pt_sequence -), -shapes AS ( - -- BUILD LINESTRINGS OVER SHAPE POINTS - SELECT shape_id, - data_versao, - ST_MAKELINE(ARRAY_AGG(ponto_shape)) AS shape - FROM pts - GROUP BY 1, - 2 -), -boundary AS ( - -- EXTRACT START AND END POINTS FROM SHAPES - SELECT c1.shape_id, - c1.ponto_shape start_pt, - c2.ponto_shape end_pt, - c1.data_versao - FROM ( - SELECT * - FROM pts - WHERE shape_pt_sequence = 1 - ) c1 - JOIN ( - SELECT * - FROM pts - WHERE shape_pt_sequence = final_pt_sequence - ) c2 ON c1.shape_id = c2.shape_id - AND c1.data_versao = c2.data_versao -), -merged AS ( - -- JOIN SHAPES AND BOUNDARY POINTS - SELECT s.*, - b.* - EXCEPT(data_versao, shape_id), - ROUND(ST_LENGTH(shape), 1) shape_distance, - FROM shapes s - JOIN boundary b ON s.shape_id = b.shape_id - AND s.data_versao = b.data_versao -), -ids AS ( - SELECT data_versao, - shape_id, - shape, - shape_distance, - start_pt, - end_pt, - ROW_NUMBER() OVER(PARTITION BY data_versao, shape_id) rn - FROM merged m -) -SELECT - * EXCEPT(rn), - '{{ var("version") }}' as versao_modelo -FROM ids -WHERE rn = 1 diff --git a/queries/models/br_rj_riodejaneiro_gtfs/shapes_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/shapes_gtfs.sql deleted file mode 100644 index 59b42843..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/shapes_gtfs.sql +++ /dev/null @@ -1,19 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['shape_id', 'shape_pt_sequence', 'data_versao'], - alias = 'shapes' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(shape_id AS STRING) shape_id, - SAFE_CAST(JSON_VALUE(content, '$.shape_pt_lat') AS FLOAT64) shape_pt_lat, - SAFE_CAST(JSON_VALUE(content, '$.shape_pt_lon') AS FLOAT64) shape_pt_lon, - SAFE_CAST(shape_pt_sequence AS INT64) shape_pt_sequence, - SAFE_CAST(JSON_VALUE(content, '$.shape_dist_traveled') AS FLOAT64) shape_dist_traveled, - '{{ var("version") }}' as versao_modelo -FROM - {{source('br_rj_riodejaneiro_gtfs_staging', 'shapes')}} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql deleted file mode 100644 index 32b59921..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql +++ /dev/null @@ -1,28 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['trip_id', 'data_versao'], - alias = 'stop_times' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(trip_id AS STRING) trip_id, - SAFE_CAST(JSON_VALUE(content, '$.arrival_time') AS STRING) arrival_time, - SAFE_CAST(JSON_VALUE(content, '$.departure_time') AS DATETIME) departure_time, - SAFE_CAST(JSON_VALUE(content, '$.stop_id') AS STRING) stop_id, - SAFE_CAST(stop_sequence AS INT64) stop_sequence, - SAFE_CAST(JSON_VALUE(content, '$.stop_headsign') AS STRING) stop_headsign, - SAFE_CAST(JSON_VALUE(content, '$.pickup_type') AS STRING) pickup_type, - SAFE_CAST(JSON_VALUE(content, '$.drop_off_type') AS STRING) drop_off_type, - SAFE_CAST(JSON_VALUE(content, '$.continuous_pickup') AS STRING) continuous_pickup, - SAFE_CAST(JSON_VALUE(content, '$.continuous_drop_off') AS STRING) continuous_drop_off, - SAFE_CAST(JSON_VALUE(content, '$.shape_dist_traveled') AS FLOAT64) shape_dist_traveled, - SAFE_CAST(JSON_VALUE(content, '$.timepoint') AS STRING) timepoint, - '{{ var("version") }}' as versao_modelo -FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'stop_times' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql deleted file mode 100644 index 4000571f..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql +++ /dev/null @@ -1,31 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['stop_id', 'data_versao'], - alias = 'stops' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(stop_id AS STRING) stop_id, - SAFE_CAST(JSON_VALUE(content, '$.stop_code') AS STRING) stop_code, - SAFE_CAST(JSON_VALUE(content, '$.stop_name') AS STRING) stop_name, - SAFE_CAST(JSON_VALUE(content, '$.tts_stop_name') AS STRING) tts_stop_name, - SAFE_CAST(JSON_VALUE(content, '$.stop_desc') AS STRING) stop_desc, - SAFE_CAST(JSON_VALUE(content, '$.stop_lat') AS FLOAT64) stop_lat, - SAFE_CAST(JSON_VALUE(content, '$.stop_lon') AS FLOAT64) stop_lon, - SAFE_CAST(JSON_VALUE(content, '$.zone_id') AS STRING) zone_id, - SAFE_CAST(JSON_VALUE(content, '$.stop_url') AS STRING) stop_url, - SAFE_CAST(JSON_VALUE(content, '$.location_type') AS STRING) location_type, - SAFE_CAST(JSON_VALUE(content, '$.parent_station') AS STRING) parent_station, - SAFE_CAST(JSON_VALUE(content, '$.stop_timezone') AS STRING) stop_timezone, - SAFE_CAST(JSON_VALUE(content, '$.wheelchair_boarding') AS STRING) wheelchair_boarding, - SAFE_CAST(JSON_VALUE(content, '$.level_id') AS STRING) level_id, - SAFE_CAST(JSON_VALUE(content, '$.platform_code') AS STRING) platform_code, - '{{ var("version") }}' as versao_modelo -FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'stops' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql deleted file mode 100644 index ee593466..00000000 --- a/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql +++ /dev/null @@ -1,26 +0,0 @@ -{{config( - partition_by = { 'field' :'data_versao', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = ['trip_id','data_versao'], - alias = 'trips' -)}} - - -SELECT SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(JSON_VALUE(content, '$.route_id') AS STRING) route_id, - SAFE_CAST(JSON_VALUE(content, '$.service_id') AS STRING) service_id, - SAFE_CAST(trip_id AS STRING) trip_id, - SAFE_CAST(JSON_VALUE(content, '$.trip_headsign') AS STRING) trip_headsign, - SAFE_CAST(JSON_VALUE(content, '$.trip_short_name') AS STRING) trip_short_name, - SAFE_CAST(JSON_VALUE(content, '$.direction_id') AS STRING) direction_id, - SAFE_CAST(JSON_VALUE(content, '$.block_id') AS STRING) block_id, - SAFE_CAST(JSON_VALUE(content, '$.shape_id') AS STRING) shape_id, - SAFE_CAST(JSON_VALUE(content, '$.wheelchair_accessible') AS STRING) wheelchair_accessible, - SAFE_CAST(JSON_VALUE(content, '$.bikes_allowed') AS STRING) bikes_allowed, - '{{ var("version") }}' as versao_modelo -FROM {{ source( - 'br_rj_riodejaneiro_gtfs_staging', - 'trips' - ) }} -WHERE data_versao = '{{ var("data_versao_gtfs") }}' diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml b/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml deleted file mode 100644 index 99b6cedc..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml +++ /dev/null @@ -1,332 +0,0 @@ -version: 2 - -models: - - name: sppo_aux_registros_filtrada - description: "Tabela com filtragem e tratamento básico de registros de GPS" - columns: - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: latitude - description: "Parte da coordenada geográfica (eixo y) em graus decimais (EPSG:4326 - WGS84)" - # tests: - # - not_null: - # partition_column: data - - name: longitude - description: "Parte da coordenada geográfica (eixo x) em graus decimais (EPSG:4326 - WGS84)" - # tests: - # - not_null: - # partition_column: data - - name: posicao_veiculo_geo - description: "Coordenada geográfica (POINT) com a posição que o veículo se encontra, conforme 'longitude' e 'latitude' informadas pelo GPS (EPSG:4326 - WGS84)" - # tests: - # - not_null: - # partition_column: data - - name: velocidade - description: "Velocidade instantânea do veículo, conforme informado pelo GPS (km/h)" - # tests: - # - not_null: - # partition_column: data - # - not_negative: - # partition_column: data - - name: linha - description: "Linha de ônibus (serviço) ou, se realocada, informada pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_captura - description: "Timestamp de captura, pela SMTR, do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - name: hora - description: "Hora do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - name: versao - description: "SHA da branch no Github" - # tests: - # - not_null: - # partition_column: data - - - name: sppo_aux_registros_flag_trajeto_correto - description: "Tabela para verificação se o veículo está dentro do trajeto correto" - columns: - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: linha - description: "Linha de ônibus (serviço)" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: linha_gtfs - description: "Linha de ônibus (serviço) da tabela 'shapes_geom'" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: route_id - description: "Código identificador na rota da tabela 'shapes_geom'" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) / Tabela ephemeral - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: flag_trajeto_correto - description: "Flag de verificação se o ponto de GPS encontra-se até o limite de 'tamanho_buffer_metros' do shape da linha (true). Se não estiver, retorna false." - # tests: - # - not_null: - # partition_column: data - # - accepted_values: - # values: [true, false] - # quote: false - - name: flag_trajeto_correto_hist - description: "Flag de verificação se, nos últimos 'intervalo_max_desvio_segundos', ao menos algum ponto de GPS encontra-se até o limite de 'tamanho_buffer_metros' do shape da linha (true). Se não estiver, retorna false." - # tests: - # - not_null: - # partition_column: data - # - accepted_values: - # values: [true, false] - # quote: false - - name: flag_linha_existe_sigmob - description: "Flag de verificação se a linha informada existe no SIGMOB" - # tests: - # - not_null: - # partition_column: data - # - accepted_values: - # values: [true, false] - # quote: false - - - name: sppo_aux_registros_parada - description: "Tabela para identificação de veículos parados em terminais ou garagens conhecidas." - columns: - - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) / Tabela ephemeral - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: linha - description: "Linha de ônibus (serviço)" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: tipo_parada - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - - name: sppo_aux_registros_realocacao - description: "Tabela com realocações de linha válidas." - columns: - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: servico_gps - description: "Linha de ônibus (serviço) informado pelo GPS" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: servico_realocado - description: "Linha de ônibus (serviço) realocada informada pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: datetime_realocacao - description: "Datetime_realocacao que o registro da realocação foi informado pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - name: hora - description: "Hora de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - - name: sppo_aux_registros_velocidade - description: "Tabela com estimativa das velocidades dos veículos nos últimos 10 minutos" - columns: - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) / Tabela ephemeral - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: linha - description: "Linha de ônibus (serviço)" - # tests: - # - not_null: - # partition_column: data - - name: distancia - description: "Distância da última posição do GPS em relação à posição atual (m)" - # tests: - # - not_negative: - # partition_column: data - - name: velocidade - description: "Velocidade média nos últimos 10 minutos de operação (km/h)" - # tests: - # - not_null: - # partition_column: data - # - not_negative: - # partition_column: data - - name: flag_em_movimento - description: "Veículos com 'velocidade' abaixo da 'velocidade_limiar_parado', são considerados como parado (false). Caso contrário, são considerados andando (true)" - # tests: - # - not_null: - # partition_column: data - # - accepted_values: - # values: [true, false] - # quote: false - - - name: sppo_realocacao - description: "Tabela com todas as realocações de linha informadas." - columns: - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: datetime_operacao - description: "Datetime que o registro da realocação foi informado pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - - name: servico - description: "Linha de ônibus (serviço) realocada informada pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: datetime_entrada - description: "Datetime de entrada do veículo na linha realocada" - # tests: - # - not_null: - # partition_column: data - - name: datetime_saida - description: "Datetime de saída do veículo na linha realocada" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_processamento - description: "Timestamp de processamento da realocação pela empresa operadora" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_captura - description: "Timestamp de captura, pela SMTR, do registro de realocação" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - name: hora - description: "Hora do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - - name: sppo_registros - description: "Tabela com todos os registros de GPS." - columns: - - name: ordem - description: "Código identificador do veículo (número de ordem)" - # tests: - # - not_null: - # partition_column: data - - name: latitude - description: "Parte da coordenada geográfica (eixo y) em graus decimais (EPSG:4326 - WGS84)" - # tests: - # - not_null: - # partition_column: data - - name: longitude - description: "Parte da coordenada geográfica (eixo x) em graus decimais (EPSG:4326 - WGS84)" - # tests: - # - not_null: - # partition_column: data - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: velocidade - description: "Velocidade instantânea do veículo, conforme informado pelo GPS (km/h)" - # tests: - # - not_null: - # partition_column: data - # - not_negative: - # partition_column: data - - name: linha - description: "Linha de ônibus (serviço)" - # tests: - # - not_null: - # partition_column: data - # - no_space: - # partition_column: data - - name: timestamp_captura - description: "Timestamp de captura, pela SMTR, do sinal de GPS" - # tests: - # - not_null: - # partition_column: data - - name: data - description: "Data do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) - - name: hora - description: "Hora do 'timestamp_captura'" - # Sem testes em razão de ser coluna de particionamento (seria necessário consultar toda a tabela) \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_filtrada.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_filtrada.sql deleted file mode 100644 index 0573c6fd..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_filtrada.sql +++ /dev/null @@ -1,81 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - } - ) -}} - /* -Descrição: -Filtragem e tratamento básico de registros de gps. -1. Filtra registros que estão fora de uma caixa que contém a área do município de Rio de Janeiro. -2. Filtra registros antigos. Remove registros que tem diferença maior que 1 minuto entre o timestamp_captura e timestamp_gps. -3. Muda o nome de variáveis para o padrão do projeto. - - id_veiculo --> ordem -*/ -WITH -box AS ( - /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ - SELECT - * - FROM - {{ var('limites_caixa') }} -), -gps AS ( - /*2. Filtra registros antigos. Remove registros que tem diferença maior que 1 minuto entre o timestamp_captura e timestamp_gps.*/ - SELECT - *, - ST_GEOGPOINT(longitude, latitude) posicao_veiculo_geo - FROM - {{ ref('sppo_registros') }} - {% if is_incremental() -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {%- endif -%} -), -realocacao as ( - SELECT - g.* except(linha), - coalesce(r.servico_realocado, g.linha) as linha - FROM - gps g - LEFT JOIN - {{ ref('sppo_aux_registros_realocacao') }} r - ON - g.ordem = r.id_veiculo - and g.timestamp_gps = r.timestamp_gps -), -filtrada AS ( - /*1,2, e 3. Muda o nome de variáveis para o padrão do projeto.*/ - SELECT - ordem AS id_veiculo, - latitude, - longitude, - posicao_veiculo_geo, - velocidade, - linha, - timestamp_gps, - timestamp_captura, - data, - hora, - row_number() over (partition by ordem, timestamp_gps, linha) rn - FROM - realocacao - WHERE - ST_INTERSECTSBOX(posicao_veiculo_geo, - ( SELECT min_longitude FROM box), - ( SELECT min_latitude FROM box), - ( SELECT max_longitude FROM box), - ( SELECT max_latitude FROM box)) - ) -SELECT - * except(rn), - "{{ var("version") }}" as versao -FROM - filtrada -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_flag_trajeto_correto.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_flag_trajeto_correto.sql deleted file mode 100644 index 3c75a055..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_flag_trajeto_correto.sql +++ /dev/null @@ -1,96 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} - -/* -Descrição: -Calcula se o veículo está dentro do trajeto correto dado o traçado (shape) cadastrado no SIGMOB em relação à linha que está sendo -transmitida. -1. Calcula as intersecções definindo um 'buffer', utilizado por st_dwithin para identificar se o ponto está à uma -distância menor ou igual ao tamanho do buffer em relação ao traçado definido no SIGMOB. -2. Calcula um histórico de intersecções nos ultimos 10 minutos de registros de cada carro. Definimos que o carro é -considerado fora do trajeto definido se a cada 10 minutos, ele não esteve dentro do traçado planejado pelo menos uma -vez. -3. Identifica se a linha informada no registro capturado existe nas definições presentes no SIGMOB. -4. Definimos em outra tabela uma 'data_versao_efetiva', esse passo serve tanto para definir qual versão do SIGMOB utilizaremos em -caso de falha na captura, quanto para definir qual versão será utilizada para o cálculo retroativo do histórico de registros que temos. -5. Como não conseguimos identificar o itinerário que o carro está realizando, no passo counts, os resultados de -intersecções são dobrados, devido ao fato de cada linha apresentar dois itinerários possíveis (ida/volta). Portanto, -ao final, realizamos uma agregação LOGICAL_OR que é true caso o carro esteja dentro do traçado de algum dos itinerários -possíveis para a linha informada. -*/ -WITH - registros AS ( - SELECT - id_veiculo, - linha, - latitude, - longitude, - data, - posicao_veiculo_geo, - timestamp_gps - FROM - {{ ref('sppo_aux_registros_filtrada') }} r - {% if not flags.FULL_REFRESH -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {%- endif -%} - ), - intersec AS ( - SELECT - r.*, - s.data_versao, - s.linha_gtfs, - s.route_id, - -- 1. Buffer e intersecções - CASE - WHEN st_dwithin(shape, posicao_veiculo_geo, {{ var('tamanho_buffer_metros') }}) THEN TRUE - ELSE FALSE - END AS flag_trajeto_correto, - -- 2. Histórico de intersecções nos últimos 10 minutos a partir da timestamp_gps atual - CASE - WHEN - COUNT(CASE WHEN st_dwithin(shape, posicao_veiculo_geo, {{ var('tamanho_buffer_metros') }}) THEN 1 END) - OVER (PARTITION BY id_veiculo - ORDER BY UNIX_SECONDS(TIMESTAMP(timestamp_gps)) - RANGE BETWEEN {{ var('intervalo_max_desvio_segundos') }} PRECEDING AND CURRENT ROW) >= 1 - THEN True - ELSE False - END AS flag_trajeto_correto_hist, - -- 3. Identificação de cadastro da linha no SIGMOB - CASE WHEN s.linha_gtfs IS NULL THEN False ELSE True END AS flag_linha_existe_sigmob, - -- 4. Join com data_versao_efetiva para definição de quais shapes serão considerados no cálculo das flags - FROM registros r - LEFT JOIN ( - SELECT * - FROM {{ ref('shapes_geom') }} - WHERE id_modal_smtr in ({{ var('sppo_id_modal_smtr')|join(', ') }}) - AND data_versao = "{{ var('versao_fixa_sigmob')}}" - ) s - ON - r.linha = s.linha_gtfs - ) - -- 5. Agregação com LOGICAL_OR para evitar duplicação de registros - SELECT - id_veiculo, - linha, - linha_gtfs, - route_id, - data, - timestamp_gps, - LOGICAL_OR(flag_trajeto_correto) AS flag_trajeto_correto, - LOGICAL_OR(flag_trajeto_correto_hist) AS flag_trajeto_correto_hist, - LOGICAL_OR(flag_linha_existe_sigmob) AS flag_linha_existe_sigmob, - FROM intersec i - GROUP BY - id_veiculo, - linha, - linha_gtfs, - route_id, - data, - data_versao, - timestamp_gps - \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_parada.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_parada.sql deleted file mode 100644 index 49da8094..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_parada.sql +++ /dev/null @@ -1,77 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} - -/* -Descrição: -Identifica veículos parados em terminais ou garagens conhecidas. -1. Selecionamos os terminais conhecidos e uma geometria do tipo polígono (Polygon) que contém buracos nas -localizações das garagens. -2. Calculamos as distâncias do veículos em relação aos terminais conhecidos. Definimos aqui a coluna 'nrow', -que identifica qual o terminal que está mais próximo do ponto informado. No passo final, recuperamos apenas -os dados com nrow = 1 (menor distância em relação à posição do veículo) -3. Definimos uma distancia_limiar_parada. Caso o veículo esteja a uma distância menor que este valor de uma -parada, será considerado como parado no terminal com menor distancia. -4. Caso o veiculo não esteja intersectando o polígono das garagens, ele será considerado como parado dentro -de uma garagem (o polígono é vazado nas garagens, a não intersecção implica em estar dentro de um dos 'buracos'). -*/ -WITH - terminais as ( - -- 1. Selecionamos terminais, criando uma geometria de ponto para cada. - select - ST_GEOGPOINT(longitude, latitude) ponto_parada, nome_terminal nome_parada, 'terminal' tipo_parada - from {{ var('sppo_terminais') }} - ), - garagem_polygon AS ( - -- 1. Selecionamos o polígono das garagens. - SELECT ST_GEOGFROMTEXT(WKT,make_valid => true) AS poly - FROM {{ var('polygon_garagem') }} - ), - distancia AS ( - --2. Calculamos as distâncias e definimos nrow - SELECT - id_veiculo, - timestamp_gps, - data, - linha, - posicao_veiculo_geo, - nome_parada, - tipo_parada, - ROUND(ST_DISTANCE(posicao_veiculo_geo, ponto_parada), 1) distancia_parada, - ROW_NUMBER() OVER (PARTITION BY timestamp_gps, id_veiculo, linha ORDER BY ST_DISTANCE(posicao_veiculo_geo, ponto_parada)) nrow - FROM terminais p - JOIN ( - SELECT - id_veiculo, - timestamp_gps, - data, - linha, - posicao_veiculo_geo - FROM - {{ ref('sppo_aux_registros_filtrada') }} - {%if not flags.FULL_REFRESH %} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {% endif %} - ) r - on 1=1 - ) -SELECT - data, - id_veiculo, - timestamp_gps, - linha, - /* - 3. e 4. Identificamos o status do veículo como 'terminal', 'garagem' (para os veículos parados) ou - null (para os veículos mais distantes de uma parada que o limiar definido) - */ - case - when distancia_parada < {{ var('distancia_limiar_parada') }} then tipo_parada - when not ST_INTERSECTS(posicao_veiculo_geo, (SELECT poly FROM garagem_polygon)) then 'garagem' - else null - end tipo_parada, -FROM distancia -WHERE nrow = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_realocacao.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_realocacao.sql deleted file mode 100644 index b6f53b1b..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_realocacao.sql +++ /dev/null @@ -1,73 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - } - ) -}} - --- 1. Filtra realocações válidas dentro do intervalo de GPS avaliado -with realocacao as ( - select - * except(datetime_saida), - case - when datetime_saida is null then datetime_operacao - else datetime_saida - end as datetime_saida, - from - {{ ref('sppo_realocacao') }} - where - -- Realocação deve acontecer após o registro de GPS e até 1 hora depois - datetime_diff(datetime_operacao, datetime_entrada, minute) between 0 and 60 - {% if is_incremental() -%} - and - data between DATE("{{var('date_range_start')}}") - and DATE(datetime_add("{{var('date_range_end')}}", interval 1 - hour)) - and - datetime_operacao between datetime("{{var('date_range_start')}}") - and datetime_add("{{var('date_range_end')}}", interval 1 hour) - {%- endif -%} -), --- 2. Altera registros de GPS com servicos realocados -gps as ( - select - ordem, - timestamp_gps, - linha, - data, - hora - from {{ ref('sppo_registros') }} - where - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - and timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <= "{{var('date_range_end')}}" -), -combinacao as ( - select - r.id_veiculo, - g.timestamp_gps, - g.linha as servico_gps, - r.servico as servico_realocado, - r.datetime_operacao as datetime_realocacao, - g.data, - g.hora - from gps g - inner join realocacao r - on - g.ordem = r.id_veiculo - and g.linha != r.servico - and g.timestamp_gps between r.datetime_entrada and r.datetime_saida -) --- Filtra realocacao mais recente para cada timestamp -select - * except(rn) -from ( - select - *, - row_number() over (partition by id_veiculo, timestamp_gps order by datetime_realocacao desc) as rn - from combinacao -) -where rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_velocidade.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_velocidade.sql deleted file mode 100644 index aadaea0f..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_velocidade.sql +++ /dev/null @@ -1,91 +0,0 @@ -{{ - config( - materialized='ephemeral' - ) -}} -/* -Descrição: -Estimativa das velocidades dos veículos nos últimos 10 minutos contados a partir da timestamp_gps atual. -Essa metodologia serve para determinar quais carros estão em movimento e quais estão parados. -1. Calculamos a velocidade do veículo no último trecho de 10 minutos de operação. -A implementação utiliza a função 'first_value' com uma janela (cláusula 'over') de até 10 minutos anteriores à -timestamp_gps atual e calcula a distância do ponto mais antigo (o first_value na janela) ao ponto atual (posicao_veiculo_geo). -Dividimos essa distância pela diferença de tempo entre a timestamp_gps atual e a timestamp_gps do ponto mais -antigo da janela (o qual recuperamos novamente com o uso de first_value). -Esta diferença de tempo (datetime_diff) é calculada em segundos, portanto multiplicamos o resultado da divisão por um fator -3.6 para que a velocidade esteja em quilômetros por hora. O resultado final é arrendondado sem casas decimais. -Por fim, cobrimos esse cálculo com a função 'if_null' e retornamos zero para a velocidade em casos onde a divisão retornaria -um valor nulo. -2. Após o calculo da velocidade, definimos a coluna 'status_movimento'. Veículos abaixo da 'velocidade_limiar_parado', são -considerados como 'parado'. Caso contrário, são considerados 'andando' -*/ -with - t_velocidade as ( - select - data, - id_veiculo, - timestamp_gps, - linha, - ST_DISTANCE( - posicao_veiculo_geo, - lag(posicao_veiculo_geo) over ( - partition by id_veiculo, linha - order by timestamp_gps) - ) distancia, - IFNULL( - SAFE_DIVIDE( - ST_DISTANCE( - posicao_veiculo_geo, - lag(posicao_veiculo_geo) over ( - partition by id_veiculo, linha - order by timestamp_gps) - ), - DATETIME_DIFF( - timestamp_gps, - lag(timestamp_gps) over ( - partition by id_veiculo, linha - order by timestamp_gps), - SECOND - )), - 0 - ) * 3.6 velocidade - FROM {{ ref("sppo_aux_registros_filtrada") }} - {%if not flags.FULL_REFRESH -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {%- endif -%} - ), - medias as ( - select - data, - id_veiculo, - timestamp_gps, - linha, - distancia, - velocidade, # velocidade do pontual - AVG(velocidade) OVER ( - PARTITION BY id_veiculo, linha - ORDER BY unix_seconds(timestamp(timestamp_gps)) - RANGE BETWEEN {{ var('janela_movel_velocidade') }} PRECEDING AND CURRENT ROW - ) velocidade_media # velocidade com média móvel - from t_velocidade - ) -SELECT - timestamp_gps, - data, - id_veiculo, - linha, - distancia, - ROUND( - CASE WHEN velocidade_media > {{ var('velocidade_maxima') }} - THEN {{ var('velocidade_maxima') }} - ELSE velocidade_media - END, - 1) as velocidade, - -- 2. Determinação do estado de movimento do veículo. - case - when velocidade_media < {{ var('velocidade_limiar_parado') }} then false - else true - end flag_em_movimento, -FROM medias \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql deleted file mode 100644 index 174ce3b1..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql +++ /dev/null @@ -1,15 +0,0 @@ -SELECT - SAFE_CAST(id_veiculo AS STRING) id_veiculo, - SAFE_CAST(DATETIME(TIMESTAMP(datetime_operacao), "America/Sao_Paulo") AS DATETIME) datetime_operacao, - concat( - ifnull(REGEXP_EXTRACT(servico, r'[A-Z]+'), ""), - ifnull(REGEXP_EXTRACT(servico, r'[0-9]+'), "") - ) as servico, - SAFE_CAST(DATETIME(TIMESTAMP(datetime_entrada), "America/Sao_Paulo") AS DATETIME) as datetime_entrada, - SAFE_CAST(DATETIME(TIMESTAMP(datetime_saida), "America/Sao_Paulo") AS DATETIME) as datetime_saida, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_processamento), "America/Sao_Paulo") AS DATETIME) as timestamp_processamento, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_captura), "America/Sao_Paulo") AS DATETIME) as timestamp_captura, - data, - hora -FROM - {{var('sppo_realocacao_staging')}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql deleted file mode 100644 index 1e41af40..00000000 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql +++ /dev/null @@ -1,15 +0,0 @@ -SELECT - SAFE_CAST(ordem AS STRING) ordem, - SAFE_CAST(REPLACE(latitude, ',', '.') AS FLOAT64) latitude, - SAFE_CAST(REPLACE(longitude, ',', '.') AS FLOAT64) longitude, - SAFE_CAST(DATETIME(TIMESTAMP(datahora), "America/Sao_Paulo") AS DATETIME) timestamp_gps, - SAFE_CAST(velocidade AS INT64) velocidade, - concat( - ifnull(REGEXP_EXTRACT(linha, r'[A-Z]+'), ""), - ifnull(REGEXP_EXTRACT(linha, r'[0-9]+'), "") - ) as linha, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_captura), "America/Sao_Paulo") AS DATETIME) timestamp_captura, - SAFE_CAST(data AS DATE) data, - SAFE_CAST(hora AS INT64) hora -from - {{var('sppo_registros_staging')}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql b/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql deleted file mode 100644 index b92df3bc..00000000 --- a/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql +++ /dev/null @@ -1,18 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - "field":"data_transacao", - "data_type": "date", - "granularity":"day" - } - ) -}} -SELECT - * -FROM {{ref('rho_registros_sppo_view')}} - -{% if is_incremental() %} -WHERE - data_particao BETWEEN DATE("{{var('date_range_start')}}") AND DATE("{{var('date_range_end')}}") -{% endif %} diff --git a/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo_view.sql b/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo_view.sql deleted file mode 100644 index d790de28..00000000 --- a/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo_view.sql +++ /dev/null @@ -1,16 +0,0 @@ -SELECT - CONCAT(TRIM(linha), '_', data_transacao, '_', hora_transacao) id_transacao, - TRIM(linha) linha, - SAFE_CAST(data_transacao AS DATE) data_transacao, - SAFE_CAST(hora_transacao AS INT64) hora_transacao, - SAFE_CAST(total_gratuidades AS INT64) total_gratuidades, - SAFE_CAST(total_pagantes_especie AS INT64) total_pagantes_especie, - SAFE_CAST(total_pagantes_cartao AS INT64) total_pagantes_cartao, - SAFE_CAST(registro_processado AS STRING) registro_processado, - SAFE_CAST(data_processamento AS DATE) data_processamento, - SAFE_CAST(operadora AS STRING) operadora, - SAFE_CAST(linha_rcti AS STRING) linha_rcti, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_captura), "America/Sao_Paulo") AS DATETIME) timestamp_captura, - DATE(CONCAT(ano,'-', mes, '-', dia)) data_particao -FROM {{var('rho_registros_sppo_staging')}} -WHERE data_transacao > "{{var('rho_sppo_start_date')}}" \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_rdo/schema.yaml b/queries/models/br_rj_riodejaneiro_rdo/schema.yaml deleted file mode 100644 index 7df254d4..00000000 --- a/queries/models/br_rj_riodejaneiro_rdo/schema.yaml +++ /dev/null @@ -1,7 +0,0 @@ -version: 2 - -models: - - name: rho_registros_sppo_view - description: "View para tipar e padronizar dados do RHO" - - name: rho_registros_sppo - description: "Tabela materializada para acesso geral aos dados do RHO" diff --git a/queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql b/queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql deleted file mode 100644 index deca41de..00000000 --- a/queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql +++ /dev/null @@ -1,113 +0,0 @@ -{{ config( - materialized = 'incremental', - partition_by = { 'field' :'data', - 'data_type' :'date', - 'granularity': 'day' }, - unique_key = 'id_recurso', - alias = 'recurso_sppo_viagens_individuais', -) }} - - -WITH recurso_sppo AS ( - SELECT - ROW_NUMBER() OVER(PARTITION BY protocol ORDER BY timestamp_captura DESC) AS rn, - JSON_EXTRACT_ARRAY(content, '$.customFieldValues') AS items, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%S', REGEXP_REPLACE(JSON_VALUE(content, '$.createdDate'), r'(\.\d+)?$', '')), 'America/Sao_Paulo') AS datetime_recurso, - SAFE_CAST(protocol AS STRING) AS id_recurso, - DATETIME(PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S%Ez', timestamp_captura), 'America/Sao_Paulo') AS datetime_captura - - FROM - {{source('br_rj_riodejaneiro_recurso_staging', - 'recurso_sppo_viagens_individuais')}} - {% if is_incremental() -%} - WHERE - DATE(data) BETWEEN DATE("{{var('date_range_start')}}") - AND DATE("{{var('date_range_end')}}") - AND DATETIME(PARSE_TIMESTAMP('%Y-%m-%d %H:%M:%S%Ez', timestamp_captura), - "America/Sao_Paulo") BETWEEN DATETIME("{{var('date_range_start')}}") - AND DATETIME("{{var('date_range_end')}}") - {%- endif %} -), -exploded AS ( - SELECT - id_recurso, - datetime_recurso, - datetime_captura, - SAFE_CAST(COALESCE(JSON_VALUE(items, '$.value'), JSON_VALUE(items, '$.items[0].customFieldItem')) AS STRING - ) AS value, - SAFE_CAST(JSON_EXTRACT(items, '$.customFieldId') AS STRING ) AS field_id - FROM - recurso_sppo, - UNNEST(items) items - WHERE - rn = 1 -), -pivotado AS ( - SELECT * - FROM - exploded PIVOT( - ANY_VALUE(value) FOR field_id IN ( - '111870', '111871', '111872', '111873', - '111901', '111865', '111867', '111868', - '111869', '111866', '111904', '125615', - '111900' - ) - ) -), -tratado AS ( - SELECT - id_recurso, - datetime_captura, - datetime_recurso, - SAFE_CAST(p.111865 AS STRING) AS julgamento, - SAFE_CAST(p.111870 AS STRING) AS consorcio, - CASE - WHEN SAFE_CAST(p.111872 AS STRING) = "SR - Regular" THEN SAFE_CAST(p.111871 AS STRING) - ELSE CONCAT(REPLACE(SPLIT(SAFE_CAST(p.111872 AS STRING), "-")[OFFSET(0)], " ", ""), SAFE_CAST(p.111871 AS STRING)) - END AS servico, - SAFE_CAST(p.111873 AS STRING) AS id_veiculo, - CASE - WHEN SAFE_CAST(p.111901 AS STRING) = "Ida" THEN "I" - WHEN SAFE_CAST(p.111901 AS STRING) = "Volta" THEN "V" - WHEN SAFE_CAST(p.111901 AS STRING) = "Circular" THEN "C" - END - AS sentido, - PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%Ez',SAFE_CAST(p.111867 AS STRING), 'America/Sao_Paulo') AS data_viagem, - PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%Ez', SAFE_CAST(p.111868 AS STRING), 'America/Sao_Paulo') AS hora_inicio_viagem, - PARSE_TIMESTAMP('%Y-%m-%dT%H:%M:%E*S%Ez', SAFE_CAST(p.111869 AS STRING), 'America/Sao_Paulo') AS hora_fim_viagem, - SAFE_CAST(p.111866 AS STRING) AS motivo, - COALESCE(SAFE_CAST(p.111904 AS STRING), SAFE_CAST(p.111900 AS STRING)) AS motivo_julgamento, - SAFE_CAST(p.125615 AS STRING) AS observacao, - -FROM - pivotado p -) - -SELECT - t.id_recurso, - t.datetime_captura, - t.datetime_recurso, - t.julgamento, - t.consorcio, - t.servico, - t.id_veiculo, - t.sentido, - DATETIME(EXTRACT(date FROM TIMESTAMP(data_viagem)), EXTRACT(time FROM TIMESTAMP_SUB(hora_inicio_viagem, INTERVAL 2 HOUR)) ) AS datetime_partida, - CASE - WHEN - EXTRACT(time FROM TIMESTAMP_SUB(hora_inicio_viagem, INTERVAL 2 HOUR)) > EXTRACT(time FROM TIMESTAMP_SUB(hora_fim_viagem, INTERVAL 2 HOUR)) - - THEN - DATETIME(EXTRACT(date FROM TIMESTAMP_ADD(data_viagem, INTERVAL 1 DAY)), EXTRACT(time FROM TIMESTAMP_SUB(hora_fim_viagem, INTERVAL 2 HOUR))) - ELSE - DATETIME(EXTRACT(date FROM TIMESTAMP(data_viagem)), - EXTRACT(time FROM TIMESTAMP_SUB(hora_fim_viagem, INTERVAL 2 HOUR)) - ) - END AS datetime_chegada, - t.motivo, - t.motivo_julgamento, - t.observacao, - DATE(datetime_recurso) AS data, - -FROM - tratado t diff --git a/queries/models/br_rj_riodejaneiro_recurso/schema.yml b/queries/models/br_rj_riodejaneiro_recurso/schema.yml deleted file mode 100644 index 34887054..00000000 --- a/queries/models/br_rj_riodejaneiro_recurso/schema.yml +++ /dev/null @@ -1,35 +0,0 @@ -version: 2 -sources: -- name: br_rj_riodejaneiro_recurso -models: - - name: recurso_sppo_viagens_individuais - description: Recursos abertos na plataforma Movidesk para pagamento de subsídio de viagens individuais de ônibus - columns: - - name: datetime_captura - description: Data de captura dos dados - - name: datetime_recurso - description: Data de criação do ticket para pedido de recurso no Movidesk - - name: id_recurso - description: Número de id do recurso - - name: servico - description: Tipo do serviço de ônibus - - name: sentido - description: Sentido do ônibus - - name: consorcio - description: Nome do consórcio - - name: id_veiculo - description: Número de identificação do veículo (Somente números) - - name: datetime_partida - description: "Datetime da partida da viagem" - - name: datetime_chegada - description: "Datetime da chegada da viagem" - - name: motivo - description: Motivo para criação do recurso - - name: julgamento - description: Julgamento do recurso - - name: motivo_julgamento - description: Motivos para julgamento - - name: observacao - description: Observações acerca do julgamentodo recurso - - name: data - description: Data do recurso (partição da tabela) diff --git a/queries/models/br_rj_riodejaneiro_sigmob/agency.sql b/queries/models/br_rj_riodejaneiro_sigmob/agency.sql deleted file mode 100755 index 0df94f2f..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/agency.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(agency_id AS STRING) agency_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var('agency_staging')}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/agency_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/agency_desaninhada.sql deleted file mode 100644 index 4ad1311e..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/agency_desaninhada.sql +++ /dev/null @@ -1,10 +0,0 @@ - -SELECT - agency_id, - JSON_VALUE(content, "$.agency_name") agency_name, - JSON_VALUE(content, "$.agency_url") agency_url, - JSON_VALUE(content, "$.agency_timezone") agency_timezone, - JSON_VALUE(content, "$.agency_lang") agency_lang, - JSON_VALUE(content, "$.agency_phone") agency_phone, - DATE(data_versao) data_versao -FROM {{ ref('agency') }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql b/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql deleted file mode 100644 index 77f2e115..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql +++ /dev/null @@ -1,21 +0,0 @@ -WITH t AS ( -SELECT - data_versao, - case - when - json_value(content, '$.IDPropriedadeParada') is null - then false - else true - end flag_vistoriada, - json_value(content, '$.AP') as AP, - json_value(content, '$.RA') as RA, - json_value(content, '$.Bairro') as Bairro -FROM {{ ref('stops') }} -where json_value(content, '$.PontoExistente') = 'SIM' -and json_value(content, '$.idModalSmtr') in ('22', 'O')) -select data_versao, AP, Bairro, - sum(case when flag_vistoriada then 1 else 0 end) n_vistoridas, - count(*) n_pontos -from t -group by data_versao, AP, Bairro -order by 1,2,3 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/calendar.sql b/queries/models/br_rj_riodejaneiro_sigmob/calendar.sql deleted file mode 100644 index 54b9c397..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/calendar.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(service_id AS STRING) service_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("calendar_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/calendar_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/calendar_desaninhada.sql deleted file mode 100644 index 9630cb62..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/calendar_desaninhada.sql +++ /dev/null @@ -1,14 +0,0 @@ -SELECT - service_id, - JSON_VALUE(content, "$.monday") monday, - JSON_VALUE(content, "$.tuesday") tuesday, - JSON_VALUE(content, "$.wednesday") wednesday, - JSON_VALUE(content, "$.thursday") thursday, - JSON_VALUE(content, "$.friday") friday, - JSON_VALUE(content, "$.saturday") saturday, - JSON_VALUE(content, "$.sunday") sunday, - JSON_VALUE(content, "$.start_date") start_date, - JSON_VALUE(content, "$.end_date") end_date, - DATE(data_versao) data_versao - -FROM {{ ref('calendar') }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql b/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql deleted file mode 100644 index 11ffcc38..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql +++ /dev/null @@ -1,209 +0,0 @@ -{{ - config( - materialized='incremental', - unique_key='data', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - } - ) -}} - -with -agency as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_agency")}}") THEN DATE("{{var("data_inclusao_agency")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("agency") }} - ) -ON data = DATE(data_versao) -), -calendar as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_calendar")}}") THEN DATE("{{var("data_inclusao_calendar")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("calendar") }} - ) -ON data = DATE(data_versao) -), -frota_determinada as ( -SELECT - data, - DATE(data_versao) as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_frota_determinada")}}") THEN DATE("{{var("data_inclusao_frota_determinada")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("frota_determinada") }} - ) -ON DATE(data) = DATE(data_versao) -), -holidays as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_holidays")}}") THEN DATE("{{var("data_inclusao_holidays")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("holidays") }} - ) -ON data = DATE(data_versao) -), -linhas as ( - SELECT - data, - DATE(data_versao) as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_linhas")}}") THEN DATE("{{var("data_inclusao_linhas")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("linhas") }} - ) -ON data = DATE(data_versao) -), -routes as ( -SELECT - data, - DATE(data_versao) as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_routes")}}") THEN DATE("{{var("data_inclusao_routes")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("routes") }} - ) -ON data = data_versao -), -shapes as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_shapes")}}") THEN DATE("{{var("data_inclusao_shapes")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("shapes_geom") }} - ) -ON data = DATE(data_versao) -), -stop_details as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_stop_details")}}") THEN DATE("{{var("data_inclusao_stop_details")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("stop_details") }} - ) -ON data = DATE(data_versao) -), -stop_times as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_stop_times")}}") THEN DATE("{{var("data_inclusao_stop_times")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("stop_times") }} - ) -ON data = DATE(data_versao) -), -stops as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_stops")}}") THEN DATE("{{var("data_inclusao_stops")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("stops") }} - ) -ON data = DATE(data_versao) -), -trips as ( -SELECT - data, - data_versao as data_versao_original, - CASE WHEN data <= DATE("{{var("data_inclusao_trips")}}") THEN DATE("{{var("data_inclusao_trips")}}") ELSE - LAST_VALUE(DATE(data_versao) IGNORE NULLS) OVER (ORDER BY data ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) - END AS data_versao_efetiva -FROM UNNEST(GENERATE_DATE_ARRAY(DATE('2021-01-01'), CURRENT_DATE())) data -LEFT JOIN ( - SELECT DISTINCT data_versao - FROM {{ ref("trips") }} - ) -ON data = DATE(data_versao) -), -joined as ( - select - DATE_ADD(s.data, INTERVAL 1 DAY) data, - a.data_versao_efetiva as data_versao_efetiva_agency, - c.data_versao_efetiva as data_versao_efetiva_calendar, - f.data_versao_efetiva as data_versao_efetiva_frota_determinada, - h.data_versao_efetiva as data_versao_efetiva_holidays, - l.data_versao_efetiva as data_versao_efetiva_linhas, - r.data_versao_efetiva as data_versao_efetiva_routes, - s.data_versao_efetiva as data_versao_efetiva_shapes, - sd.data_versao_efetiva as data_versao_efetiva_stop_details, - st.data_versao_efetiva as data_versao_efetiva_stop_times, - sp.data_versao_efetiva as data_versao_efetiva_stops, - t.data_versao_efetiva as data_versao_efetiva_trips - from agency a - join shapes s - on s.data = a.data - join calendar c - on a.data = c.data - join frota_determinada f - on a.data = f.data - join holidays h - on a.data = h.data - join linhas l - on a.data = l.data - join routes r - on a.data = r.data - join stops sp - on a.data = sp.data - join stop_details sd - on a.data = sd.data - join stop_times st - on a.data = st.data - join trips t - on a.data = t.data -) -select * -from joined -{% if is_incremental() %} - {%set max_date_partition = run_query("select max(DATE(data)) from " ~ this).columns[0].values()[0]%} - where DATE(data) > ("{{max_date_partition}}") -{% endif %} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql deleted file mode 100644 index 6cab760b..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(route_id AS STRING) route_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("frota_determinada_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql deleted file mode 100644 index 7f8f2d28..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql +++ /dev/null @@ -1,12 +0,0 @@ -select - data_versao, - json_value(content, '$.IDFrotaDeterminada') IDFrotaDeterminada, - json_value(content, '$.TipoOnibusID') TipoOnibusID, - SAFE_CAST(json_value(content, '$.FrotaDeterminada') AS INT64) FrotaDeterminada, - SAFE_CAST(json_value(content, '$.FrotaServico') AS INT64) FrotaServico, - json_value(content, '$.dataInicioVigencia') dataInicioVigencia, - json_value(content, '$.dataFimVigencia') dataFimVigencia, - json_value(content, '$.legislacaoInicioVigencia') legislacaoInicioVigencia, - json_value(content, '$.legislacaoFimVigencia') legislacaoFimVigencia, - json_value(content, '$.route_id') route_id -FROM {{ ref('frota_determinada') }} diff --git a/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql b/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql deleted file mode 100644 index ea8c0289..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -DATE(SAFE_CAST(Data AS DATETIME)) data, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("holidays_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql b/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql deleted file mode 100644 index e4f9be0f..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(linha_id AS STRING) linha_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("linhas_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/linhas_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/linhas_desaninhada.sql deleted file mode 100644 index 582524bd..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/linhas_desaninhada.sql +++ /dev/null @@ -1,18 +0,0 @@ -SELECT - linha_id, - JSON_VALUE(content, "$.agency_id") agency_id, - JSON_VALUE(content, "$.sigla") sigla, - JSON_VALUE(content, "$.idModalSmtr") id_modal_smtr, - JSON_VALUE(content, "$.TipoLinha") tipo_linha, - JSON_VALUE(content, "$.NomeLinha") nome_linha, - JSON_VALUE(content, "$.SiglaCompleta") sigla_completa, - JSON_VALUE(content, "$.NumeroServicos") numero_servicos, - JSON_VALUE(content, "$.ativa") ativa, - JSON_VALUE(content, "$.FrotaDeterminada") frota_determinada, - JSON_VALUE(content, "$.LegisFrotaDeterminada") legis_frota_determinada, - JSON_VALUE(content, "$.FrotaOperante") frota_operante, - JSON_VALUE(content, "$.id") id, - JSON_VALUE(content, "$.Apresentacao") apresentacao, - JSON_VALUE(content, "$.agency_name") agency_name, - DATE(data_versao) data_versao -FROM {{ ref('linhas') }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/routes.sql b/queries/models/br_rj_riodejaneiro_sigmob/routes.sql deleted file mode 100755 index 3bc25346..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/routes.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(route_id AS STRING) route_id, -REPLACE(content, "None", '') content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("routes_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql deleted file mode 100644 index c06c60d8..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql +++ /dev/null @@ -1,56 +0,0 @@ -with desaninhada as ( - select - data_versao, - json_value(content, '$.agency_id') agency_id, - json_value(content, '$.route_short_name') route_short_name, - json_value(content, '$.route_long_name') route_long_name, - json_value(content, '$.route_desc') route_desc, - json_value(content, '$.route_type') route_type, - json_value(content, '$.route_url') route_url, - json_value(content, '$.route_color') route_color, - json_value(content, '$.route_text_color') route_text_color, - json_value(content, '$.ATIVA') ATIVA, - json_value(content, '$.ATUALIZADO') ATUALIZADO, - json_value(content, '$.Descricao') Descricao, - json_value(content, '$.idModalSmtr') idModalSmtr, - json_value(content, '$.linha_id') linha_id, - json_value(content, '$.brs') brs, - json_value(content, '$.IDTipoServico') IDTipoServico, - json_value(content, '$.IDVariacaoServico') IDVariacaoServico, - json_value(content, '$.origem') origem, - json_value(content, '$.destino') destino, - json_value(content, '$.ClassificacaoEspacial') ClassificacaoEspacial, - json_value(content, '$.ClassificacaoHierarquica') ClassificacaoHierarquica, - json_value(content, '$.InicioVigencia') InicioVigencia, - json_value(content, '$.LegisInicioVigencia') LegisInicioVigencia, - json_value(content, '$.fimVigencia') fimVigencia, - json_value(content, '$.LegisfimVigencia') LegisfimVigencia, - json_value(content, '$.FlagVigente') FlagVigente, - json_value(content, '$.FrotaDeterminada') FrotaDeterminada, - json_value(content, '$.LegisFrota') LegisFrota, - json_value(content, '$.FrotaServico') FrotaServico, - json_value(content, '$.FrotaOperante') FrotaOperante, - json_value(content, '$.Observacoes') Observacoes, - json_value(content, '$.IDParadaOrigem') IDParadaOrigem, - json_value(content, '$.SiglaServico') SiglaServico, - json_value(content, '$.IDParadaDestino') IDParadaDestino, - json_value(content, '$.route_id') route_id, - json_value(content, '$.id') id, - json_value(content, '$.agency_name') agency_name, - json_value(content, '$.Via') Via, - json_value(content, '$.Vista') Vista, - json_value(content, '$.Complemento') Complemento, - json_value(content,'$.OLD_routes_id') old_route_id -from {{ ref('routes') }} -), -ultimas_versoes as ( - select - * - from desaninhada - where DATE(fimVigencia) >= DATE(data_versao) or fimVigencia is null - order by route_id, fimVigencia -) -select - * -from ultimas_versoes - diff --git a/queries/models/br_rj_riodejaneiro_sigmob/schema.yaml b/queries/models/br_rj_riodejaneiro_sigmob/schema.yaml deleted file mode 100644 index a1d4c8b0..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/schema.yaml +++ /dev/null @@ -1,114 +0,0 @@ -version: 2 - -models: - # - name: data_versao_efetiva - # description: "Especifica qual data versao mais recente disponível para uma determinada data." - # columns: - # - name: data - # description: "The primary key for this table" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_agency - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_calendar - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_frota_determinada - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_holidays - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_linhas - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_routes - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_shapes - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_stop_details - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_stop_times - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_stops - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - # - name: data_versao_efetiva_trips - # description: "data_versao mais recente para a tabela descrita no sufixo" - # tests: - # - not_null: - # partition_column: data - - name: routes_desaninhada - description: Cadastro dos serviços (routes) - columns: - - name: route_id - tests: - - not_null: - partition_column: data_versao - - unique_key: - partition_column: data_versao - combined_keys: "" - - name: trips_desaninhada - description: Cadastro de itinerários (trips) - columns: - - name: trip_id - description: Identificador único para um itinerário - tests: - - not_null: - partition_column: data_versao - - unique_key: - partition_column: data_versao - combined_keys: "" - - one_to_one: - partition_column: data_versao - to_table: ref('shapes_geom') - - name: route_id - description: Identificador única para a route (serviço) - tests: - - many_to_one: - foreign_key: route_id - partition_column: data_versao - to_table: ref('routes_desaninhada') - - name: shapes_geom - description: tabela com as linestrings de cada itinarário consolidadas a partir da captura ponto a ponto - columns: - - name: shape_id - tests: - - not_null: - partition_column: data_versao - - name: trip_id - tests: - - not_null: - partition_column: data_versao - - unique_key: - partition_column: data_versao - combined_keys: "" - - one_to_one: - partition_column: data_versao - to_table: ref('trips_desaninhada') diff --git a/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql b/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql deleted file mode 100644 index f2c22310..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(shape_id AS STRING) shape_id, -REPLACE(content, "None", '') content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("shapes_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql b/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql deleted file mode 100644 index bf596717..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql +++ /dev/null @@ -1,121 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data_versao", - "data_type": "date", - "granularity":"day" - } -) -}} -{% if is_incremental() and execute %} - {% set start_date = run_query("select max(data_versao) from " ~ this).columns[0].values()[0] %} -{% else %} - {% set start_date = "2021-08-24" %} -{% endif %} -with - trips as ( - SELECT - trip_id, - shape_id, - route_id, - DATE(data_versao) data_versao - FROM {{ ref('trips_desaninhada') }} t - WHERE DATE(data_versao) between DATE("{{start_date}}") and DATE_ADD(DATE("{{start_date}}"), INTERVAL 15 DAY) - ), - linhas as ( - SELECT - trip_id, - shape_id, - t.route_id, - route_short_name linha, - idModalSmtr id_modal_smtr, - t.data_versao, - FROM trips t - INNER JOIN ( - SELECT * - FROM {{ ref('routes_desaninhada') }} - WHERE DATE(data_versao) between DATE("{{start_date}}") and DATE_ADD(DATE("{{start_date}}"), INTERVAL 15 DAY) - ) r - on t.route_id = r.route_id - and t.data_versao = r.data_versao - ), - contents as ( - -- EXTRACTS VALUES FROM JSON STRING FIELD 'content' - SELECT - shape_id, - ST_GEOGPOINT( - SAFE_CAST(json_value(content, "$.shape_pt_lon") AS FLOAT64), - SAFE_CAST(json_value(content, "$.shape_pt_lat") AS FLOAT64) - ) ponto_shape, - SAFE_CAST(json_value(content, "$.shape_pt_sequence") as INT64) shape_pt_sequence, - DATE(data_versao) AS data_versao - FROM {{ ref('shapes') }} s - WHERE DATE(data_versao) between DATE("{{start_date}}") and DATE_ADD(DATE("{{start_date}}"), INTERVAL 15 DAY) - ), - pts as ( - select - *, - max(shape_pt_sequence) over( - partition by data_versao, shape_id - ) final_pt_sequence - from contents c - order by data_versao, shape_id, shape_pt_sequence - ), - shapes as ( - -- BUILD LINESTRINGS OVER SHAPE POINTS - SELECT - shape_id, - data_versao, - st_makeline(ARRAY_AGG(ponto_shape)) as shape - FROM pts - GROUP BY 1,2 - ), - boundary as ( - -- EXTRACT START AND END POINTS FROM SHAPES - SELECT - c1.shape_id, - c1.ponto_shape start_pt, - c2.ponto_shape end_pt, - c1.data_versao - FROM (select * from pts where shape_pt_sequence = 1) c1 - JOIN (select * from pts where shape_pt_sequence = final_pt_sequence) c2 - ON c1.shape_id = c2.shape_id and c1.data_versao = c2.data_versao - ), - merged as ( - -- JOIN SHAPES AND BOUNDARY POINTS - SELECT - s.*, - b.* except(data_versao, shape_id), - round(ST_LENGTH(shape),1) shape_distance, - FROM shapes s - JOIN boundary b - ON s.shape_id = b.shape_id and s.data_versao = b.data_versao - ), - ids as ( - SELECT - trip_id, - m.shape_id, - route_id, - id_modal_smtr, - replace(linha, " ", "") as linha_gtfs, - shape, - shape_distance, - start_pt, - end_pt, - m.data_versao, - row_number() over( - partition by m.data_versao, m.shape_id, l.trip_id - ) rn - FROM merged m - JOIN linhas l - ON m.shape_id = l.shape_id - AND m.data_versao = l.data_versao - -- mudar join para o route_id em todas as dependencias - ) -SELECT - * except(rn) -FROM ids -WHERE rn = 1 -{% if is_incremental %} -AND data_versao > DATE("{{start_date}}") -{% endif %} diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql deleted file mode 100644 index ec2a44da..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(stop_id AS STRING) stop_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("stop_details_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql deleted file mode 100644 index 407bb4e6..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql +++ /dev/null @@ -1,45 +0,0 @@ -/*Desaninha os campos presentes em 'content' da tabela stop_details*/ -SELECT - stop_id, - json_value(content, '$.stop_name') stop_name, - json_value(content, '$.stop_desc') stop_desc, - json_value(content, '$.stop_lat') stop_lat, - json_value(content, '$.stop_lon') stop_lon, - json_value(content, '$.location_type') location_type, - json_value(content, '$.Modal') modal, - json_value(content, '$.Corredor') corredor, - json_value(content, '$.Tipo de parada') tipo_de_parada , - json_value(content, '$.Tipo Sentido') tipo_sentido, - json_value(content, '$.Propriedade da Parada') propriedade_da_parada, - json_value(content, '$.Seletivado') seletivado, - json_value(content, '$.Sinalização') sinalizacao, - json_value(content, '$.Conservação') conservacao, - json_value(content, '$.Tipo de abrigo') tipo_de_abrigo, - json_value(content, '$.Conservação do abrigo') conservacao_do_abrigo, - json_value(content, '$.Tipo de assento') tipo_do_assento, - json_value(content, '$.Tipo de baia') tipo_de_baia, - json_value(content, '$.Tipo de calçada') tipo_de_calcada, - json_value(content, '$."Possui lixeiras?"') possui_lixeiras, - json_value(content, '$.Tipo rampa') tipo_rampa, - json_value(content, '$."Braile?"') braile, - json_value(content, '$."Piso tátil?"') piso_tatil, - json_value(content, '$."Elevador?"') elevador, - json_value(content, '$.Número de vagas') numero_de_vagas, - json_value(content, '$.Número de cabines') numero_de_cabines, - json_value(content, '$.AP') ap, - json_value(content, '$.RA') ra, - json_value(content, '$.Bairro') bairro, - json_value(content, '$.Observações') observacoes, - json_value(content, '$.Endereço') endereco, - json_value(content, '$.MultiModal') multi_modal, - json_value(content, '$.id_sequencial') id_sequencial, - json_value(content, '$.NumeroLinha') numero_linha, - json_value(content, '$.Vista') vista, - json_value(content, '$.Horários') horarios, - json_value(content, '$."Existe o ponto?"') existe_o_ponto, - json_value(content, '$.parent_station') parent_station, - json_value(content, '$.nome_ponto') nome_ponto, - json_value(content, '$.route_type') route_type, - data_versao - -FROM {{ ref("stop_details") }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql deleted file mode 100755 index b9c8b74f..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(stop_id AS STRING) stop_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("stop_times_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_times_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_times_desaninhada.sql deleted file mode 100644 index 7be697de..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_times_desaninhada.sql +++ /dev/null @@ -1,9 +0,0 @@ -SELECT - stop_id, - JSON_VALUE(content, "$.trip_id") trip_id, - JSON_VALUE(content, "$.arrival_time") arrival_time, - JSON_VALUE(content, "$.departure_time") departure_time, - JSON_VALUE(content, "$.stop_sequence") stop_sequence, - JSON_VALUE(content, "$.shape_dist_traveled") shape_dist_traveled, - DATE(data_versao) data_versao -FROM {{ ref('stop_times') }} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stops.sql b/queries/models/br_rj_riodejaneiro_sigmob/stops.sql deleted file mode 100644 index 2250b677..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stops.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(stop_id AS STRING) stop_id, -REPLACE(content, "None", '') content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("stops_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql deleted file mode 100644 index c0dd04d1..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql +++ /dev/null @@ -1,51 +0,0 @@ -SELECT - stop_id, - case when json_value(content, '$.IDPropriedadeParada') is null then false else true end flag_vistoriada, - json_value(content, '$.stop_name') as stop_name, - json_value(content, '$.stop_desc') as stop_desc, - json_value(content, '$.stop_lat') as stop_lat, - json_value(content, '$.stop_lon') as stop_lon, - json_value(content, '$.location_type') as location_type, - json_value(content, '$.GrupoLatitude') as GrupoLatitude, - json_value(content, '$.GrupoLongitude') as GrupoLongitude, - json_value(content, '$.idModalSmtr') as idModalSmtr, - json_value(content, '$.IDCorredor') as IDCorredor, - json_value(content, '$.IDTipoParada') as IDTipoParada, - json_value(content, '$.IDTipoSentido') as IDTipoSentido, - json_value(content, '$.IDPropriedadeParada') as IDPropriedadeParada, - json_value(content, '$.Seletivado') as Seletivado, - json_value(content, '$.BRS') as BRS, - json_value(content, '$.IDTipoSinalizacao') as IDTipoSinalizacao, - json_value(content, '$.IDConservacaoSinalizacao') as IDConservacaoSinalizacao, - json_value(content, '$.IDTipoAbrigo') as IDTipoAbrigo, - json_value(content, '$.ConservacaoAbrigo') as ConservacaoAbrigo, - json_value(content, '$.IDTipoAssento') as IDTipoAssento, - json_value(content, '$.IDTipoBaia') as IDTipoBaia, - json_value(content, '$.QualidadePavimento') as QualidadePavimento, - json_value(content, '$.IDTipoCalcada') as IDTipoCalcada, - json_value(content, '$.IDLixeiras') as IDLixeiras, - json_value(content, '$.IDRampa') as IDRampa, - json_value(content, '$.braile') as braile, - json_value(content, '$.piso_tatil') as piso_tatil, - json_value(content, '$.elevador') as elevador, - json_value(content, '$.n_vagas') as n_vagas, - json_value(content, '$.n_cabines') as n_cabines, - json_value(content, '$.AP') as AP, - json_value(content, '$.RA') as RA, - json_value(content, '$.Bairro') as Bairro, - json_value(content, '$.Observacoes') as Observacoes, - json_value(content, '$.dataAtualizacao') as dataAtualizacao, - json_value(content, '$.endereco') as endereco, - json_value(content, '$.IDBairro') as IDBairro, - json_value(content, '$.IDRa') as IDRa, - json_value(content, '$.MultiModal') as MultiModal, - json_value(content, '$.id_sequencial') as id_sequencial, - json_value(content, '$.NumeroLinha') as NumeroLinha, - json_value(content, '$.Vista') as Vista, - json_value(content, '$.Horarios') as Horarios, - json_value(content, '$.id') as id, - json_value(content, '$.PontoExistente') as PontoExistente -FROM {{ ref('stops') }} t -where data_versao = (select max(data_versao) FROM {{ ref("stops") }}) -and json_value(content, '$.PontoExistente') = 'SIM' -and json_value(content, '$.idModalSmtr') in ('22', '23', 'O') diff --git a/queries/models/br_rj_riodejaneiro_sigmob/trips.sql b/queries/models/br_rj_riodejaneiro_sigmob/trips.sql deleted file mode 100755 index 92856abb..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/trips.sql +++ /dev/null @@ -1,26 +0,0 @@ -/* - -Query para publicar a tabela. - -Esse é o lugar para: - - modificar nomes, ordem e tipos de colunas - - dar join com outras tabelas - - criar colunas extras (e.g. logs, proporções, etc.) - -Qualquer coluna definida aqui deve também existir em `table_config.yaml`. - -# Além disso, sinta-se à vontade para alterar alguns nomes obscuros -# para algo um pouco mais explícito. - -TIPOS: - - Para modificar tipos de colunas, basta substituir STRING por outro tipo válido. - - Exemplo: `SAFE_CAST(column_name AS NUMERIC) column_name` - - Mais detalhes: https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types - -*/ - -SELECT -SAFE_CAST(trip_id AS STRING) trip_id, -REPLACE(content,"None","") content, -SAFE_CAST(data_versao AS DATE) data_versao -from {{var("trips_staging")}} as t \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql deleted file mode 100644 index e2c3dc02..00000000 --- a/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql +++ /dev/null @@ -1,45 +0,0 @@ -with contents as ( - select - trip_id, - json_value(content, "$.route_id") route_id, - json_value(content, "$.service_id") service_id, - json_value(content, "$.trip_headsign") trip_headsign, - json_value(content, "$.trip_short_name") trip_short_name, - json_value(content, "$.direction_id") direction_id, - json_value(content, "$.block_id") block_id, - json_value(content, "$.shape_id") shape_id, - json_value(content, "$.variacao_itinerario") variacao_itinerario, - json_value(content, "$.versao") versao, - json_value(content, "$.complemento") complemento, - json_value(content, "$.via") via, - json_value(content, "$.observacoes") observacoes, - json_value(content, "$.ultima_medicao_operante") ultima_medicao_operante, - json_value(content, "$.idModalSmtr") id_modal_smtr, - json_value(content, "$.Direcao") direcao, - json_value(content, "$.id") id, - DATE(data_versao) data_versao - - from {{ ref('trips') }} -), -routes as ( - select - * - from {{ ref('routes_desaninhada') }} -), -ultimas_versoes as ( - select - c.*, - row_number() over( - partition by c.data_versao, c.route_id, c.direction_id, c.variacao_itinerario - order by c.versao desc - ) rn - from contents c - join routes r - on c.route_id = r.route_id - and c.data_versao = r.data_versao -) -select - * except(rn) -from ultimas_versoes -where rn=1 - diff --git a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql b/queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql deleted file mode 100644 index 97978ab0..00000000 --- a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql +++ /dev/null @@ -1,34 +0,0 @@ -{{ - config( - alias='operadora_empresa', - ) -}} - -WITH - operadora_empresa AS ( - SELECT - data, - SAFE_CAST(Perm_Autor AS STRING) AS perm_autor, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.CNPJ') AS STRING) AS cnpj, - DATE(PARSE_TIMESTAMP('%d/%m/%Y', SAFE_CAST(JSON_VALUE(content, '$.Data') AS STRING)), "America/Sao_Paulo") AS data_registro, - SAFE_CAST(JSON_VALUE(content, '$.Processo') AS STRING) AS processo, - SAFE_CAST(JSON_VALUE(content, '$.Razao_Social') AS STRING) AS razao_social, - SAFE_CAST(JSON_VALUE(content, '$.modo') AS STRING) AS modo, - SAFE_CAST(JSON_VALUE(content, '$.tipo_permissao') AS STRING) AS tipo_permissao - FROM - {{ source("br_rj_riodejaneiro_stu_staging", "operadora_empresa") }} - ), - operadora_empresa_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY COALESCE(cnpj, perm_autor), modo ORDER BY timestamp_captura DESC, data_registro DESC) AS rn - FROM - operadora_empresa - ) -SELECT - * EXCEPT(rn) -FROM - operadora_empresa_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql b/queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql deleted file mode 100644 index dd80db8c..00000000 --- a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql +++ /dev/null @@ -1,36 +0,0 @@ -{{ - config( - alias='operadora_pessoa_fisica', - ) -}} - -WITH - operadora_pessoa_fisica AS ( - SELECT - data, - SAFE_CAST(Perm_Autor AS STRING) AS perm_autor, - timestamp_captura, - SAFE_CAST(JSON_VALUE(content, '$.CPF') AS STRING) AS cpf, - PARSE_DATE('%d/%m/%Y', LEFT(SAFE_CAST(JSON_VALUE(content, '$.Data') AS STRING), 10)) AS data_registro, - SAFE_CAST(JSON_VALUE(content, '$.Ratr') AS STRING) AS ratr, - SAFE_CAST(JSON_VALUE(content, '$.Processo') AS STRING) AS processo, - SAFE_CAST(JSON_VALUE(content, '$.Nome') AS STRING) AS nome, - SAFE_CAST(JSON_VALUE(content, '$.Placa') AS STRING) AS placa, - SAFE_CAST(JSON_VALUE(content, '$.modo') AS STRING) AS modo, - SAFE_CAST(JSON_VALUE(content, '$.tipo_permissao') AS STRING) AS tipo_permissao - FROM - {{ source("br_rj_riodejaneiro_stu_staging", "operadora_pessoa_fisica") }} - ), - operadora_pessoa_fisica_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY COALESCE(cpf, perm_autor), modo ORDER BY timestamp_captura DESC, data_registro DESC) AS rn - FROM - operadora_pessoa_fisica - ) -SELECT - * EXCEPT(rn) -FROM - operadora_pessoa_fisica_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql b/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql deleted file mode 100644 index 2e50a6e8..00000000 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql +++ /dev/null @@ -1,139 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - 'field': 'data', - 'data_type': 'date', - 'granularity': 'day' - } - ) -}} -/* -Descrição: -Junção dos passos de tratamento, junta as informações extras que definimos a partir dos registros -capturados. -Para descrição detalhada de como cada coluna é calculada, consulte a documentação de cada uma das tabelas -utilizadas abaixo. -1. registros_filtrada: filtragem e tratamento básico dos dados brutos capturados. -2. aux_registros_velocidade: estimativa da velocidade de veículo a cada ponto registrado e identificação -do estado de movimento ('parado', 'andando') -3. aux_registros_parada: identifica veículos parados em terminais ou garagens conhecidas -4. aux_registros_flag_trajeto_correto: calcula intersecções das posições registradas para cada veículo -com o traçado da linha informada. -5. As junções (joins) são feitas sobre o id_veículo e a timestamp_gps. -*/ -WITH - registros as ( - -- 1. registros_filtrada - SELECT - id_veiculo, - timestamp_gps, - timestamp_captura, - velocidade, - servico, - latitude, - longitude, - FROM {{ ref('brt_aux_registros_filtrada') }} - {% if is_incremental() -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - AND DATETIME_DIFF(timestamp_captura, timestamp_gps, MINUTE) BETWEEN 0 AND 1 - {%- endif -%} - ), - velocidades AS ( - -- 2. velocidades - SELECT - id_veiculo, timestamp_gps, servico, velocidade, distancia, flag_em_movimento - FROM {{ ref('brt_aux_registros_velocidade') }} - ), - paradas as ( - -- 3. paradas - SELECT - id_veiculo, timestamp_gps, servico, tipo_parada, - FROM {{ ref('brt_aux_registros_parada') }} - ), - flags AS ( - -- 4. flag_trajeto_correto - SELECT - id_veiculo, - timestamp_gps, - servico, - route_id, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist - FROM {{ ref('brt_aux_registros_flag_trajeto_correto') }} - ) --- 5. Junção final -SELECT - "BRT" modo, - r.timestamp_gps, - date(r.timestamp_gps) data, - extract(time from r.timestamp_gps) hora, - r.id_veiculo, - replace(r.servico, " ", "") as servico, - r.latitude, - r.longitude, - CASE - WHEN - flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN true - ELSE false - END flag_em_operacao, - v.flag_em_movimento, - p.tipo_parada, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist, - CASE - WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN 'Em operação' - WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false - THEN 'Operando fora trajeto' - WHEN flag_em_movimento is false - THEN - CASE - WHEN tipo_parada is not null - THEN concat("Parado ", tipo_parada) - ELSE - CASE - WHEN flag_trajeto_correto_hist is true - THEN 'Parado trajeto correto' - ELSE 'Parado fora trajeto' - END - END - END status, - r.velocidade velocidade_instantanea, - v.velocidade velocidade_estimada_10_min, - v.distancia, - "{{ var("version") }}" as versao -FROM - registros r - -JOIN - flags f -ON - r.id_veiculo = f.id_veiculo - AND r.timestamp_gps = f.timestamp_gps - AND r.servico = f.servico - -JOIN - velocidades v -ON - r.id_veiculo = v.id_veiculo - AND r.timestamp_gps = v.timestamp_gps - AND r.servico = v.servico - -JOIN - paradas p -ON - r.id_veiculo = p.id_veiculo - AND r.timestamp_gps = p.timestamp_gps - AND r.servico = p.servico -{% if is_incremental() -%} - WHERE - date(r.timestamp_gps) between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND r.timestamp_gps > "{{var('date_range_start')}}" and r.timestamp_gps <="{{var('date_range_end')}}" - AND DATETIME_DIFF(r.timestamp_captura, r.timestamp_gps, MINUTE) BETWEEN 0 AND 1 -{%- endif -%} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql b/queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql deleted file mode 100644 index 2e50a6e8..00000000 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql +++ /dev/null @@ -1,139 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - 'field': 'data', - 'data_type': 'date', - 'granularity': 'day' - } - ) -}} -/* -Descrição: -Junção dos passos de tratamento, junta as informações extras que definimos a partir dos registros -capturados. -Para descrição detalhada de como cada coluna é calculada, consulte a documentação de cada uma das tabelas -utilizadas abaixo. -1. registros_filtrada: filtragem e tratamento básico dos dados brutos capturados. -2. aux_registros_velocidade: estimativa da velocidade de veículo a cada ponto registrado e identificação -do estado de movimento ('parado', 'andando') -3. aux_registros_parada: identifica veículos parados em terminais ou garagens conhecidas -4. aux_registros_flag_trajeto_correto: calcula intersecções das posições registradas para cada veículo -com o traçado da linha informada. -5. As junções (joins) são feitas sobre o id_veículo e a timestamp_gps. -*/ -WITH - registros as ( - -- 1. registros_filtrada - SELECT - id_veiculo, - timestamp_gps, - timestamp_captura, - velocidade, - servico, - latitude, - longitude, - FROM {{ ref('brt_aux_registros_filtrada') }} - {% if is_incremental() -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - AND DATETIME_DIFF(timestamp_captura, timestamp_gps, MINUTE) BETWEEN 0 AND 1 - {%- endif -%} - ), - velocidades AS ( - -- 2. velocidades - SELECT - id_veiculo, timestamp_gps, servico, velocidade, distancia, flag_em_movimento - FROM {{ ref('brt_aux_registros_velocidade') }} - ), - paradas as ( - -- 3. paradas - SELECT - id_veiculo, timestamp_gps, servico, tipo_parada, - FROM {{ ref('brt_aux_registros_parada') }} - ), - flags AS ( - -- 4. flag_trajeto_correto - SELECT - id_veiculo, - timestamp_gps, - servico, - route_id, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist - FROM {{ ref('brt_aux_registros_flag_trajeto_correto') }} - ) --- 5. Junção final -SELECT - "BRT" modo, - r.timestamp_gps, - date(r.timestamp_gps) data, - extract(time from r.timestamp_gps) hora, - r.id_veiculo, - replace(r.servico, " ", "") as servico, - r.latitude, - r.longitude, - CASE - WHEN - flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN true - ELSE false - END flag_em_operacao, - v.flag_em_movimento, - p.tipo_parada, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist, - CASE - WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN 'Em operação' - WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false - THEN 'Operando fora trajeto' - WHEN flag_em_movimento is false - THEN - CASE - WHEN tipo_parada is not null - THEN concat("Parado ", tipo_parada) - ELSE - CASE - WHEN flag_trajeto_correto_hist is true - THEN 'Parado trajeto correto' - ELSE 'Parado fora trajeto' - END - END - END status, - r.velocidade velocidade_instantanea, - v.velocidade velocidade_estimada_10_min, - v.distancia, - "{{ var("version") }}" as versao -FROM - registros r - -JOIN - flags f -ON - r.id_veiculo = f.id_veiculo - AND r.timestamp_gps = f.timestamp_gps - AND r.servico = f.servico - -JOIN - velocidades v -ON - r.id_veiculo = v.id_veiculo - AND r.timestamp_gps = v.timestamp_gps - AND r.servico = v.servico - -JOIN - paradas p -ON - r.id_veiculo = p.id_veiculo - AND r.timestamp_gps = p.timestamp_gps - AND r.servico = p.servico -{% if is_incremental() -%} - WHERE - date(r.timestamp_gps) between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND r.timestamp_gps > "{{var('date_range_start')}}" and r.timestamp_gps <="{{var('date_range_end')}}" - AND DATETIME_DIFF(r.timestamp_captura, r.timestamp_gps, MINUTE) BETWEEN 0 AND 1 -{%- endif -%} \ No newline at end of file diff --git a/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql b/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql deleted file mode 100644 index 7ed9db8f..00000000 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql +++ /dev/null @@ -1,139 +0,0 @@ -{{ - config( - materialized='incremental', - partition_by={ - 'field':"data", - 'data_type':'date', - 'granularity': 'day' - } - ) -}} -/* -Descrição: -Junção dos passos de tratamento, junta as informações extras que definimos a partir dos registros -capturados. -Para descrição detalhada de como cada coluna é calculada, consulte a documentação de cada uma das tabelas -utilizadas abaixo. -1. registros_filtrada: filtragem e tratamento básico dos dados brutos capturados. -2. aux_registros_velocidade: estimativa da velocidade de veículo a cada ponto registrado e identificação -do estado de movimento ('parado', 'andando') -3. aux_registros_parada: identifica veículos parados em terminais ou garagens conhecidas -4. aux_registros_flag_trajeto_correto: calcula intersecções das posições registradas para cada veículo -com o traçado da linha informada. -5. As junções (joins) são feitas sobre o id_veículo e a timestamp_gps. -*/ -WITH - registros as ( - -- 1. registros_filtrada - SELECT - id_veiculo, - timestamp_gps, - timestamp_captura, - velocidade, - linha, - latitude, - longitude, - FROM {{ ref('sppo_aux_registros_filtrada') }} - {% if is_incremental() -%} - WHERE - data between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND timestamp_gps > "{{var('date_range_start')}}" and timestamp_gps <="{{var('date_range_end')}}" - {%- endif -%} - ), - velocidades AS ( - -- 2. velocidades - SELECT - id_veiculo, timestamp_gps, linha, velocidade, distancia, flag_em_movimento - FROM - {{ ref('sppo_aux_registros_velocidade') }} - ), - paradas as ( - -- 3. paradas - SELECT - id_veiculo, timestamp_gps, linha, tipo_parada, - FROM {{ ref('sppo_aux_registros_parada') }} - ), - flags AS ( - -- 4. flag_trajeto_correto - SELECT - id_veiculo, - timestamp_gps, - linha, - route_id, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist - FROM - {{ ref('sppo_aux_registros_flag_trajeto_correto') }} - ) --- 5. Junção final -SELECT - "SPPO" modo, - r.timestamp_gps, - date(r.timestamp_gps) data, - extract(time from r.timestamp_gps) hora, - r.id_veiculo, - r.linha as servico, - r.latitude, - r.longitude, - CASE - WHEN - flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN true - ELSE false - END flag_em_operacao, - v.flag_em_movimento, - p.tipo_parada, - flag_linha_existe_sigmob, - flag_trajeto_correto, - flag_trajeto_correto_hist, - CASE - WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true - THEN 'Em operação' - WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false - THEN 'Operando fora trajeto' - WHEN flag_em_movimento is false - THEN - CASE - WHEN tipo_parada is not null - THEN concat("Parado ", tipo_parada) - ELSE - CASE - WHEN flag_trajeto_correto_hist is true - THEN 'Parado trajeto correto' - ELSE 'Parado fora trajeto' - END - END - END status, - r.velocidade velocidade_instantanea, - v.velocidade velocidade_estimada_10_min, - v.distancia, - "{{ var("version") }}" as versao -FROM - registros r - -JOIN - flags f -ON - r.id_veiculo = f.id_veiculo - AND r.timestamp_gps = f.timestamp_gps - AND r.linha = f.linha - -JOIN - velocidades v -ON - r.id_veiculo = v.id_veiculo - AND r.timestamp_gps = v.timestamp_gps - AND r.linha = v.linha - -JOIN - paradas p -ON - r.id_veiculo = p.id_veiculo - AND r.timestamp_gps = p.timestamp_gps - AND r.linha = p.linha -{% if is_incremental() -%} - WHERE - date(r.timestamp_gps) between DATE("{{var('date_range_start')}}") and DATE("{{var('date_range_end')}}") - AND r.timestamp_gps > "{{var('date_range_start')}}" and r.timestamp_gps <="{{var('date_range_end')}}" -{%- endif -%} diff --git a/queries/models/cadastro/diretorio_consorcios.sql b/queries/models/cadastro/diretorio_consorcios.sql deleted file mode 100644 index 49d2f991..00000000 --- a/queries/models/cadastro/diretorio_consorcios.sql +++ /dev/null @@ -1,38 +0,0 @@ -{{ - config( - materialized="table", - alias='consorcios' - ) -}} - -WITH stu AS ( - SELECT - perm_autor AS id_consorcio, - cnpj, - processo, - data_registro, - razao_social, - CASE - {% for id_stu, id_jae in var("ids_consorcios").items() %} - WHEN perm_autor = {{ id_stu }} THEN {{ id_jae }} - {% endfor %} - END AS cd_consorcio_jae - FROM - {{ ref("staging_operadora_empresa") }} AS stu -) -SELECT - COALESCE(s.id_consorcio, j.cd_consorcio) AS id_consorcio, - s.razao_social, - j.nm_consorcio AS consorcio, - s.processo AS id_processo, - s.data_registro AS data_processo, - s.cnpj, - s.id_consorcio AS id_consorcio_stu, - j.cd_consorcio AS id_consorcio_jae -FROM {{ ref("staging_consorcio") }} AS j -LEFT JOIN - stu AS s -ON - j.cd_consorcio = s.cd_consorcio_jae - - diff --git a/queries/models/cadastro/diretorio_operadoras.sql b/queries/models/cadastro/diretorio_operadoras.sql deleted file mode 100644 index 4d4a6c70..00000000 --- a/queries/models/cadastro/diretorio_operadoras.sql +++ /dev/null @@ -1,105 +0,0 @@ -{{ - config( - materialized="table", - alias='operadoras' - ) -}} - -WITH operadora_jae AS ( - SELECT - ot.cd_operadora_transporte, - ot.cd_cliente, - ot.ds_tipo_modal, - ot.in_situacao_atividade, - CASE - WHEN c.in_tipo_pessoa_fisica_juridica = 'F' THEN 'CPF' - WHEN c.in_tipo_pessoa_fisica_juridica = 'J' THEN 'CNPJ' - END AS tipo_documento, - c.nr_documento, - c.nm_cliente, - cb.cd_agencia, - cb.cd_tipo_conta, - cb.nm_banco, - cb.nr_banco, - cb.nr_conta - FROM - {{ ref("staging_operadora_transporte") }} AS ot - JOIN - {{ ref("staging_cliente") }} AS c - ON - ot.cd_cliente = c.cd_cliente - LEFT JOIN - {{ ref("staging_conta_bancaria") }} AS cb - ON - ot.cd_cliente = cb.cd_cliente -), -stu_pessoa_juridica AS ( - SELECT - perm_autor, - cnpj AS documento, - processo, - modo, - tipo_permissao, - data_registro, - razao_social AS nome_operadora, - "CNPJ" AS tipo_documento - FROM - {{ ref("staging_operadora_empresa") }} - WHERE perm_autor NOT IN ({{ var("ids_consorcios").keys()|join(", ") }}) -), -stu_pessoa_fisica AS ( - SELECT - perm_autor, - cpf AS documento, - processo, - modo, - tipo_permissao, - data_registro, - nome AS nome_operadora, - "CPF" AS tipo_documento - FROM - {{ ref("staging_operadora_pessoa_fisica") }} -), -stu AS ( - SELECT - *, - modo AS modo_join - FROM - stu_pessoa_juridica - - UNION ALL - - SELECT - *, - CASE - WHEN modo = 'Complementar (cabritinho)' THEN 'Van' - ELSE modo - END AS modo_join - FROM - stu_pessoa_fisica -) -SELECT - COALESCE(s.perm_autor, j.cd_operadora_transporte) AS id_operadora, - UPPER(REGEXP_REPLACE(NORMALIZE(COALESCE(s.nome_operadora, j.nm_cliente), NFD), r"\pM", '')) AS operadora, - s.tipo_permissao AS tipo_operadora, - s.modo AS tipo_modal_stu, - j.ds_tipo_modal AS tipo_modal_jae, - s.processo AS id_processo, - s.data_registro AS data_processo, - COALESCE(s.documento, j.nr_documento) AS documento, - COALESCE(s.tipo_documento, j.tipo_documento) AS tipo_documento, - s.perm_autor AS id_operadora_stu, - j.cd_operadora_transporte AS id_operadora_jae, - j.in_situacao_atividade AS situacao_operadora_jae, - j.cd_agencia AS agencia, - j.cd_tipo_conta AS tipo_conta, - j.nm_banco AS banco, - LPAD(j.nr_banco, 3, '0') AS codigo_banco, - j.nr_conta AS conta -FROM - stu AS s -FULL OUTER JOIN - operadora_jae AS j -ON - s.documento = j.nr_documento - AND s.modo_join = j.ds_tipo_modal \ No newline at end of file diff --git a/queries/models/cadastro/operadoras_contato.sql b/queries/models/cadastro/operadoras_contato.sql deleted file mode 100644 index 2476cef4..00000000 --- a/queries/models/cadastro/operadoras_contato.sql +++ /dev/null @@ -1,26 +0,0 @@ -{{ - config( - materialized="table", - ) -}} - - -SELECT - d.id_operadora, - cpj.nm_contato AS contato, - cpj.nr_ramal AS ramal, - COALESCE(cpj.nr_telefone, c.nr_telefone) AS telefone, - COALESCE(cpj.tx_email, c.tx_email) AS email -FROM - {{ ref("staging_cliente") }} AS c -LEFT JOIN - {{ ref("staging_contato_pessoa_juridica") }} cpj -ON - c.cd_cliente = cpj.cd_cliente -JOIN - {{ ref("staging_operadora_transporte") }} AS ot -ON - ot.cd_cliente = c.cd_cliente -JOIN - {{ ref("diretorio_operadoras") }} d -ON d.id_operadora_jae = ot.cd_operadora_transporte \ No newline at end of file diff --git a/queries/models/cadastro/schema.yml b/queries/models/cadastro/schema.yml deleted file mode 100644 index 9abafa05..00000000 --- a/queries/models/cadastro/schema.yml +++ /dev/null @@ -1,92 +0,0 @@ -version: 2 - -models: - - name: diretorio_operadoras - description: "Tabela de operadoras de transporte" - columns: - - name: id_operadora - description: "Identificador único do operador, podendo ser o código de permissionário ou código da Jaé" - - name: operadora - description: "Nome do operador" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: tipo_operadora - description: "Tipo de permissionário (Exemplos: autônomo, empresa, cooperativa)" - - name: tipo_modal_stu - description: "Tipo de transporte no STU (ônibus, van, BRT)" - - name: tipo_modal_jae - description: "Tipo de transporte na Jaé (ônibus, van, BRT)" - - name: id_processo - description: "Número do processo no STU" - - name: data_processo - description: "Data do processo no STU" - - name: documento - description: "Documento do operador (CPF ou CNPJ)" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: tipo_documento - description: "Tipo do documento do operador (CPF ou CNPJ)" - - name: id_operadora_stu - description: "Código de permissionário vindo do STU" - - name: id_operadora_jae - description: "Código do operador no sistema da Jaé" - - name: situacao_operadora_jae - description: "Indicador de atividade do operador no sistema da Jaé" - - name: agencia - description: "Número da agência bancária do operador" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: tipo_conta - description: "Tipo da conta bancária do operador" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: banco - description: "Nome do banco" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: codigo_banco - description: "Código do banco (COMPE)" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: conta - description: "Número da conta bancária do operador" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: operadoras_contato - description: "Tabela de contatos das operadoras de transporte" - columns: - - name: id_operadora - description: "Identificador único da tabela cadastro.operadoras" - - name: contato - description: "Nome do contato" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: ramal - description: "Ramal do telefone" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: telefone - description: "Número de telefone" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: email - description: "Endereço de E-Mail" - policy_tags: - - 'projects/rj-smtr/locations/us/taxonomies/388050497607535163/policyTags/3935188996031375059' - - name: diretorio_consorcios - description: "Tabela de contatos das operadoras de transporte" - columns: - - name: id_consorcio - description: "Identificador único do consórcio, podendo ser o código de permissionário ou código da Jaé" - - name: consorcio - description: "Nome do consórcio" - - name: id_processo - description: "Número do processo no STU" - - name: data_processo - description: "Data do processo no STU" - - name: cnpj - description: "CNPJ do consórcio" - - name: id_consorcio_stu - description: "Código de permissionário vindo do STU" - - name: id_consorcio_jae - description: "Código do consórcio no sistema da Jaé" \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/README.md b/queries/models/dashboard_subsidio_sppo/README.md deleted file mode 100644 index 8d6a4c50..00000000 --- a/queries/models/dashboard_subsidio_sppo/README.md +++ /dev/null @@ -1,87 +0,0 @@ -# Dashboard Subsídio SPPO -* Versão: 3.0.0 -* Data de início: 16/01/2023 - -![dashboard_subsidio_sppo](https://user-images.githubusercontent.com/66736583/227256098-6371bf20-d031-483d-8a20-f211ff552c25.png) - -
- -# Índice -1. [Resumo](#1-resumo) -2. [Etapas](#2-etapas) -3. [Glossário](#3-glossário) - -## 1. Resumo - -Este modelo tem por objetivo calcular o valor diário de subsídio para as empresas do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro (SPPO). - -A metodologia atual é composta por 2 etapas principais: - -1. **Percentual de operação diário (POD)**, que define se o subsídio será ou não pago (ou mesmo se o operador será penalizado); -2. **Quilometragem realizada por tipo de viagem**, que define o quanto será pago. -3. **Remuneração total da linha**, conforme 1 e 2. - -Os cálculos se aplicam individualmente para cada linha e cada dia de operação. - -## 2. Etapas - -### 2.1. Percentual diário de operação (POD) - -O percentual é definido como a razão entre a quilometragem realizada ($QR$) e a quilometragem planejada ($QP$) do serviço, sendo: - -$$ POD = 100 \times \frac{QR}{QP} $$ - -Esse número determina se o subsídio será pago (conforme decreto [DECRETO RIO N.o 51.889/2022](https://transportes.prefeitura.rio/wp-content/uploads/sites/31/2022/12/DECRETO_RIO_No_51889_DE_26_DE_DEZEMBRO_DE_2022.pdf)) ou se a linha será penalizada por má operação (conforme decreto [DECRETO RIO N.o 51.940/2023](https://transportes.prefeitura.rio/wp-content/uploads/sites/31/2023/01/Decreto-51940-de-16-de-janeiro-de-2023.pdf)). A tabela de classificação do POD segue abaixo: - -| Intervalo do POD | Classificação | Tipo de Penalidade | Valor (R$) | -|------------------|--------------------|-------------|------------| -| >= 80% | Operação subsidiada | - | A definir (tipo de viagem)* | -| < 80% | Operação não subsidiada | 0.00 | -| < 60% | Má operação - Penalidade Média | 563.28* | -| < 40% | Má operação - Penalidade Grave | 1126.55* | - -\* O valor do subsídio para cada dia e tipo de viagem é definido na tabela `valor_tipo_viagem`, assim como os valores de penalidade estão em `valor_tipo_penalidade`. Esses valores são definidos conforme a legislação vigente. - -### 2.2. Quilometragem realizada por tipo de viagem (QR) - -A quilometragem por tipo de viagem é a dada pela multiplicação da quantidade de viagens realizadas daquele tipo ($V_i$) pela extensão ($d$) do itinerário, sendo: - -$$ QR_i = V_i \times d $$ - -Essa quilometragem é registrada na tabela `sumario_servico_tipo_viagem_dia`. Os tipos de viagem considerados são definidos pelo estado do veículo que operou a viagem, podendo ser: - -- `Não licenciado`: viagem realizada por veículo não licenciado na SMTR* -- `Autuado por ar inoperante`: viagem realizada por veículo licenciado com ar condicionado e autuado por inoperância ou mau funcionamento do sistema de ar condicionado (código de autuação: 023.II) -- `Autuado por segurança`: viagem realizada por veículo autuado por infração relacionada à segurança do veículo -- `Autuado por limpeza/equipamento`: viagem realizada por veículo autuado cumulativamente por infrações relacionadas à limpeza e equipamentos do veículo -- `Sem ar e não autuado`: viagem realizada por veículo licenciado sem ar condicionado e que não foi autuado -- `Com ar e não autuado`: viagem realizada por veículo que foi licenciado com ar condicionado e não foi autuado - -\* Consta para fins de cálculo da QR e POD, mas é desconsiderado para remuneração. - -### 2.3. Remuneração total - -A remuneração total é calculada combinando o percentual de operação (POD) com a quilometragem realizada (QR) de cada linha. - -- Caso POD < 80%, a penalidade aplicada segue a tabela da seção 2.1; -- Caso POD >= 80%, o subsídio é dado pela soma da QR de cada tipo de viagem pelo seu valor, sendo: - - -| Tipo de Viagem ($i$) | Valor (R$/km) * | -|---------------------------------------|-----------------| -| `Não licenciado` | 0.00 | -| `Autuado por ar inoperante` | 0.00 | -| `Autuado por segurança` | 0.00 | -| `Autuado por limpeza/equipamento` | 0.00 | -| `Sem ar e não autuado` | 1.97 | -| `Com ar e não autuado` | 2.81 | - - -\* Os valores atuais refletem a [RESOLUÇÃO RIO N.o 3.591/2023](https://transportes.prefeitura.rio/wp-content/uploads/sites/31/2023/02/RESOLUCAO-SMTR-No-3591-DE-01-DE-FEVEREIRO-DE-2023.pdf), conforme legislação vigente. - -## 3. Glossário - -- **Empresa**: Empresa responsável pela operação dos itinerários das linhas. As emmpresas são organizadas em 4 consórcios (Transcarioca, Santa Cruz, Internorte e Intersul), que operam linhas com exclusividade (uma empresa pode operar uma mesma linha que outra, mas apenas um único consórcio). -- **Linha**: Conjunto de serviços, usualmente descrito por números, ex: 123, 720. -- **Serviço**: Conjunto de itinerários, descritos pela linha e identificador do serviço, ex: 457, SV606. As linhas podem ter serviços normais e específicos (como 'Variante', 'Parcial', etc). -- **Itinerário**: Trajetos executados por veículos que param em pontos específicos, determinados por um serviço (ex: 457) e sentido (ex: 457 - Copacabana x 457 - Abolição). diff --git a/queries/models/dashboard_subsidio_sppo/schema.yml b/queries/models/dashboard_subsidio_sppo/schema.yml deleted file mode 100644 index 8456e669..00000000 --- a/queries/models/dashboard_subsidio_sppo/schema.yml +++ /dev/null @@ -1,334 +0,0 @@ -version: 2 - -models: - - name: sumario_servico_dia - description: "Sumário do subsídio dos serviços de ônibus (SPPO) por dia" - columns: - - name: data - description: "Data de emissão do sinal de GPS" - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo" - - name: consorcio - description: "Consórcio que opera o serviço" - - name: servico - description: "Serviço realizado pelo veículo" - - name: viagens - description: "Quantidade de viagens apuradas" - - name: km_apurada - description: "Distância apurada do serviço (km)\n - Distância planejada da viagem multiplicada pela quantidade de viagens" - - name: km_planejada - description: "Distância planejada para o serviço (km)" - - name: perc_km_planejada - description: "Indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: valor_subsidio_pago - description: "Valor de subsídio apurado (R$)\n - Distância apurada do serviço multiplicada pelos respectivos valores pela classificação do veículo" - - name: valor_penalidade - description: "Valor de penalidade apurado (R$)\n - Linha com operação entre 40% e 60% da quilometragem estipulada - penalidade equivalente a uma infração média prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO.\n - Linha com operação inferior a 40% da quilometragem estipulada - penalidade equivalente a uma infração grave prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO." - - name: sumario_servico_dia_historico - description: "Sumário histórico do subsídio dos serviços de ônibus (SPPO) por dia" - columns: - - name: data - description: "Data de emissão do sinal de GPS" - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo" - - name: consorcio - description: "Consórcio que opera o serviço" - - name: servico - description: "Serviço realizado pelo veículo" - - name: vista - description: "Itinerário da linha (ex: Bananal ↔ Saens Peña)" - - name: viagens - description: "Quantidade de viagens apuradas" - - name: km_apurada - description: "Distância apurada do serviço (km)\n - Distância planejada da viagem multiplicada pela quantidade de viagens" - - name: km_planejada - description: "Distância planejada para o serviço (km)" - - name: perc_km_planejada - description: "Indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: valor_subsidio_pago - description: "Valor de subsídio apurado (R$)\n - Distância apurada do serviço multiplicada pelos respectivos valores pela classificação do veículo" - - name: valor_penalidade - description: "Valor de penalidade apurado (R$)\n - Linha com operação entre 40% e 60% da quilometragem estipulada - penalidade equivalente a uma infração média prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO.\n - Linha com operação inferior a 40% da quilometragem estipulada - penalidade equivalente a uma infração grave prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO." - - name: sumario_servico_tipo_viagem_dia - description: "Sumário do subsídio dos serviços de ônibus (SPPO) por dia e tipo de viagem" - columns: - - name: data - description: "Data de emissão do sinal de GPS" - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo" - - name: consorcio - description: "Consórcio que opera o serviço" - - name: servico - description: "Serviço realizado pelo veículo" - - name: tipo_viagem - description: "Tipo de viagem" - - name: viagens - description: "Quantidade de viagens apuradas" - - name: km_apurada - description: "Distância apurada do serviço (km)\n - Distância planejada da viagem multiplicada pela quantidade de viagens" - - name: sumario_dia - description: "sumario_dia" - columns: - - name: consorcio - description: "Consórcio que opera o serviço" - - name: data - description: "Data de emissão do sinal de GPS" - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo" - - name: servico - description: "Serviço realizado pelo veículo" - - name: viagens_planejadas - description: "Quantidade de viagens planejadas" - - name: viagens_subsidio - description: "Quantidade de viagens apuradas" - - name: distancia_total_planejada - description: "Distância planejada para o serviço (km)" - - name: distancia_total_subsidio - description: "Distância apurada do serviço (km)\n - Distância planejada da viagem multiplicada pela quantidade de viagens" - - name: valor_subsidio_por_km - description: "Valor de subsídio (R$/km)" - - name: valor_total_aferido - description: "Valor de subsídio aferido (R$)\n - Distância apurada do serviço multiplicada pelo valor de subsídio (R$/km)" - - name: perc_distancia_total_subsidio - description: "Indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: valor_total_subsidio - description: "Valor de subsídio apurado (R$), observado o indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: sumario_servico_dia_tipo - description: "Sumário do subsídio dos serviços de ônibus (SPPO) por dia e tipo de viagem" - columns: - - name: data - description: "Data de emissão do sinal de GPS." - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo." - - name: consorcio - description: "Consórcio que opera o serviço." - - name: servico - description: "Serviço realizado pelo veículo." - - name: viagens - description: "Quantidade de viagens apuradas." - - name: km_apurada - description: "Distância apurada do serviço (km) - Distância planejada da viagem multiplicada pela quantidade de viagens." - - name: km_planejada - description: "Distância planejada para o serviço (km)." - - name: perc_km_planejada - description: "Indicador percentual de quilometragem apurada em relação à planejada da linha." - - name: valor_subsidio_pago - description: "Valor de subsídio apurado (R$) - Distância apurada do serviço multiplicada pelos respectivos valores pela classificação do veículo." - - name: valor_penalidade - description: "Valor de penalidade apurado (R$) - Linha com operação entre 40% e 60% da quilometragem estipulada - penalidade equivalente a uma infração média prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO. - Linha com operação inferior a 40% da quilometragem estipulada - penalidade equivalente a uma infração grave prevista no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro - SPPO." - - name: viagens_n_licenciado - description: "Quantidade de viagens apuradas realizadas por veículo não licenciado." - - name: km_apurada_n_licenciado - description: "Distância apurada de viagens realizadas por veículo não licenciado (km)." - - - - - name: viagens_autuado_ar_inoperante - description: "Quantidade de viagens apuradas realizadas por veículo licenciado com ar condicionado e autuado em razão de inoperância ou mau funcionamento deste." - - name: km_apurada_autuado_ar_inoperante - description: "Distância apurada de viagens realizadas por veículo licenciado com ar condicionado e autuado em razão de inoperância ou mau funcionamento deste (km)." - - name: viagens_autuado_seguranca - description: "Quantidade de viagens apuradas realizadas por veículo licenciado e autuado em razão de segurança." - - name: km_apurada_autuado_seguranca - description: "Distância apurada de viagens realizadas por veículo licenciado e autuado em razão de segurança (km)." - - name: viagens_autuado_limpezaequipamento - description: "Quantidade de viagens apuradas realizadas por veículo licenciado e autuado em razão de limpeza e equipamento." - - name: km_apurada_autuado_limpezaequipamento - description: "Distância apurada de viagens realizadas por veículo licenciado e autuado em razão de limpeza e equipamento (km)." - - name: viagens_licenciado_sem_ar_n_autuado - description: "Quantidade de viagens apuradas realizadas por veículo licenciado sem ar condicionado." - - name: km_apurada_licenciado_sem_ar_n_autuado - description: "Distância apurada de viagens realizadas por veículo licenciado sem ar condicionado (km)." - - name: viagens_licenciado_com_ar_n_autuado - description: "Quantidade de viagens apuradas realizadas por veículo licenciado com ar condicionado e não autuado em razão de inoperância ou mau funcionamento deste." - - name: km_apurada_licenciado_com_ar_n_autuado - description: "Distância apurada de viagens realizadas por veículo licenciado com ar condicionado e não autuado em razão de inoperância ou mau funcionamento deste (km)." - - name: valor_tipo_penalidade - description: "Valores de penalidades de subsídio" - columns: - - name: perc_km_inferior - description: "Extremidade inferior de intervalo do indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: perc_km_superior - description: "Extremidade superior de intervalo do indicador percentual de quilometragem apurada em relação à planejada da linha" - - name: tipo_penalidade - description: "Classificação da penalidade equivalente no Código Disciplinar do Serviço Público de Transporte de Passageiros por Meio de Ônibus - do Município do Rio de Janeiro (SPPO) imposta - Categorias:\n - - Média\n - - Grave" - - name: valor - description: "Valor da penalidade imposta (R$)" - - name: data_inicio - description: "Data inicial do período de vigência dos demais atributos" - - name: data_fim - description: "Data final do período de vigência dos demais atributos" - - name: subsidio_parametros - description: "Parâmetros de remuneração do subsídio dos serviços de ônibus (SPPO) por tipo de viagem" - columns: - - name: indicador_licenciado - description: "Indicador se o veículo encontra-se licenciado" - - name: indicador_ar_condicionado - description: "Indicador se o veículo foi licenciado com ar condicionado" - - name: indicador_autuacao_ar_condicionado - description: "Indicador se o veículo foi autuado por inoperância ou mau funcionamento do sistema de ar condicionado" - - name: indicador_autuacao_seguranca - description: "Indicador se o veículo foi autuado por infração relacionada à segurança do veículo" - - name: indicador_autuacao_limpeza - description: "Indicador se o veículo foi autuado por infração relacionada à limpeza do veículo" - - name: indicador_autuacao_equipamento - description: "Indicador se o veículo foi autuado por infração relacionada à inoperância ou mau funcionamento de equipamentos do veículo" - - name: indicador_sensor_temperatura - description: "Indicador se o sensor de temperatura do veículo não estava em funcionamento conforme especificação da SMTR" - - name: indicador_validador_sbd - description: "Indicador se o veículo se encontra com o novo validador do Sistema de Bilhetagem Digital (SBD) instalado" - - name: status - description: "Classificação, observados os demais parâmetros - Categorias:\n - - Não licenciado\n - - Autuado por ar inoperante\n - - Autuado por segurança\n - - Autuado por limpeza/equipamento\n - - Sem ar e não autuado\n - - Com ar e não autuado" - - name: subsidio_km - description: "Valor de subsídio de remuneração (R$/km)" - - name: irk - description: "Índice de Remuneração por km (R$/km)" - - name: data_inicio - description: "Data inicial do período de vigência dos demais atributos" - - name: data_fim - description: "Data final do período de vigência dos demais atributos" - - name: legislacao - description: "Legislação que estabelece o valor e regras de remuneração" - - name: ordem - description: "Ordem de prioridade de aplicação dos valores de remuneração" - - name: viagens_realizadas - description: "Detalhes de todas as viagens completas identificadas." - columns: - - name: consorcio - description: "Consórcio que opera o serviço" - - name: data - description: "Data de emissão do sinal de GPS" - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da - distância planejada - categorias: Dia Útil, Sabado, Domingo" - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - - name: servico_realizado - description: "Serviço realizado pelo veículo (com base na identificação do trajeto)" - - name: vista - description: "Itinerário da linha (ex: Bananal ↔ Saens Peña)" - - name: trip_id - description: "Código identificador do itinerário (trip)" - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço" - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - - name: id_viagem - description: "Código identificador da viagem - (id_veiculo + servico_realizado + sentido + shape_id_planejado + datetime_partida)" - - name: datetime_partida - description: "Horário de início da viagem" - - name: datetime_chegada - description: "Horário de fim da viagem" - - name: tipo_viagem - description: "Tipo de viagem - categorias:\n - - Completa linha correta\n - - Completa linha incorreta" - - name: inicio_periodo - description: "Início do período de operação planejado" - - name: fim_periodo - description: "Fim do período de operação planejado" - - name: viagens_planejadas - description: "Viagens planejadas no período" - - name: tempo_planejado - description: "Tempo planejado da viagem (minutos)" - - name: tempo_viagem - description: "Tempo aferido da viagem (minutos)" - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado (km)" - - name: distancia_aferida - description: "Distância aferida da viagem (distância euclidiana entre posições consecutivas do sinal de GPS)" - - name: n_registros_start - description: "Contagem de sinais de GPS emitidos no meio do trajeto." - - name: n_registros_shape - description: "Contagem de sinais de GPS emitidos dentro do trajeto." - - name: n_registros_total - description: "Contagem de sinais de GPS emitidos no tempo da viagem." - - name: n_registros_minuto - description: "Contagem de minutos do trajeto com pelo menos 1 sinal de GPS emitido." - - name: perc_conformidade_shape - description: "Percentual de sinais emitidos dentro do shape (trajeto) ao longo da viagem" - - name: perc_conformidade_distancia - description: "Razão da distância aferida pela distância teórica x 100" - - name: perc_conformidade_registros - description: "Percentual de minutos da viagem com registro de sinal de GPS" - - name: perc_conformidade_tempo - description: "Razão do tempo aferido da viagem pelo planejado x 100" - - name: versao_modelo - description: "Versão da metodologia de cálculo da respectiva linha na tabela." - - name: sumario_servico_dia_tipo_sem_glosa - description: "Tabela temporária sem as glosas e com os detalhes de viagens subsidiadas por serviço-dia." - columns: - - name: consorcio - description: "Consórcio que opera o serviço." - - name: data - description: "Data de emissão do sinal de GPS." - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da distância planejada - categorias: Dia Útil, Sabado, Domingo." - - name: servico - description: "Serviço realizado pelo veículo." - - name: viagens_subsidio - description: "Quantidade de viagens apuradas." - - name: distancia_total_planejada - description: "Distância planejada para o serviço (km)." - - name: distancia_total_subsidio - description: "Distância apurada para o serviço (km)." - - name: valor_total_aferido - description: "." - - name: perc_distancia_total_subsidio - description: "Indicador percentual de quilometragem apurada em relação à planejada da linha." - - name: valor_total_subsidio - description: "Valor da distância apurada multiplicada pelo subsídio por quilômetro (sem glosa). É zerado quando POD < 80%." - - name: viagens_n_licenciado - description: "Quantidade de viagens de veículos não licenciados." - - name: km_apurada_n_licenciado - description: "Quilometragem apurada de viagens de veículos não licenciados." - - name: viagens_autuado_ar_inoperante - description: "Quantidade de viagens de veículos autuados por ar inoperante." - - name: km_apurada_autuado_ar_inoperante - description: "Quilometragem apurada de viagens de veículos autuados por ar inoperante." - - name: viagens_autuado_seguranca - description: "Quantidade de viagens de veículos autuados por segurança." - - name: km_apurada_autuado_seguranca - description: "Quilometragem apurada de viagens de veículos autuados por segurança." - - name: viagens_autuado_limpezaequipamento - description: "Quantidade de viagens de veículos autuados por limpeza ou equipamento." - - name: km_apurada_autuado_limpezaequipamento - description: "Quilometragem apurada de viagens de veículos autuados por limpeza ou equipamento." - - name: viagens_licenciado_sem_ar_n_autuado - description: "Quantidade de viagens de veículos sem ar e não autuados." - - name: km_apurada_licenciado_sem_ar_n_autuado - description: "Quilometragem apurada de viagens de veículos sem ar e não autuados." - - name: viagens_licenciado_com_ar_n_autuado - description: "Quantidade de viagens de veículos com ar e não autuados." - - name: km_apurada_licenciado_com_ar_n_autuado - description: "Quilometragem apurada de viagens de veículos com ar e não autuados." diff --git a/queries/models/dashboard_subsidio_sppo/subsidio_parametros.sql b/queries/models/dashboard_subsidio_sppo/subsidio_parametros.sql deleted file mode 100644 index d846e714..00000000 --- a/queries/models/dashboard_subsidio_sppo/subsidio_parametros.sql +++ /dev/null @@ -1,24 +0,0 @@ -{{ - config( - materialized="table", - ) -}} - -SELECT - COALESCE(SAFE_CAST(indicador_licenciado AS BOOL), FALSE) indicador_licenciado, - COALESCE(SAFE_CAST(indicador_ar_condicionado AS BOOL), FALSE) indicador_ar_condicionado, - COALESCE(SAFE_CAST(indicador_autuacao_ar_condicionado AS BOOL), FALSE) indicador_autuacao_ar_condicionado, - COALESCE(SAFE_CAST(indicador_autuacao_seguranca AS BOOL), FALSE) indicador_autuacao_seguranca, - COALESCE(SAFE_CAST(indicador_autuacao_limpeza AS BOOL), FALSE) indicador_autuacao_limpeza, - COALESCE(SAFE_CAST(indicador_autuacao_equipamento AS BOOL), FALSE) indicador_autuacao_equipamento, - COALESCE(SAFE_CAST(indicador_sensor_temperatura AS BOOL), FALSE) indicador_sensor_temperatura, - COALESCE(SAFE_CAST(indicador_validador_sbd AS BOOL), FALSE) indicador_validador_sbd, - SAFE_CAST(status AS STRING) status, - SAFE_CAST(subsidio_km AS FLOAT64) subsidio_km, - SAFE_CAST(irk AS FLOAT64) irk, - SAFE_CAST(data_inicio AS DATE) data_inicio, - SAFE_CAST(data_fim AS DATE) data_fim, - SAFE_CAST(legislacao AS STRING) legislacao, - SAFE_CAST(ordem AS INT64) ordem -FROM - {{ var("subsidio_parametros") }} \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/sumario_dia.sql b/queries/models/dashboard_subsidio_sppo/sumario_dia.sql deleted file mode 100644 index c248136e..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_dia.sql +++ /dev/null @@ -1,116 +0,0 @@ -WITH - planejado AS ( - SELECT - consorcio, - data, - tipo_dia, - trip_id_planejado AS trip_id, - servico, - sentido, - CASE - WHEN sentido = "C" THEN MAX(distancia_planejada) - ELSE - SUM(distancia_planejada) - END - AS distancia_planejada, - MAX(distancia_total_planejada) AS distancia_total_planejada, - NULL AS viagens_planejadas - FROM - {{ ref("viagem_planejada") }} --``rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` - WHERE - data >= "2022-06-01" - AND data < DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND distancia_total_planejada > 0 - GROUP BY - 1, - 2, - 3, - 4, - 5, - 6), - viagem AS ( - SELECT - data, - trip_id, - COUNT(id_viagem) AS viagens_realizadas - FROM - {{ ref("viagem_completa") }} -- `rj-smtr`.`projeto_subsidio_sppo`.`viagem_completa` - WHERE - data >= "2022-06-01" - AND data < DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - GROUP BY - 1, - 2), - sumario AS ( - SELECT - consorcio, - data, - tipo_dia, - servico, - distancia_planejada, - NULL AS viagens_planejadas, - IFNULL(SUM(v.viagens_realizadas), 0) AS viagens_subsidio, - distancia_total_planejada, - (IFNULL(SUM(v.viagens_realizadas), 0) * distancia_planejada) AS distancia_total_subsidio - FROM - planejado AS p - LEFT JOIN - viagem AS v - USING - (trip_id, - data) - GROUP BY - 1, - 2, - 3, - 4, - 5, - 8 ), - sumario_agg AS ( - SELECT - consorcio, - data, - tipo_dia, - servico, - NULL AS viagens_planejadas, - IFNULL(SUM(viagens_subsidio), 0) AS viagens_subsidio, - distancia_total_planejada, - ROUND(SUM(distancia_total_subsidio), 3) AS distancia_total_subsidio - FROM - sumario - GROUP BY - 1, - 2, - 3, - 4, - 5, - 7 ), - valor AS ( - SELECT - s.*, - v.valor_subsidio_por_km, - ROUND(distancia_total_subsidio * v.valor_subsidio_por_km, 2) AS valor_total_aferido, - IF - (distancia_total_planejada = 0, NULL, ROUND(100*distancia_total_subsidio/distancia_total_planejada, 2)) AS perc_distancia_total_subsidio - FROM - sumario_agg s - LEFT JOIN ( - SELECT - * - FROM - {{ ref("subsidio_data_versao_efetiva") }} -- `rj-smtr`.`projeto_subsidio_sppo`.`subsidio_data_versao_efetiva` - WHERE - data >= "2022-06-01" - AND data < DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" )) AS v - ON - v.data = s.data ) -SELECT - *, - CASE - WHEN (perc_distancia_total_subsidio < 80) OR (perc_distancia_total_subsidio IS NULL) THEN 0 - ELSE - valor_total_aferido -END - AS valor_total_subsidio -FROM - valor \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia.sql deleted file mode 100644 index fe9ae305..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia.sql +++ /dev/null @@ -1,105 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "servico"], - incremental_strategy="insert_overwrite", - ) -}} - - -WITH --- 1. Viagens planejadas (agrupadas por data e serviço) - planejado AS ( - SELECT - DISTINCT DATA, - tipo_dia, - consorcio, - servico, - distancia_total_planejada AS km_planejada, - FROM - {{ ref("viagem_planejada") }} - WHERE - DATA BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) - AND ( distancia_total_planejada > 0 - OR distancia_total_planejada IS NULL ) - ), --- 2. Viagens realizadas - viagem AS ( - SELECT - DATA, - servico_realizado AS servico, - id_veiculo, - id_viagem, - distancia_planejada - FROM - {{ ref("viagem_completa") }} - WHERE - DATA BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) ), --- 3. Apuração de km realizado e Percentual de Operação Diário (POD) - servico_km_apuracao AS ( - SELECT - p.data, - p.tipo_dia, - p.consorcio, - p.servico, - p.km_planejada AS km_planejada, - COALESCE(COUNT(v.id_viagem), 0) AS viagens, - COALESCE(SUM(v.distancia_planejada), 0) AS km_apurada, - COALESCE(ROUND(100 * SUM(v.distancia_planejada) / p.km_planejada,2), 0) AS perc_km_planejada - FROM - planejado AS p - LEFT JOIN - viagem AS v - USING - (DATA, - servico) - GROUP BY - 1, - 2, - 3, - 4, - 5 ), --- 4. Apuração de valor de subsídio por data e serviço - viagens_remuneradas AS ( - SELECT - DATA, - servico, - distancia_planejada, - subsidio_km - FROM - {{ ref("viagens_remuneradas") }} - WHERE - DATA BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) - AND indicador_viagem_remunerada IS TRUE), - servico_subsidio_apuracao AS ( - SELECT - DATA, - servico, - SUM(distancia_planejada*subsidio_km) AS valor_subsidio_apurado - FROM - viagens_remuneradas - GROUP BY - 1, - 2) -SELECT - s.*, - IF(p.valor IS NULL, st.valor_subsidio_apurado, 0) AS valor_subsidio_pago, - IFNULL(-p.valor, 0) AS valor_penalidade -FROM - servico_km_apuracao AS s -LEFT JOIN - {{ ref("valor_tipo_penalidade") }} AS p -ON - s.data BETWEEN p.data_inicio - AND p.data_fim - AND s.perc_km_planejada >= p.perc_km_inferior - AND s.perc_km_planejada < p.perc_km_superior -LEFT JOIN - servico_subsidio_apuracao AS st -USING - (DATA, - servico) diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql deleted file mode 100644 index 19c7b97a..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql +++ /dev/null @@ -1,103 +0,0 @@ -WITH - viagem_planejada AS ( - SELECT - DISTINCT `data`, - servico, - vista - FROM - {{ ref("viagem_planejada") }} - --`rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` - ), - -- v1: Valor do subsídio pré glosa por tipos de viagem (Antes de 2023-01-16) - sumario_sem_glosa AS ( - SELECT - `data`, - tipo_dia, - consorcio, - servico, - vista, - viagens_subsidio AS viagens, - distancia_total_subsidio AS km_apurada, - distancia_total_planejada AS km_planejada, - perc_distancia_total_subsidio AS perc_km_planejada, - valor_total_subsidio AS valor_subsidio_pago, - NULL AS valor_penalidade - FROM - {{ ref("sumario_dia") }} - -- `rj-smtr`.`dashboard_subsidio_sppo`.`sumario_dia` - LEFT JOIN - viagem_planejada - USING - ( `data`, - servico ) ), - -- v2: Valor do subsídio pós glosa por tipos de viagem (2023-01-16 a 2023-07-15 e após de 2023-09-01) - sumario_com_glosa AS ( - SELECT - `data`, - tipo_dia, - consorcio, - servico, - vista, - viagens, - km_apurada, - km_planejada, - perc_km_planejada, - valor_subsidio_pago, - valor_penalidade - FROM - {{ ref("sumario_servico_dia") }} - -- `rj-smtr`.`dashboard_subsidio_sppo`.`sumario_servico_dia` - LEFT JOIN - viagem_planejada - USING - ( `data`, - servico )), - -- Valor do subsídio sem glosas - Suspenso por Decisão Judicial (Entre 2023-07-16 e 2023-08-31) (R$ 2.81/km em 2023) - subsidio_total_glosa_suspensa AS ( - SELECT - DATA, - servico, - CASE - WHEN perc_km_planejada >= 80 THEN ROUND((COALESCE(km_apurada_autuado_ar_inoperante, 0) + COALESCE(km_apurada_autuado_seguranca, 0) + COALESCE(km_apurada_autuado_limpezaequipamento, 0) + COALESCE(km_apurada_licenciado_sem_ar_n_autuado, 0) + COALESCE(km_apurada_licenciado_com_ar_n_autuado, 0)) * 2.81, 2) - ELSE - 0 - END - AS valor_subsidio_pago, - 0 AS valor_penalidade - FROM - {{ ref("sumario_servico_dia_tipo") }} - --`rj-smtr`.`dashboard_subsidio_sppo`.`sumario_servico_dia_tipo` - WHERE - DATA BETWEEN "2023-07-16" - AND "2023-08-31"), - -- v3: Sumário subsídio sem glosas - Suspenso por Decisão Judicial (Entre 2023-07-16 e 2023-08-31) - sumario_glosa_suspensa AS ( - SELECT - s.* EXCEPT (valor_subsidio_pago, - valor_penalidade), - g.valor_subsidio_pago, - g.valor_penalidade - FROM - subsidio_total_glosa_suspensa AS g - LEFT JOIN - sumario_com_glosa AS s - USING - ( `data`, - servico )) -SELECT - * -FROM - sumario_sem_glosa -UNION ALL ( - SELECT - * - FROM - sumario_com_glosa - WHERE - `data` < "2023-07-16" - OR `data` > "2023-08-31" ) -UNION ALL ( - SELECT - * - FROM - sumario_glosa_suspensa ) \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql deleted file mode 100644 index b67ccb82..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql +++ /dev/null @@ -1,218 +0,0 @@ -{% set status_list_query %} -WITH - subsidio_parametros AS ( - SELECT - * - FROM - {{ ref("subsidio_parametros") }} - WHERE - status != "Não classificado" - ORDER BY - data_inicio DESC, - ordem), - tabela_status_array AS ( - SELECT - TO_JSON_STRING(STRUCT(indicador_licenciado, - indicador_ar_condicionado, - indicador_autuacao_ar_condicionado, - indicador_autuacao_seguranca, - indicador_autuacao_limpeza, - indicador_autuacao_equipamento, - indicador_sensor_temperatura, - indicador_validador_sbd )) AS indicadores, - ARRAY_AGG(status) AS status_array - FROM - subsidio_parametros - GROUP BY - indicadores), - status_principal AS ( -SELECT - status_array[OFFSET(0)] AS status, - LOWER( - REGEXP_REPLACE( - TRANSLATE( - status_array[OFFSET(0)], - 'áàâãäéèêëíìîïóòôõöúùûüçÁÀÂÃÄÉÈÊËÍÌÎÏÓÒÔÕÖÚÙÛÜÇ', - 'aaaaaeeeeiiiiooooouuuucAAAAAEEEEIIIIOOOOOUUUUC' - ), - r'[^\w\s]', -- Remove caracteres não alfanuméricos e não espaços - '' - ) - ) AS status_tratado -FROM - tabela_status_array) -SELECT DISTINCT - status, - REGEXP_REPLACE( - REGEXP_REPLACE( - REGEXP_REPLACE(status_tratado, r'\b(e|por)\b', ''), -- Remove "e" e "por" - r'\bnao\b', 'n' -- Substitui "não" por "n" - ), - r'[_\s]+', '_' -- Substitui múltiplos espaços ou underscores por um único "_" - ) AS status_tratado -FROM - status_principal -{% endset %} - -WITH - planejado AS ( - SELECT - DISTINCT DATA, - tipo_dia, - consorcio, - servico, - distancia_total_planejada AS km_planejada - FROM - {{ ref("viagem_planejada") }} - WHERE - DATA BETWEEN DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND DATE( "{{ var("end_date") }}" ) - AND (distancia_total_planejada > 0 - OR distancia_total_planejada IS NOT NULL) ), - veiculos AS ( - SELECT - DATA, - id_veiculo, - status - FROM - {{ ref("sppo_veiculo_dia") }} - WHERE - DATA BETWEEN DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND DATE( "{{ var("end_date") }}" )), - viagem AS ( - SELECT - DATA, - servico_realizado AS servico, - id_veiculo, - id_viagem, - distancia_planejada - FROM - {{ ref("viagem_completa") }} - WHERE - DATA BETWEEN DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND DATE( "{{ var("end_date") }}" )), - servico_km_tipo AS ( - SELECT - v.DATA, - v.servico, - ve.status AS tipo_viagem, - COUNT(id_viagem) AS viagens, - ROUND(SUM(distancia_planejada), 2) AS km_apurada - FROM - viagem v - LEFT JOIN - veiculos ve - ON - ve.data = v.data - AND ve.id_veiculo = v.id_veiculo - GROUP BY - 1, - 2, - 3 ), - subsidio_parametros AS ( - SELECT - * - FROM - {{ ref("subsidio_parametros") }} - WHERE - status != "Não classificado" - ORDER BY - data_inicio DESC, - ordem), - tabela_status_array AS ( - SELECT - TO_JSON_STRING(STRUCT(indicador_licenciado, - indicador_ar_condicionado, - indicador_autuacao_ar_condicionado, - indicador_autuacao_seguranca, - indicador_autuacao_limpeza, - indicador_autuacao_equipamento, - indicador_sensor_temperatura, - indicador_validador_sbd )) AS indicadores, - ARRAY_AGG(status) AS status_array - FROM - subsidio_parametros - GROUP BY - indicadores), - status_update AS ( - SELECT - indicadores, - status_array, - status_array[OFFSET(0)] AS status - FROM - tabela_status_array), - status_flat AS ( - SELECT DISTINCT - status_t, - status - FROM - status_update, - UNNEST(status_array) AS status_t), - servico_km_tipo_atualizado AS ( - SELECT - k.* EXCEPT(tipo_viagem), - u.status AS tipo_viagem - FROM - servico_km_tipo AS k - LEFT JOIN - status_flat AS u - ON - u.status_t = k.tipo_viagem), - servico_km AS ( - SELECT - p.data, - p.tipo_dia, - p.consorcio, - p.servico, - v.tipo_viagem, - IFNULL(v.viagens, 0) AS viagens, - IFNULL(v.km_apurada, 0) AS km_apurada, - FROM - planejado p - LEFT JOIN - servico_km_tipo_atualizado v - ON - p.data = v.data - AND p.servico = v.servico ), - pivot_data AS ( - SELECT - * - FROM ( - SELECT - data, - tipo_dia, - consorcio, - servico, - tipo_viagem, - viagens, - km_apurada, - FROM - servico_km ) PIVOT(SUM(viagens) AS viagens, - SUM(km_apurada) AS km_apurada FOR tipo_viagem IN ( - {% if execute %} - {% set status_q = run_query(status_list_query) %} - {% set status_list = status_q.columns[0].values() %} - {% set status_treated_list = status_q.columns[1].values() %} - {% for index in range(status_list|length) %} - {% set status = status_list[index] %} - {% set status_treated = status_treated_list[index] %} - "{{ status }}" AS {{ status_treated }}{% if not loop.last %},{% endif %} - {% endfor %} - {% endif %} - ))) -SELECT - sd.*, - pd.* EXCEPT(data, - tipo_dia, - servico, - consorcio) -FROM - {{ ref("sumario_servico_dia") }} AS sd -LEFT JOIN - pivot_data AS pd -ON - sd.data = pd.data - AND sd.servico = pd.servico -ORDER BY - DATA, - servico \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo_sem_glosa.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo_sem_glosa.sql deleted file mode 100644 index 26071bf2..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo_sem_glosa.sql +++ /dev/null @@ -1,47 +0,0 @@ --- TABELA TEMPORÁRIA até decisão judicial final --- Valores válidos entre 16-01-2023 e 31-12-2023 (subsidio_km = 2.81) - --- TODO: Consertar parametrizacao para demais datas (separar parametros em subsidio x desconto) -WITH -parametros AS ( - SELECT - MAX(IF(status = 'Licenciado sem ar e não autuado', subsidio_km, NULL)) AS subsidio_km_sem_ar_n_autuado, - MAX(IF(status = 'Licenciado com ar e não autuado', subsidio_km, NULL)) AS subsidio_km_sem_glosa - FROM - {{ ref("subsidio_parametros") }} - WHERE - data_inicio >= '2023-07-04' -) -SELECT - consorcio, - data, - tipo_dia, - servico, - viagens AS viagens_subsidio, - km_planejada AS distancia_total_planejada, - km_apurada AS distancia_total_subsidio, - null AS valor_total_aferido, -- TODO: Excluir essa coluna? é utilizada? - perc_km_planejada AS perc_distancia_total_subsidio, - -- Valor total sem glosas: quando existe subsidio (POD>80%), adiciona o valor glosado por tipo de viagem ao total - CASE - WHEN perc_km_planejada >= 80 THEN ROUND(COALESCE(valor_subsidio_pago, 0) + COALESCE(km_apurada_autuado_ar_inoperante * subsidio_km_sem_glosa, 0) + COALESCE(km_apurada_autuado_seguranca * subsidio_km_sem_glosa, 0) + COALESCE(km_apurada_autuado_limpezaequipamento * subsidio_km_sem_glosa, 0) + COALESCE(km_apurada_licenciado_sem_ar_n_autuado * (subsidio_km_sem_glosa - subsidio_km_sem_ar_n_autuado), 0), 2) - ELSE - 0 -END - AS valor_total_subsidio, - COALESCE(viagens_n_licenciado, 0) AS viagens_n_licenciado, - COALESCE(km_apurada_n_licenciado, 0) AS km_apurada_n_licenciado, - COALESCE(viagens_autuado_ar_inoperante, 0) AS viagens_autuado_ar_inoperante, - COALESCE(km_apurada_autuado_ar_inoperante, 0) AS km_apurada_autuado_ar_inoperante, - COALESCE(viagens_autuado_seguranca, 0) AS viagens_autuado_seguranca, - COALESCE(km_apurada_autuado_seguranca, 0) AS km_apurada_autuado_seguranca, - COALESCE(viagens_autuado_limpezaequipamento, 0) AS viagens_autuado_limpezaequipamento, - COALESCE(km_apurada_autuado_limpezaequipamento, 0) AS km_apurada_autuado_limpezaequipamento, - COALESCE(viagens_licenciado_sem_ar_n_autuado, 0) AS viagens_licenciado_sem_ar_n_autuado, - COALESCE(km_apurada_licenciado_sem_ar_n_autuado, 0) AS km_apurada_licenciado_sem_ar_n_autuado, - COALESCE(viagens_licenciado_com_ar_n_autuado, 0) AS viagens_licenciado_com_ar_n_autuado, - COALESCE(km_apurada_licenciado_com_ar_n_autuado, 0) AS km_apurada_licenciado_com_ar_n_autuado -FROM - {{ ref("sumario_servico_dia_tipo") }} -CROSS JOIN - parametros \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_tipo_viagem_dia.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_tipo_viagem_dia.sql deleted file mode 100644 index 8f366b34..00000000 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_tipo_viagem_dia.sql +++ /dev/null @@ -1,153 +0,0 @@ -WITH - planejado AS ( - SELECT - DISTINCT `data`, - tipo_dia, - consorcio, - servico - FROM - {{ ref("sumario_servico_dia_historico") }} - WHERE - `data` <= DATE( "{{ var("end_date") }}" )), - sumario_v1 AS ( -- Viagens v1 - SELECT - `data`, - servico, - "Não classificado" AS tipo_viagem, - NULL AS indicador_ar_condicionado, - viagens, - km_apurada - FROM - {{ ref("sumario_servico_dia_historico") }} - WHERE - `data` < DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) ), - tipo_viagem_v2 AS ( -- Classifica os tipos de viagem (v2) - SELECT - `data`, - id_veiculo, - status, - SAFE_CAST(JSON_VALUE(indicadores,"$.indicador_ar_condicionado") AS BOOL) AS indicador_ar_condicionado - FROM - {{ ref("sppo_veiculo_dia") }} -- `rj-smtr`.`veiculo`.`sppo_veiculo_dia` - WHERE - `data` BETWEEN DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND DATE( "{{ var("end_date") }}" ) ), - viagem_v2 AS ( - SELECT - `data`, - servico_realizado AS servico, - id_veiculo, - id_viagem, - distancia_planejada - FROM - {{ ref("viagem_completa") }} --`rj-smtr`.`projeto_subsidio_sppo`.`viagem_completa` - WHERE - `data` BETWEEN DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" ) - AND DATE( "{{ var("end_date") }}" ) ), - subsidio_parametros AS ( - SELECT - * - FROM - {{ ref("subsidio_parametros") }} --`rj-smtr`.`dashboard_subsidio_sppo`.`subsidio_parametros` - WHERE - status != "Não classificado" - ORDER BY - data_inicio DESC, - ordem), - tabela_status_array AS ( - SELECT - TO_JSON_STRING(STRUCT(indicador_licenciado, - indicador_ar_condicionado, - indicador_autuacao_ar_condicionado, - indicador_autuacao_seguranca, - indicador_autuacao_limpeza, - indicador_autuacao_equipamento, - indicador_sensor_temperatura, - indicador_validador_sbd )) AS indicadores, - ARRAY_AGG(status) AS status_array - FROM - subsidio_parametros - GROUP BY - indicadores), - status_update AS ( - SELECT - indicadores, - status_array, - status_array[OFFSET(0)] AS status - FROM - tabela_status_array), - status_flat AS ( - SELECT - DISTINCT status_t, - status - FROM - status_update, - UNNEST(status_array) AS status_t), - tipo_viagem_v2_atualizado AS ( - SELECT - * EXCEPT(status), - u.status - FROM - tipo_viagem_v2 AS k - LEFT JOIN - status_flat AS u - ON - u.status_t = k.status), - sumario_v2 AS ( - SELECT - v.`data`, - v.servico, - ve.status AS tipo_viagem, - ve.indicador_ar_condicionado, - COUNT(id_viagem) AS viagens, - ROUND(SUM(distancia_planejada), 2) AS km_apurada - FROM - viagem_v2 v - LEFT JOIN - tipo_viagem_v2_atualizado ve - ON - ve.`data` = v.`data` - AND ve.id_veiculo = v.id_veiculo - GROUP BY - 1, - 2, - 3, - 4 ) -( -SELECT - v1.`data`, - p.tipo_dia, - p.consorcio, - v1.servico, - COALESCE(v1.tipo_viagem, "Sem viagem apurada") AS tipo_viagem, - SAFE_CAST(indicador_ar_condicionado AS BOOL) AS indicador_ar_condicionado, - COALESCE(v1.viagens, 0) AS viagens, - COALESCE(v1.km_apurada, 0) AS km_apurada -FROM - sumario_v1 v1 -INNER JOIN - planejado p -ON - p.`data` = v1.`data` - AND p.servico = v1.servico -WHERE - p.`data` < DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" )) -UNION ALL ( -SELECT - v2.`data`, - p.tipo_dia, - p.consorcio, - v2.servico, - COALESCE(v2.tipo_viagem, "Sem viagem apurada") AS tipo_viagem, - v2.indicador_ar_condicionado, - COALESCE(v2.viagens, 0) AS viagens, - COALESCE(v2.km_apurada, 0) AS km_apurada -FROM - sumario_v2 v2 -INNER JOIN - planejado p -ON - p.`data` = v2.`data` - AND p.servico = v2.servico -WHERE - p.`data` >= DATE( "{{ var("DATA_SUBSIDIO_V2_INICIO") }}" )) \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql b/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql deleted file mode 100644 index 12902b20..00000000 --- a/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql +++ /dev/null @@ -1,21 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={"field": "data_inicio", "data_type": "date", "granularity": "day"}, - unique_key=["tipo_penalidade", "data_inicio"], - incremental_strategy="insert_overwrite", - ) -}} - --- DEC RIO N. 51940/2023 -with penalidade as ( - select 0 as perc_km_inferior, 40 as perc_km_superior, "Grave" as tipo_penalidade, 1126.55 as valor, date("2023-01-16") as data_inicio, date("2023-12-31") as data_fim - union all - select 40 as perc_km_inferior, 60 as perc_km_superior, "Média" as tipo_penalidade, 563.28 as valor, date("2023-01-16") as data_inicio, date("2023-12-31") as data_fim - union all - select 60 as perc_km_inferior, 80 as perc_km_superior, "Nula" as tipo_penalidade, 0 as valor, date("2023-01-16") as data_inicio, date("2023-12-31") as data_fim - union all - select 80 as perc_km_inferior, 100 as perc_km_superior, null as tipo_penalidade, null as valor, date("2023-01-16") as data_inicio, date("2023-12-31") as data_fim - -) -select * from penalidade \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/viagens_realizadas.sql b/queries/models/dashboard_subsidio_sppo/viagens_realizadas.sql deleted file mode 100644 index 08586d9f..00000000 --- a/queries/models/dashboard_subsidio_sppo/viagens_realizadas.sql +++ /dev/null @@ -1,6 +0,0 @@ -SELECT - * -FROM - {{ ref("viagem_completa") }} -WHERE - data BETWEEN "2022-06-01" AND DATE("{{ var("end_date") }}") \ No newline at end of file diff --git a/queries/models/dashboard_subsidio_sppo/viagens_remuneradas.sql b/queries/models/dashboard_subsidio_sppo/viagens_remuneradas.sql deleted file mode 100644 index e955f83b..00000000 --- a/queries/models/dashboard_subsidio_sppo/viagens_remuneradas.sql +++ /dev/null @@ -1,183 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "id_viagem"], - incremental_strategy="insert_overwrite", - ) -}} - -WITH --- 1. Viagens planejadas (agrupadas por data e serviço) - planejado AS ( - SELECT - DISTINCT data, - tipo_dia, - consorcio, - servico, - distancia_total_planejada AS km_planejada, - FROM - {{ ref("viagem_planejada") }} - WHERE - data BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) - AND ( distancia_total_planejada > 0 - OR distancia_total_planejada IS NULL ) - ), - viagens_planejadas AS ( - SELECT - data_versao, - servico, - tipo_dia, - viagens_planejadas, - partidas_ida, - partidas_volta - FROM - {{ ref("ordem_servico_gtfs") }} - WHERE - data_versao BETWEEN DATE_TRUNC(DATE("{{ var("start_date") }}"), MONTH) - AND DATE( "{{ var("end_date") }}" ) - ), - data_versao_efetiva AS ( - SELECT - data, - tipo_dia, - COALESCE(data_versao_trips, data_versao_shapes, data_versao_frequencies) AS data_versao - FROM - {{ ref("subsidio_data_versao_efetiva") }} - WHERE - data BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) - ), - viagem_planejada AS ( - SELECT - p.*, - viagens_planejadas, - v.partidas_ida + v.partidas_volta AS viagens_planejadas_ida_volta - FROM - planejado AS p - LEFT JOIN - data_versao_efetiva AS d - USING - (data, tipo_dia) - LEFT JOIN - viagens_planejadas AS v - ON - d.data_versao = v.data_versao - AND p.tipo_dia = v.tipo_dia - AND p.servico = v.servico - ), --- 2. Viagens realizadas - viagem AS ( - SELECT - data, - servico_realizado AS servico, - id_veiculo, - id_viagem, - distancia_planejada - FROM - {{ ref("viagem_completa") }} - WHERE - data BETWEEN DATE("{{ var("start_date") }}") - AND DATE( "{{ var("end_date") }}" ) ), --- 3. Status dos veículos - veiculos AS ( - SELECT - data, - id_veiculo, - status - FROM - {{ ref("sppo_veiculo_dia") }} - WHERE - data BETWEEN DATE("{{ var("start_date") }}") - AND DATE("{{ var("end_date") }}") ), --- 4. Parâmetros de subsídio - subsidio_parametros AS ( - SELECT - DISTINCT data_inicio, - data_fim, - status, - subsidio_km - FROM - {{ ref("subsidio_parametros") }} ), --- 5. Viagens com tipo e valor de subsídio por km - viagem_km_tipo AS ( - SELECT - v.data, - v.servico, - ve.status AS tipo_viagem, - id_viagem, - distancia_planejada, - t.subsidio_km - FROM - viagem AS v - LEFT JOIN - veiculos AS ve - USING - (data, - id_veiculo) - LEFT JOIN - subsidio_parametros AS t - ON - v.data BETWEEN t.data_inicio - AND t.data_fim - AND ve.status = t.status ), --- 6. Apuração de km realizado e Percentual de Operação Diário (POD) - servico_km_apuracao AS ( - SELECT - p.data, - p.tipo_dia, - p.consorcio, - p.servico, - p.km_planejada AS km_planejada, - COALESCE(COUNT(v.id_viagem), 0) AS viagens, - COALESCE(SUM(v.distancia_planejada), 0) AS km_apurada, - COALESCE(ROUND(100 * SUM(v.distancia_planejada) / p.km_planejada,2), 0) AS perc_km_planejada - FROM - viagem_planejada AS p - LEFT JOIN - viagem_km_tipo AS v - USING - (data, - servico) - GROUP BY - 1, - 2, - 3, - 4, - 5 ) --- 7. Flag de viagens que serão consideradas ou não para fins de remuneração (apuração de valor de subsídio) - RESOLUÇÃO SMTR Nº 3645/2023 -SELECT -v.* EXCEPT(rn), -CASE - WHEN data >= "2023-09-16" - AND p.tipo_dia = "Dia Útil" - AND viagens_planejadas > 10 - AND perc_km_planejada > 120 - AND rn > viagens_planejadas_ida_volta*1.2 - THEN FALSE - WHEN data >= "2023-09-16" - AND p.tipo_dia = "Dia Útil" - AND viagens_planejadas <= 10 - AND perc_km_planejada > 200 - AND rn > viagens_planejadas_ida_volta*2 - THEN FALSE - ELSE - TRUE - END AS indicador_viagem_remunerada -FROM ( -SELECT - *, - ROW_NUMBER() OVER(PARTITION BY data, servico ORDER BY subsidio_km*distancia_planejada DESC) AS rn -FROM - viagem_km_tipo ) AS v -LEFT JOIN - viagem_planejada AS p -USING - (data, - servico) -LEFT JOIN - servico_km_apuracao AS s -USING - (data, - servico) \ No newline at end of file diff --git a/queries/models/example/my_first_dbt_model.sql b/queries/models/example/my_first_dbt_model.sql deleted file mode 100644 index f31a12d9..00000000 --- a/queries/models/example/my_first_dbt_model.sql +++ /dev/null @@ -1,27 +0,0 @@ - -/* - Welcome to your first dbt model! - Did you know that you can also configure models directly within SQL files? - This will override configurations stated in dbt_project.yml - - Try changing "table" to "view" below -*/ - -{{ config(materialized='table') }} - -with source_data as ( - - select 1 as id - union all - select null as id - -) - -select * -from source_data - -/* - Uncomment the line below to remove records with null `id` values -*/ - --- where id is not null diff --git a/queries/models/example/my_second_dbt_model.sql b/queries/models/example/my_second_dbt_model.sql deleted file mode 100644 index c91f8793..00000000 --- a/queries/models/example/my_second_dbt_model.sql +++ /dev/null @@ -1,6 +0,0 @@ - --- Use the `ref` function to select from other models - -select * -from {{ ref('my_first_dbt_model') }} -where id = 1 diff --git a/queries/models/example/schema.yml b/queries/models/example/schema.yml deleted file mode 100644 index 2a530817..00000000 --- a/queries/models/example/schema.yml +++ /dev/null @@ -1,21 +0,0 @@ - -version: 2 - -models: - - name: my_first_dbt_model - description: "A starter dbt model" - columns: - - name: id - description: "The primary key for this table" - tests: - - unique - - not_null - - - name: my_second_dbt_model - description: "A starter dbt model" - columns: - - name: id - description: "The primary key for this table" - tests: - - unique - - not_null diff --git a/queries/models/projeto_subsidio_sppo/README.md b/queries/models/projeto_subsidio_sppo/README.md deleted file mode 100644 index d18eb6ec..00000000 --- a/queries/models/projeto_subsidio_sppo/README.md +++ /dev/null @@ -1,138 +0,0 @@ -# Subsídio SPPO - -* Versão: 1.0.0 -* Data de início: 01/06/2022 - - - - - -## Etapas - -### 1. Atualização de viagens planejadas - -image - -Os serviços e trajetos considerados no subsídio são -atualizados pela equipe de Planejamento, -podendo ser incluídas novas linhas, alteradas rotas ou -mesmo a quilometragem determinada. Essa -rotina acontece a cada quinzena de apuração do subsídio. - -Como resultado, obtemos para cada dia de apuração o quadro planejado por -trajeto, conforme exemplo abaixo. Nele, consolidamos: - -1. A distância planejada para cada viagem -(`distancia_planejada`, ou extensão do trajeto) e total por dia (`distancia_total_planejada`) - -image - -2. A geometria do trajeto (`shape`), assim como seu ponto inicial - (`start_pt`) e final (`end_pt`), - que serão usados para identificar as posições de GPS na próxima - etapa. - -image - -**Observações**: - -* Os trajetos circulares têm seu shape dividido em ida e volta, apa - possibilitar a identificação da viagem. Nestes casos, a coluna - `shape_id_planejado` recebe o id "teórico" e `shape_id` recebe o ID - de ida ou volta, trocando-se 11º caractere do ID [ex: 866 - - `O0866AAA0ACDU01` (teórico) x `O0866AAA0AIDU01` (ida)]. - -* O `tipo_dia` determina a quilometragem total planejada para aquele dia, conforme o [Plano Operacional](https://transportes.prefeitura.rio/subsidio/). Caso o dia seja um feriado, o `tipo_dia` considerado será de Domingo. Caso seja ponto facultativo, será usado `Sabado`. - -* Nesta versão, os horários de `inicio_periodo` e `fim_periodo` são desconsiderados e consideramos o planejado para o dia inteiro. - -### 2. Cálculo de viagens realizadas - -image - -O cálculo é realizado cruzando sinais de GPS com o trajeto planejado de -cada serviço. Em resumo, identifica-se potenciais viagens a partir de posições -do GPS emitidas nos pontos inicial e final do trajeto, e depois valida-se a -viagem caso atinja os percentuais de conformidade mínimos de: - -* **Cobertura de GPS**: 50% dos minutos entre o início e fim da viagem devem ter pelo menos 1 sinal de GPS; -* **Cobertura do trajeto**: 80% das posições de GPS devem ter sido identificadas dentro - do trajeto planejado (num raio de 500m); - -O passo a passo do algoritmo está descrito abaixo. - -> Vamos seguir um exemplo com o ônibus B63050 (`id_veiculo`) no -> serviço `349` ao longo da metodologia para facilitar a explicação. -> Screen Shot 2022-07-14 at 21 17 15 - -#### 2.1. Classificação das posições de GPS no trajeto (`aux_registros_status_trajeto`) - -As posições de GPS dos ônibus são capturadas a cada minuto, e -posteriormente tratadas a cada hora na tabela -[`gps_sppo`](). A partir dos dados de GPS, sabemos para cada veículo -(`id_veiculo`, ou número de ordem) e datahora (`timestamp_gps`), qual era sua posição -(`latitude`, `longitude`) e o serviço no qual estava operando (`servico`) -naquele momento. - -> Para o dia 24/06, recebemos as seguintes informações por GPS do B63050 de 6:15 às 6:16: -image - -Cruzamos essa tabela de posições de GPS com o trajeto (`shape`) da -`viagem_planejada` pela data e serviço para classificar cada -posição como: - -* `start`: veículo estava no ponto inicial do trajeto (num raio de 500m) -* `end`: ponto final do trajeto (num raio de 500m) -* `middle`: meio do trajeto (num raio de 500m) -* `out`: fora do trajeto (num raio de 500m) - -Nesta etapa, as posições são -duplicadas para os trajetos de ida (`I`) e volta (`V`) -pois ainda não temos como dizer qual sentido o veículo está operando. - -> Uma vez classificado o `status_viagem`, obtemos para o mesmo intervalo -> de 6:15 às 6:16: -> image - -#### 2.2. Identificação de início e fim de viagens (`aux_viagem_inicio_fim`, `aux_viagem_circular`) - -Uma vez classificadas as posições, buscamos os pares de início e fim que -possivelmente formam uma viagem. - -Para isso, identificamos a "movimentação" do veículo: qual é seu -`status_viagem` naquele momento e qual era seu `status_viagem` imediatamente -anterior. -Classificamos, então, como início da viagem (`datetime_partida`) o momento em que o veículo -sai do ponto inicial e entra no trajeto, isto é, movimentação = -`startmiddle`. Da mesma forma, o fim da viagem é classificado como o -momento em que o veículo chega no ponto final a partir do trajeto, isto -é, movimentação = `middleend`. - -> Na seção anterior vimos que o B63050 esteve no ponto inicial -(`start`) do trajeto de volta (`V`) às 6:15:26 e logo em seguida, às -6:15:56, esteve no meio do trajeto (`middle`). Logo, 6:15:26 é -potencialmente o início de uma viagem no serviço 349. Para afirmarmos isso, deve haver posteriormente uma movimentação `middleend`, -que é observada às 7:20:57. Realizando esse processo ao longo do dia -24/06, obtemos as seguintes possíveis viagens do B63050: -> image src="https://user-images.githubusercontent.com/20743819/179125623-af731b85-0f9d-4d00-bada-93ca5997dea8.png"> - -Realizamos um tratamento final nessa etapa para juntar as viagens circulares, separadas -nos trajetos de ida (`I`) e volta (`V`), na tabela `aux_viagem_circular`. -O início de uma viagem circular (`datetime_partida`) corresponde ao -início do trajeto de ida e o final da viagem (`datetime_chegada`) ao -final do trajeto de volta. - -#### 2.3. Classificação das posições de GPS nas viagens (`registros_status_viagem`) - -#### 2.4. Cálculo dos percentuais de conformidade da viagem (`viagem_conformidade`, `viagem_completa`) - -### 3. Sumarização de viagens - -image diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql deleted file mode 100644 index ef360cc6..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql +++ /dev/null @@ -1,32 +0,0 @@ -{{ -config( - materialized='ephemeral' -) -}} - -with recursos as ( - select * - from {{ ref("aux_recurso_fora_prazo") }} - where id_julgamento is null -), -recursos_duplicados as ( - SELECT - s1.protocolo, - 3 as id_julgamento, - concat("Pedidos sobrepostos: ", string_agg(s2.protocolo, ", ")) as observacao - FROM recursos s1 - inner join recursos s2 - on - s1.id_veiculo = s2.id_veiculo - and s1.datetime_partida <= s2.datetime_partida - and s2.datetime_partida < s1.datetime_chegada - and s1.protocolo != s2.protocolo - group by 1,2 -) -select - r.* except(id_julgamento, observacao), - coalesce(r.id_julgamento, rd.id_julgamento) as id_julgamento, - coalesce(r.observacao, rd.observacao) as observacao -from {{ ref("aux_recurso_fora_prazo") }} r -left join recursos_duplicados rd -on r.protocolo = rd.protocolo \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql deleted file mode 100644 index d45b085c..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql +++ /dev/null @@ -1,31 +0,0 @@ -{{ -config( - materialized='ephemeral' -) -}} - -with recursos as ( - select * - FROM {{ ref("aux_recurso_viagem_nao_planejada") }} - where id_julgamento is null -), -recurso_prazo as ( - select - r.protocolo, - 2 as id_julgamento, - concat("Prazo (30 dias após apuração):", data_fim_recurso) as observacao - from - recursos r - inner join - {{ var("recurso_prazo") }} p - on - date(r.datetime_partida) between p.data_inicio_viagem and p.data_fim_viagem - where extract(date from data_recurso) > date(data_fim_recurso) -) -select - r.* except(id_julgamento, observacao), - coalesce(r.id_julgamento, rp.id_julgamento) as id_julgamento, - coalesce(r.observacao, rp.observacao) as observacao -from {{ ref("aux_recurso_viagem_nao_planejada") }} r -left join recurso_prazo rp -on r.protocolo = rp.protocolo diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql deleted file mode 100644 index c5345ae9..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql +++ /dev/null @@ -1,54 +0,0 @@ -{{ -config( - materialized='ephemeral' -) -}} - --- 1. Corrije preenchimento de dados -with recursos_tratada as ( - select - timestamp_captura, - data_recurso, - protocolo, - data_viagem, - datetime(data_viagem, hora_partida) as datetime_partida, - case - when hora_partida > hora_chegada and hora_chegada <= time(03,00,00) - then datetime(date_add(data_viagem, interval 1 day), hora_chegada) - else datetime(data_viagem, hora_chegada) - end as datetime_chegada, - case - -- caso 1: linha regular => SA - when tipo_servico_extra is null and tipo_servico = "SA" then linha - -- caso 2: lecd - when tipo_servico_extra = "LECD" and tipo_servico = "SA" then concat(tipo_servico_extra, linha) - -- caso 3: linha com servico nao regular => SV/SVB - when tipo_servico_extra is null and tipo_servico != "SA" then concat(tipo_servico, linha) - when tipo_servico_extra is not null and STARTS_WITH(tipo_servico_extra, tipo_servico) then concat(tipo_servico_extra, linha) - else concat("Não identificado: ", servico, " / ", tipo_servico) - end as servico, - sentido, - id_veiculo - from {{ ref('recurso_filtrada') }} -), --- 2. Avalia informações incorretas -recursos_incorretos as ( - select - *, - case - when datetime_partida > datetime_chegada then "Fim da viagem incorreto." - when datetime_partida > data_recurso then "Início da viagem incorreto." - when servico like "Não identificado:%" then "Linha e tipo de serviço não correspondem." - when sentido not in ("I", "V", "C") then "Sentido incorreto." - when length(id_veiculo) != 5 and length(REGEXP_EXTRACT(id_veiculo, r'[0-9]+')) != 5 then "Número de ordem incorreto - não possui 5 dígitos." - end as observacao - from recursos_tratada -) -select - *, - case - when observacao is not null - then 1 - else null - end as id_julgamento -from recursos_incorretos \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql deleted file mode 100644 index 550349f4..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql +++ /dev/null @@ -1,38 +0,0 @@ -{{ -config( - materialized='ephemeral' -) -}} - -with recursos as ( - select * - FROM {{ ref("aux_recurso_incorreto") }} - where id_julgamento is null - -), -servico_planejado as ( - select data, servico, sentido - FROM `rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` - {% if is_incremental() -%} - where data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {% endif -%} -), -recursos_nao_planejados as ( - select - r.protocolo, - 1 as id_julgamento, - "Serviço e sentido não planejados no subsídio na respectiva data da viagem." as observacao - FROM recursos r - left join servico_planejado s - on date(r.datetime_partida) = s.data - and r.servico = s.servico - and r.sentido = s.sentido - where s.servico is null -) -select - r.* except(id_julgamento, observacao), - coalesce(r.id_julgamento, rp.id_julgamento) as id_julgamento, - coalesce(r.observacao, rp.observacao) as observacao -from {{ ref("aux_recurso_incorreto") }} r -left join recursos_nao_planejados rp -on r.protocolo = rp.protocolo \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql deleted file mode 100644 index d8eefc25..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql +++ /dev/null @@ -1,45 +0,0 @@ - -{{ config( - materialized='incremental', - partition_by={ - "field":"data_viagem", - "data_type": "date", - "granularity":"day" - }, - unique_key="data_viagem", - incremental_strategy = 'insert_overwrite' -) -}} - -with recursos as ( - select * - FROM {{ ref("aux_recurso_duplicado") }} - where id_julgamento is null -), --- 1. Avalia recursos cuja viagem ja foi paga -viagens as ( - select * - from `rj-smtr.projeto_subsidio_sppo.viagem_completa` - {# {% if is_incremental() -%} #} - where data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {# {% endif -%} #} -), -recursos_pagos as ( - select - r.protocolo, - 4 as id_julgamento, - concat("Viagem(s) paga(s): ", string_agg(v.id_viagem, ", ")) as observacao - FROM recursos r - inner join viagens v - on r.id_veiculo = substr(v.id_veiculo,2,6) - and v.datetime_partida <= r.datetime_chegada - and v.datetime_chegada >= r.datetime_partida - group by 1,2 -) -select - r.* except(id_julgamento, observacao), - coalesce(r.id_julgamento, rp.id_julgamento) as id_julgamento, - coalesce(r.observacao, rp.observacao) as observacao -from {{ ref("aux_recurso_duplicado") }} r -left join recursos_pagos rp -on r.protocolo = rp.protocolo \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql deleted file mode 100644 index cee3de03..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql +++ /dev/null @@ -1,36 +0,0 @@ -{{ -config( - materialized='ephemeral' -) -}} - -with recursos as ( - select * - FROM {{ ref("aux_recurso_viagem_paga") }} - where id_julgamento is null -), -viagens_recaculadas as ( - select - protocolo, - case - when perc_conformidade_registros < {{ var("perc_conformidade_registros_min") }} then 5 - when perc_conformidade_shape < {{ var("perc_conformidade_shape_min") }} then 6 - when perc_conformidade_distancia <= {{ var("perc_conformidade_distancia_recurso_min") }} then 7 - else 8 - end as id_julgamento, - concat( - "ID da viagem identificada: ", id_viagem, - "\nServiços associados ao veículo no período da viagem: ", servico_informado, - "\nPercentual de conformidade do itinerário: ", perc_conformidade_shape, - "\nPercentual de conformidade do GPS: ", perc_conformidade_registros, - "\nPercentual de conformidade da distancia: ", perc_conformidade_distancia - ) as observacao - from {{ ref("viagem_conformidade_recurso") }} -) -select - r.* except(id_julgamento, observacao), - coalesce(r.id_julgamento, rp.id_julgamento) as id_julgamento, - coalesce(r.observacao, rp.observacao) as observacao -from {{ ref("aux_recurso_viagem_paga") }} r -left join viagens_recaculadas rp -on r.protocolo = rp.protocolo \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql b/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql deleted file mode 100644 index 445623cf..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql +++ /dev/null @@ -1,78 +0,0 @@ --- 1. Seleciona sinais de GPS registrados no período -with gps as ( - select - g.* except(longitude, latitude, servico), - {% if var("run_date") > "2023-01-16" and var("run_date") < "2023-12-02" %} - -- Substitui servicos noturnos por regulares, salvo exceções - case - when servico like "SN%" and servico not in ("SN006", "SN415", "SN474", "SN483") - then REGEXP_EXTRACT(servico, r'[0-9]+') - else servico - end as servico, - {% else %} - servico, - {% endif %} - substr(id_veiculo, 2, 3) as id_empresa, - ST_GEOGPOINT(longitude, latitude) posicao_veiculo_geo - from - `rj-smtr.br_rj_riodejaneiro_veiculos.gps_sppo` g -- {{ ref('gps_sppo') }} g - where ( - data between date_sub(date("{{ var("run_date") }}"), interval 1 day) and date("{{ var("run_date") }}") - ) - -- Limita range de busca do gps de D-2 às 00h até D-1 às 3h - and ( - timestamp_gps between datetime_sub(datetime_trunc("{{ var("run_date") }}", day), interval 1 day) - and datetime_add(datetime_trunc("{{ var("run_date") }}", day), interval 3 hour) - ) - and status != "Parado garagem" -), --- 2. Classifica a posição do veículo em todos os shapes possíveis de --- serviços de uma mesma empresa -status_viagem as ( - select - g.data, - g.id_veiculo, - g.id_empresa, - g.timestamp_gps, - timestamp_trunc(g.timestamp_gps, minute) as timestamp_minuto_gps, - g.posicao_veiculo_geo, - TRIM(g.servico, " ") as servico_informado, - s.servico as servico_realizado, - s.shape_id, - s.sentido_shape, - s.shape_id_planejado, - s.trip_id, - s.trip_id_planejado, - s.sentido, - s.start_pt, - s.end_pt, - s.distancia_planejada, - ifnull(g.distancia,0) as distancia, - case - when ST_DWITHIN(g.posicao_veiculo_geo, start_pt, {{ var("buffer") }}) - then 'start' - when ST_DWITHIN(g.posicao_veiculo_geo, end_pt, {{ var("buffer") }}) - then 'end' - when ST_DWITHIN(g.posicao_veiculo_geo, shape, {{ var("buffer") }}) - then 'middle' - else 'out' - end status_viagem - from - gps g - inner join ( - select - * - from - {{ ref("viagem_planejada") }} - where - data between date_sub(date("{{ var("run_date") }}"), interval 1 day) and date("{{ var("run_date") }}") - ) s - on - g.data = s.data - and g.servico = s.servico -) -select - *, - '{{ var("version") }}' as versao_modelo -from - status_viagem diff --git a/queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql b/queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql deleted file mode 100644 index f226a6a2..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql +++ /dev/null @@ -1,69 +0,0 @@ --- 1. Identifica viagens circulares de ida que possuem volta --- consecutiva. Junta numa única linha a datetime_partida (ida) + datetime_chegada_volta -with ida_volta_circular as ( - select - t.* - from ( - select - *, - lead(datetime_partida) over ( - partition by id_veiculo, servico_realizado order by id_veiculo, servico_realizado, datetime_partida, sentido_shape) as datetime_partida_volta, - lead(datetime_chegada) over ( - partition by id_veiculo, servico_realizado order by id_veiculo, servico_realizado, datetime_partida, sentido_shape) as datetime_chegada_volta, - lead(shape_id) over ( - partition by id_veiculo, servico_realizado order by id_veiculo, servico_realizado, datetime_partida, sentido_shape) as shape_id_volta, - lead(sentido_shape) over ( - partition by id_veiculo, servico_realizado order by id_veiculo, servico_realizado, datetime_partida, sentido_shape) = "V" as flag_proximo_volta -- possui volta - from - {{ ref("aux_viagem_inicio_fim") }} v - where - sentido = "C" - ) t - where - flag_proximo_volta = TRUE - and sentido_shape = "I" - and datetime_chegada <= datetime_partida_volta -), --- 2. Filtra apenas viagens circulares de ida e volta consecutivas --- (mantem ida e volta separadas, mas com o mesmo id) -viagem_circular as ( - select distinct - * - from ( - select - case - when ( - v.sentido_shape = "I" - and v.datetime_partida = c.datetime_partida - ) then c.id_viagem - when ( - v.sentido_shape = "V" - and v.datetime_chegada = c.datetime_chegada_volta - ) then c.id_viagem - end as id_viagem, - v.* except(id_viagem) - from - {{ ref("aux_viagem_inicio_fim") }} v - inner join - ida_volta_circular c - on - c.id_veiculo = v.id_veiculo - and c.servico_realizado = v.servico_realizado - and c.sentido = v.sentido - ) v - where - id_viagem is not null -) --- 3. Junta viagens circulares tratadas às viagens não circulares já identificadas -select - * -from - viagem_circular v -union all ( - select - * - from - {{ ref("aux_viagem_inicio_fim") }} v - where - sentido = "I" or sentido = "V" -) \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql b/queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql deleted file mode 100644 index 8242b756..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql +++ /dev/null @@ -1,77 +0,0 @@ --- 1. Cria colunas identificadoras de início (starts) e fim (ends) de viagens -with aux_status as ( - select - *, - string_agg(status_viagem,"") over ( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - rows between current row and 1 following) = 'startmiddle' starts, - string_agg(status_viagem,"") over ( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - rows between 1 preceding and current row) = 'middleend' ends - from - {{ ref('aux_registros_status_trajeto') }} -), --- 2. Classifica início-fim consecutivos como partida-chegada da viagem -aux_inicio_fim AS ( - select - *, - case - when - string_agg(status_viagem,"") over ( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - rows between CURRENT row and 1 following) = 'startend' - then timestamp_gps - end datetime_partida, - case - when string_agg(status_viagem,"") over ( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - rows between 1 preceding and CURRENT row) = 'startend' - then timestamp_gps - end datetime_chegada - from - aux_status - where - starts = true OR ends = true -), --- 3. Junta partida-chegada da viagem na mesma linha -inicio_fim AS ( - select - * except(datetime_chegada, posicao_veiculo_geo), - posicao_veiculo_geo as posicao_partida, - lead(datetime_chegada) over( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - ) as datetime_chegada, - lead(posicao_veiculo_geo) over( - partition by id_veiculo, shape_id - order by id_veiculo, shape_id, timestamp_gps - ) as posicao_chegada, - from aux_inicio_fim -) --- 4. Filtra colunas e cria campo identificador da viagem (id_viagem) -select distinct - concat(id_veiculo, "-", servico_realizado ,"-", sentido, "-", shape_id_planejado, "-", FORMAT_DATETIME("%Y%m%d%H%M%S", datetime_partida)) as id_viagem, - data, - id_empresa, - id_veiculo, - servico_informado, -- no momento da partida - servico_realizado, - trip_id, - shape_id, - sentido_shape, - round((st_distance(start_pt, posicao_partida) + st_distance(end_pt, posicao_chegada))/1000, 3) as distancia_inicio_fim, - distancia_planejada, - shape_id_planejado, - trip_id_planejado, - sentido, - datetime_partida, - datetime_chegada, - '{{ var("version") }}' as versao_modelo -from - inicio_fim -where - datetime_partida is not null \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql b/queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql deleted file mode 100644 index b72a346c..00000000 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql +++ /dev/null @@ -1,49 +0,0 @@ --- 1. Calcula a distância total percorrida por viagem, separada por --- shape. Adiciona distância do 1o/último sinal de gps ao início/final do --- shape. Isso é necessário pois o 1o/ultimo sinal é contabilizado --- apenas quando o veiculo sai/chega dentro do raio de 500m ao redor --- do ponto inicial/final. Contabiliza também o número de registros --- em cada tapa da viagem (inicio, meio, fim, fora), total de --- registros de gps e total de minutos da viagem com registros de gps. -with distancia as ( - select - *, - n_registros_middle + n_registros_start + n_registros_end as n_registros_shape - from ( - select distinct - id_viagem, - trip_id, - max(distancia_inicio_fim) as distancia_inicio_fim, - round(sum(distancia)/1000 + max(distancia_inicio_fim), 3) as distancia_aferida, - sum(case when status_viagem = "middle" then 1 else 0 end) as n_registros_middle, - sum(case when status_viagem = "start" then 1 else 0 end) as n_registros_start, - sum(case when status_viagem = "end" then 1 else 0 end) as n_registros_end, - sum(case when status_viagem = "out" then 1 else 0 end) as n_registros_out, - count(timestamp_gps) as n_registros_total, - count(distinct timestamp_minuto_gps) as n_registros_minuto - from ( - select distinct * except(posicao_veiculo_geo, start_pt, end_pt) - from {{ ref("registros_status_viagem") }} - where - data between date_sub(date("{{ var("run_date") }}"), interval 1 day) and date("{{ var("run_date") }}") - ) - group by 1,2 - ) -) --- 2. Calcula distancia total por viagem - junta distancias corrigidas --- de ida e volta de viagens circulares. -select - id_viagem, - sum(distancia_aferida) as distancia_aferida, - sum(distancia_inicio_fim) as distancia_inicio_fim, - sum(n_registros_middle) as n_registros_middle, - sum(n_registros_start) as n_registros_start, - sum(n_registros_end) as n_registros_end, - sum(n_registros_out) as n_registros_out, - sum(n_registros_total) as n_registros_total, - sum(n_registros_minuto) as n_registros_minuto, - sum(n_registros_shape) as n_registros_shape, - '{{ var("version") }}' as versao_modelo -from - distancia -group by 1 \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql b/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql deleted file mode 100644 index 35db0ac3..00000000 --- a/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql +++ /dev/null @@ -1,34 +0,0 @@ -{{ -config( - materialized='incremental', - partition_by={ - "field":"data_viagem", - "data_type": "date", - "granularity":"day" - }, - unique_key="data_viagem", - incremental_strategy = 'insert_overwrite' -) -}} - --- Adiciona julgamento aos recursos restantes -with recursos as ( - select - r.* except(id_julgamento), - ifnull(id_julgamento, 9) as id_julgamento - from {{ ref("aux_recurso_viagem_recalculada") }} r - {# {% if is_incremental() -%} #} - where data_viagem between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {# {% endif -%} #} -) --- Preenche campos de julgamento e motivo com base na id_julgamento -select - r.* except(observacao), - d.julgamento, - d.motivo, - r.observacao -from recursos r -left join ( - select * from {{ var("recurso_julgamento") }} -) d -on r.id_julgamento = d.id_julgamento \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/recurso_filtrada.sql b/queries/models/projeto_subsidio_sppo/recurso_filtrada.sql deleted file mode 100644 index aee79427..00000000 --- a/queries/models/projeto_subsidio_sppo/recurso_filtrada.sql +++ /dev/null @@ -1,38 +0,0 @@ - -{{ config( - materialized='incremental', - partition_by={ - "field":"data_viagem", - "data_type": "date", - "granularity":"day" - }, - unique_key="data_viagem", - incremental_strategy = 'insert_overwrite' -) -}} - -SELECT - data, - hora, - SAFE_CAST(DATETIME(TIMESTAMP(timestamp_captura), "America/Sao_Paulo") AS DATETIME) as timestamp_captura, - safe_cast(modo as string) as modo, - safe_cast(id_recurso as string) as id_recurso, - safe_cast(split(data_recurso,".")[OFFSET(0)] as datetime) as data_recurso, - safe_cast(protocolo as string) as protocolo, - safe_cast(data_viagem as date) as data_viagem, - safe_cast(safe_cast(hora_partida as timestamp) as time) as hora_partida, - safe_cast(safe_cast(hora_chegada as timestamp) as time) as hora_chegada, - safe_cast(id_veiculo as string) as id_veiculo, - safe_cast(servico as string) as servico, - REGEXP_EXTRACT(servico, r'[0-9]+') as linha, - concat("S", left(safe_cast(tipo_servico as string), 1)) as tipo_servico, - REGEXP_EXTRACT(split(servico, "-")[OFFSET(0)], r'[A-Z]+') as tipo_servico_extra, - left(safe_cast(sentido as string),1) as sentido, - safe_cast(status as string) as status, - null as id_julgamento -FROM {{ var("recurso_staging") }} -{# {% if is_incremental() -%} #} -where - safe_cast(data_viagem as date) between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - and SAFE_CAST(DATETIME(TIMESTAMP(timestamp_captura), "America/Sao_Paulo" ) AS DATETIME) = '{{ var("recurso_timestamp_captura")}}' -{# {% endif -%} #} \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql b/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql deleted file mode 100644 index 6da3dfd4..00000000 --- a/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql +++ /dev/null @@ -1,48 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['timestamp_gps', 'id_veiculo'], - incremental_strategy='insert_overwrite' -) -}} - --- 1. Identifica registros pertencentes a viagens -with registros_viagem as ( - select - s.* except(versao_modelo), - datetime_partida, - datetime_chegada, - distancia_inicio_fim, - id_viagem - from - {{ ref("aux_registros_status_trajeto") }} s - left join ( - select - id_veiculo, - trip_id, - servico_realizado, - sentido_shape, - id_viagem, - datetime_partida, - datetime_chegada, - distancia_inicio_fim - from - {{ ref("aux_viagem_circular") }} - ) v - on - s.id_veiculo = v.id_veiculo - and s.trip_id = v.trip_id - and s.timestamp_gps between v.datetime_partida and v.datetime_chegada -) --- 2. Filtra apenas registros de viagens identificadas -select - *, - '{{ var("version") }}' as versao_modelo -from - registros_viagem -where - id_viagem is not null \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/schema.yml b/queries/models/projeto_subsidio_sppo/schema.yml deleted file mode 100644 index 0f062e55..00000000 --- a/queries/models/projeto_subsidio_sppo/schema.yml +++ /dev/null @@ -1,715 +0,0 @@ - -version: 2 - -models: - - name: viagem_planejada - description: "Tabela histórica com detalhes das viagens planejadas a cada dia" - columns: - - name: consorcio - description: "Consórcio ao qual o serviço pertence" - tests: - - not_null - - name: data - description: "Data" - tests: - - not_null - - name: data_shape - description: "Data do shape capturado no SIGMOB (00h)" - tests: - - not_null - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da - distância planejada - categorias: Dia Útil, Sábado, Domingo" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: servico - description: "Serviço planejado" - tests: - - not_null - - name: sentido - description: "Sentido planejado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - name: inicio_periodo - description: "Início do período de operação planejado" - tests: - - not_null - - name: fim_periodo - description: "Fim do período de operação planejado" - tests: - - not_null - - name: intervalo - description: "Intervalo de saída planejado" - tests: - - not_null - # - name: viagens - # description: "Viagens planejadas" - # tests: - # - not_null - # - name: tempo_viagem - # description: "Tempo planejado de uma viagem" - # tests: - # - not_null - # - greater_than_zero - - name: variacao_itinerario - description: "Variação dee itinerário da viagem - categorias: - DD, DU, SS, RT, RM, DA, SA" - tests: - - not_null - - accepted_values: - values: ["DD", "DU", "SS", "RT", "RM", "DA", "SA"] - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço - realizado " - tests: - - not_null - - name: shape - description: "Linestring dos pontos gelocalizados do trajeto" - tests: - - not_null - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado em KM" - tests: - - not_null - - name: distancia_total_planejada - description: "Distância total planejada do serviço em KM (junta ida+volta)." - tests: - - not_null - - greater_than_zero - - name: trip_id - description: "Código identificador do itinerário (trip)" - tests: - - not_null - - name: aux_registros_status_trajeto - description: "Tabela auxiliar de classificação dos registros de GPS - no trajeto (shape), com base no serviço informado pelo veículo (atualizada diariamente, sem histórico)." - columns: - - name: data - description: "Data de emissão do sinal de GPS" - tests: - - not_null - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - tests: - - not_null - - name: timestamp_minuto_gps - description: "Timestamp de emissão do sinal de GPS truncado em - minutos (para fins de comparação com minutos da viagem)" - tests: - - not_null - - name: posicao_veiculo_geo - description: "Geolocalização do veículo segundo o sinal de GPS" - tests: - - not_null - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Outro serviço da empresa que o veículo pode estar operando" - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço - realizado " - tests: - - not_null - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - name: distancia - description: "Distância geodésica da última posição do GPS em - relação a posição atual" - tests: - - not_null - - not_negative - - name: status_viagem - description: "Indica se a posição do GPS está no - início (start), meio (middle), fim (end) ou fora (out) do shape do serviço informado" - tests: - - not_null - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: aux_viagem_inicio_fim - description: "Tabela auxiliar de identificação de início e fim de - viagens (atualizada diariamente, sem histórico)." - columns: - - name: data - description: "Data de emissão do sinal de GPS" - tests: - - not_null - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Serviço realizado pelo veículo (com base na - identificação do trajeto)" - tests: - - not_null - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço" - tests: - - not_null - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - - name: datetime_partida - description: "Horário de início da viagem" - tests: - - not_null - - name: datetime_chegada - description: "Horário de fim da viagem" - tests: - - not_null - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - name: aux_viagem_circular - description: "Tabela auxiliar de tratamento de viagens circulares (atualizada diariamente, sem histórico)." - columns: - - name: data - description: "Data de emissão do sinal de GPS" - tests: - - not_null - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Serviço realizado pelo veículo (com base na - identificação do trajeto)" - - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço" - tests: - - not_null - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - - name: datetime_partida - description: "Horário de início da viagem" - tests: - - not_null - - name: datetime_chegada - description: "Horário de fim da viagem" - tests: - - not_null - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - name: registros_status_viagem - description: "Registros de GPS clasificados por viagem." - columns: - - name: data - description: "Data de emissão do sinal de GPS" - tests: - - not_null - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - tests: - - not_null - - name: timestamp_gps - description: "Timestamp de emissão do sinal de GPS" - tests: - - not_null - - name: timestamp_minuto_gps - description: "Timestamp de emissão do sinal de GPS truncado em - minutos (para fins de comparação com minutos da viagem)" - tests: - - not_null - - name: posicao_veiculo_geo - description: "Geolocalização do veículo segundo o sinal de GPS" - tests: - - not_null - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Outro serviço da empresa que o veículo pode estar operando" - tests: - - not_null - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço - realizado " - tests: - - not_null - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - name: distancia - description: "Distância geodésica da última posição do GPS em - relação a posição atual" - tests: - - not_null - - not_negative - - name: status_viagem - description: "Indica se a posição do GPS está no - início (start), meio (middle), fim (end) ou fora (out) do shape do serviço informado" - tests: - - not_null - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - - name: datetime_partida - description: "Horário de início da viagem" - tests: - - not_null - - name: datetime_chegada - description: "Horário de fim da viagem" - tests: - - not_null - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: aux_viagem_registros - description: "Tabela auxiliar de cálculo da distância e total de - registros de GPS das viagens identificadas (atualizada diariamente, sem histórico)." - columns: - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - tests: - - not_null - - unique - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - greater_than_zero - - name: distancia_aferida - description: "Distância aferida da viagem (geodésia entre - posições consecutivas do sinal de GPS)" - tests: - - not_null - - greater_than_zero - - name: n_registros_middle - description: "Contagem de sinais de GPS emitidos no meio do - trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_start - description: "Contagem de sinais de GPS emitidos no ponto de - de início do trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_end - description: "Contagem de sinais de GPS emitidos no ponto final - do trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_out - description: "Contagem de sinais de GPS emitidos fora do trajeto." - tests: - - not_null - - not_negative - - name: n_registros_total - description: "Contagem de sinais de GPS emitidos no tempo da viagem." - tests: - - not_null - - greater_than_zero - - name: n_registros_minuto - description: "Contagem de minutos do trajeto com pelo menos 1 sinal de GPS emitido." - tests: - - not_null - - greater_than_zero - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: n_registros_shape - description: "Contagem total de sinais de GPS emitidos dentro do trajeto." - tests: - - not_null - - not_negative - - name: viagem_conformidade - description: "Tabela de cálculo da conformidade de viagens - identificadas por GPS." - columns: - - name: data - description: "Data de emissão do sinal de GPS" - tests: - - not_null - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Serviço realizado pelo veículo (com base na - identificação do trajeto)" - tests: - - not_null - - name: shape_id - description: "Código identificador do shape (trajeto) do serviço" - tests: - - not_null - - name: sentido_shape - description: "Sentido do shape (codificado no shape_id - categorias: I (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - tests: - - not_null - - unique - - name: datetime_partida - description: "Horário de início da viagem" - tests: - - not_null - - name: datetime_chegada - description: "Horário de fim da viagem" - tests: - - not_null - - name: tempo_viagem - description: "Tempo da viagem (em minutos)" - tests: - - not_null - - greater_than_zero - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - greater_than_zero - - name: distancia_aferida - description: "Distância aferida da viagem (geodésia entre - posições consecutivas do sinal de GPS)" - tests: - - not_null - - greater_than_zero - - name: n_registros_middle - description: "Contagem de sinais de GPS emitidos no meio do - trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_start - description: "Contagem de sinais de GPS emitidos no ponto de - de início do trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_end - description: "Contagem de sinais de GPS emitidos no ponto final - do trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_out - description: "Contagem de sinais de GPS emitidos fora do trajeto." - tests: - - not_null - - not_negative - - name: n_registros_shape - description: "Contagem total de sinais de GPS emitidos dentro do trajeto." - tests: - - not_null - - not_negative - - name: n_registros_total - description: "Contagem de sinais de GPS emitidos no tempo da viagem." - tests: - - not_null - - greater_than_zero - - name: n_registros_minuto - description: "Contagem de minutos do trajeto com pelo menos 1 sinal de GPS emitido." - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_shape - description: "Percentual de sinais emitidos dentro do shape (trajeto) ao - longo da viagem" - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_distancia - description: "Razão da distância aferida pela distância teórica x 100" - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_registros - description: "Percentual de minutos da viagem com registro de sinal de GPS" - tests: - - not_null - - greater_than_zero - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null - - name: viagem_completa - description: "Detalhes de todas as viagens completas identificadas." - columns: - - name: consorcio - description: "Consórcio ao qual o serviço pertence" - tests: - - not_null - - name: data - description: "Data da viagem" - tests: - - not_null - - name: tipo_dia - description: "Dia da semana considerado para o cálculo da - distância planejada - categorias: Dia Útil, Sábado, Domingo" - tests: - - not_null - - accepted_values: - values: ["Dia Útil", "Sabado", "Domingo"] - - name: id_veiculo - description: "Código identificador do veículo (número de ordem)" - tests: - - not_null - - name: id_empresa - description: "Código identificador da empresa que opera o veículo" - - - name: servico_informado - description: "Serviço informado pelo GPS do veículo" - tests: - - not_null - - name: servico_realizado - description: "Serviço realizado pelo veículo (com base na - identificação do trajeto)" - tests: - - not_null - - name: vista - description: "Texto que aparece na sinalização identificando o destino da viagem aos passageiros" - tests: - - not_null - - name: trip_id - description: "Código identificador do itinerário operado" - tests: - - not_null - - name: shape_id - description: "Código identificador do trajeto (shape) operado" - tests: - - not_null - - name: sentido - description: "Sentido do trajeto identificado - categorias: I - (ida), V (volta), C (circular)" - tests: - - not_null - - accepted_values: - values: ["I", "V", "C"] - - name: id_viagem - description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" - tests: - - not_null - - unique - - name: datetime_partida - description: "Horário de início da viagem" - tests: - - not_null - - name: datetime_chegada - description: "Horário de fim da viagem" - tests: - - not_null - - name: tipo_viagem - description: "Tipo de viagem - categorias: Completa linha - correta, Completa linha incorreta" - tests: - - not_null - - accepted_values: - values: ["Completa linha correta", "Completa linha incorreta"] - - name: inicio_periodo - description: "Início do período de operação planejado" - - - name: fim_periodo - description: "Fim do período de operação planejado" - - - name: tempo_planejado - description: "Tempo planejado da viagem (em minutos)" - - # - greater_than_zero - - name: tempo_viagem - description: "Tempo aferido da viagem (em minutos)" - tests: - - not_null - - greater_than_zero - - name: distancia_planejada - description: "Distância do shape (trajeto) planejado" - tests: - - not_null - - greater_than_zero - - name: distancia_aferida - description: "Distância aferida da viagem (geodésia entre - posições consecutivas do sinal de GPS)" - tests: - - not_null - - greater_than_zero - - name: n_registros_shape - description: "Contagem de sinais de GPS emitidos dentro do trajeto." - tests: - - not_null - - greater_than_zero - - name: n_registros_total - description: "Contagem de sinais de GPS emitidos no tempo da viagem." - tests: - - not_null - - greater_than_zero - - name: n_registros_minuto - description: "Contagem de minutos do trajeto com pelo menos 1 sinal de GPS emitido." - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_shape - description: "Percentual de sinais emitidos dentro do shape (trajeto) ao - longo da viagem" - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_distancia - description: "Razão da distância aferida pela distância teórica x 100" - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_registros - description: "Percentual de minutos da viagem com registro de sinal de GPS" - tests: - - not_null - - greater_than_zero - - name: perc_conformidade_tempo - description: "Razão do tempo aferido da viagem pelo planejado x 100" - - - name: versao_modelo - description: "Versão da metodologia de cálculo da - respectiva linha na tabela." - tests: - - not_null diff --git a/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql b/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql deleted file mode 100644 index 7ef4765a..00000000 --- a/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql +++ /dev/null @@ -1,149 +0,0 @@ -SELECT - data, - CASE - WHEN data = "2022-06-16" THEN "Domingo" - WHEN data = "2022-06-17" THEN "Sabado" - WHEN data = "2022-09-02" THEN "Sabado" - WHEN data = "2022-09-07" THEN "Domingo" - WHEN data = "2022-10-12" THEN "Domingo" - WHEN data = "2022-10-17" THEN "Sabado" - WHEN data = "2022-11-02" THEN "Domingo" - WHEN data = "2022-11-14" THEN "Sabado" - WHEN data = "2022-11-15" THEN "Domingo" - WHEN data = "2022-11-24" THEN "Sabado" - WHEN data = "2022-11-28" THEN "Sabado" - WHEN data = "2022-12-02" THEN "Sabado" - WHEN data = "2022-12-05" THEN "Sabado" - WHEN data = "2022-12-09" THEN "Sabado" - WHEN data = "2023-04-06" THEN "Sabado" -- Ponto Facultativo - DECRETO RIO Nº 52275/2023 - WHEN data = "2023-04-07" THEN "Domingo" -- Paixão de Cristo -- Art. 1º, V - PORTARIA ME Nº 11.090/2022 - WHEN data = "2023-06-08" THEN "Domingo" -- Corpus Christi - Lei nº 336/1949 - OFÍCIO Nº MTR-OFI-2023/03260 (MTROFI202303260A) - WHEN data = "2023-06-09" THEN "Sabado" -- Ponto Facultativo - DECRETO RIO Nº 52584/2023 - WHEN data = "2023-09-08" THEN "Ponto Facultativo" -- Ponto Facultativo - DECRETO RIO Nº 53137/2023 - WHEN data = "2023-10-13" THEN "Ponto Facultativo" -- Ponto Facultativo - DECRETO RIO Nº 53296/2023 - WHEN data = "2023-10-16" THEN "Ponto Facultativo" -- Dia do Comércio - OS Outubro/Q2 - WHEN data = "2023-11-03" THEN "Ponto Facultativo" -- Ponto Facultativo - DECRETO RIO Nº 53417/2023 - WHEN data = "2023-11-05" THEN "Sabado" -- Domingo Atípico - ENEM - OS Novembro/Q1 - WHEN data = "2023-11-12" THEN "Sabado" -- Domingo Atípico - ENEM - OS Novembro/Q1 - WHEN EXTRACT(DAY FROM data) = 20 AND EXTRACT(MONTH FROM data) = 1 THEN "Domingo" -- Dia de São Sebastião -- Art. 8°, I - Lei Municipal nº 5146/2010 - WHEN EXTRACT(DAY FROM data) = 23 AND EXTRACT(MONTH FROM data) = 4 THEN "Domingo" -- Dia de São Jorge -- Art. 8°, II - Lei Municipal nº 5146/2010 / Lei Estadual Nº 5198/2008 / Lei Estadual Nº 5645/2010 - WHEN EXTRACT(DAY FROM data) = 20 AND EXTRACT(MONTH FROM data) = 11 THEN "Domingo" -- Aniversário de morte de Zumbi dos Palmares / Dia da Consciência Negra -- Art. 8°, IV - Lei Municipal nº 5146/2010 / Lei Estadual nº 526/1982 / Lei Estadual nº 1929/1991 / Lei Estadual nº 4007/2002 / Lei Estadual Nº 5645/2010 - WHEN EXTRACT(DAY FROM data) = 21 AND EXTRACT(MONTH FROM data) = 4 THEN "Domingo" -- Tiradentes -- Art. 1º, VI - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 1 AND EXTRACT(MONTH FROM data) = 5 THEN "Domingo" -- Dia Mundial do Trabalho -- Art. 1º, VII - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 7 AND EXTRACT(MONTH FROM data) = 9 THEN "Domingo" -- Independência do Brasil -- Art. 1º, IX - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 12 AND EXTRACT(MONTH FROM data) = 10 THEN "Domingo" -- Nossa Senhora Aparecida -- Art. 1º, X - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 2 AND EXTRACT(MONTH FROM data) = 11 THEN "Domingo" -- Finados -- Art. 1º, XII - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 15 AND EXTRACT(MONTH FROM data) = 11 THEN "Domingo" -- Proclamação da República -- Art. 1º, XIII - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAY FROM data) = 25 AND EXTRACT(MONTH FROM data) = 12 THEN "Domingo" -- Natal -- Art. 1º, XIV - PORTARIA ME Nº 11.090/2022 - WHEN EXTRACT(DAYOFWEEK FROM data) = 1 THEN "Domingo" - WHEN EXTRACT(DAYOFWEEK FROM data) = 7 THEN "Sabado" - ELSE "Dia Útil" - END AS tipo_dia, - CASE - -- Reveillon: - WHEN data = DATE(2022,12,31) THEN data - WHEN data = DATE(2023,1,1) THEN data - WHEN data BETWEEN DATE(2023,1,2) AND DATE(2023,1,15) THEN DATE(2023,1,2) - -- Reprocessamento: - WHEN data BETWEEN DATE(2023,1,15) AND DATE(2023,1,31) THEN DATE(2023,1,16) - WHEN data BETWEEN DATE(2023,3,16) AND DATE(2023,3,31) THEN DATE(2023,3,16) - -- Alteração de Planejamento - WHEN data BETWEEN DATE(2023,6,16) AND DATE(2023,6,30) THEN DATE(2023,6,16) - WHEN data BETWEEN DATE(2023,7,16) AND DATE(2023,7,31) THEN DATE(2023,7,16) - WHEN data BETWEEN DATE(2023,8,16) AND DATE(2023,8,31) THEN DATE(2023,8,16) - WHEN data BETWEEN DATE(2023,9,16) AND DATE(2023,9,30) THEN DATE(2023,9,16) - WHEN data BETWEEN DATE(2023,10,16) AND DATE(2023,10,16) THEN DATE(2023,10,16) - WHEN data BETWEEN DATE(2023,10,17) AND DATE(2023,10,23) THEN DATE(2023,10,17) - WHEN data BETWEEN DATE(2023,10,24) AND DATE(2023,10,31) THEN DATE(2023,10,24) - -- 2022: - WHEN data BETWEEN DATE(2022,10,1) AND DATE(2022,10,2) THEN DATE(2022,9,16) - WHEN data BETWEEN DATE(2022,6,1) AND LAST_DAY(DATE(2022,6,30), MONTH) THEN DATE(2022,6,1) - {% for i in range(7, 13) %} - WHEN data BETWEEN DATE(2022,{{ i }},1) AND DATE(2022,{{ i }},15) THEN DATE(2022,{{ i }},1) - WHEN data BETWEEN DATE(2022,{{ i }},16) AND LAST_DAY(DATE(2022,{{ i }},30), MONTH) THEN DATE(2022,{{ i }},16) - {% endfor %} - -- 2023: - {% for j in range(2023, 2024) %} - {% for i in range(1, 13) %} - WHEN EXTRACT(MONTH FROM data) = {{ i }} THEN DATE({{ j }},{{ i }},1) - {% endfor %} - {% endfor %} - END AS data_versao_trips, - CASE - -- Reveillon: - WHEN data = DATE(2022,12,31) THEN data - WHEN data = DATE(2023,1,1) THEN data - WHEN data BETWEEN DATE(2023,1,2) AND DATE(2023,1,15) THEN DATE(2023,1,2) - -- Reprocessamento: - WHEN data BETWEEN DATE(2023,1,15) AND DATE(2023,1,31) THEN DATE(2023,1,16) - WHEN data BETWEEN DATE(2023,3,16) AND DATE(2023,3,31) THEN DATE(2023,3,16) - -- Alteração de Planejamento - WHEN data BETWEEN DATE(2023,6,16) AND DATE(2023,6,30) THEN DATE(2023,6,16) - WHEN data BETWEEN DATE(2023,7,16) AND DATE(2023,7,31) THEN DATE(2023,7,16) - WHEN data BETWEEN DATE(2023,8,16) AND DATE(2023,8,31) THEN DATE(2023,8,16) - WHEN data BETWEEN DATE(2023,9,16) AND DATE(2023,9,30) THEN DATE(2023,9,16) - WHEN data BETWEEN DATE(2023,10,16) AND DATE(2023,10,16) THEN DATE(2023,10,16) - WHEN data BETWEEN DATE(2023,10,17) AND DATE(2023,10,23) THEN DATE(2023,10,17) - WHEN data BETWEEN DATE(2023,10,24) AND DATE(2023,10,31) THEN DATE(2023,10,24) - -- 2022: - WHEN data BETWEEN DATE(2022,10,1) AND DATE(2022,10,2) THEN DATE(2022,9,16) - WHEN data BETWEEN DATE(2022,6,1) AND LAST_DAY(DATE(2022,6,30), MONTH) THEN DATE(2022,6,1) - {% for i in range(7, 13) %} - WHEN data BETWEEN DATE(2022,{{ i }},1) AND DATE(2022,{{ i }},15) THEN DATE(2022,{{ i }},1) - WHEN data BETWEEN DATE(2022,{{ i }},16) AND LAST_DAY(DATE(2022,{{ i }},30), MONTH) THEN DATE(2022,{{ i }},16) - {% endfor %} - -- 2023: - {% for j in range(2023, 2024) %} - {% for i in range(1, 13) %} - WHEN EXTRACT(MONTH FROM data) = {{ i }} THEN DATE({{ j }},{{ i }},1) - {% endfor %} - {% endfor %} - END AS data_versao_shapes, - CASE - -- Reveillon: - WHEN data = DATE(2022,12,31) THEN data - WHEN data = DATE(2023,1,1) THEN data - WHEN data BETWEEN DATE(2023,1,2) AND DATE(2023,1,15) THEN DATE(2023,1,2) - -- Reprocessamento: - WHEN data BETWEEN DATE(2023,1,15) AND DATE(2023,1,31) THEN DATE(2023,1,16) - WHEN data BETWEEN DATE(2023,3,16) AND DATE(2023,3,31) THEN DATE(2023,3,16) - -- Alteração de Planejamento - WHEN data BETWEEN DATE(2023,6,16) AND DATE(2023,6,30) THEN DATE(2023,6,16) - WHEN data BETWEEN DATE(2023,7,16) AND DATE(2023,7,31) THEN DATE(2023,7,16) - WHEN data BETWEEN DATE(2023,8,16) AND DATE(2023,8,31) THEN DATE(2023,8,16) - WHEN data BETWEEN DATE(2023,9,16) AND DATE(2023,9,30) THEN DATE(2023,9,16) - WHEN data BETWEEN DATE(2023,10,16) AND DATE(2023,10,16) THEN DATE(2023,10,16) - WHEN data BETWEEN DATE(2023,10,17) AND DATE(2023,10,23) THEN DATE(2023,10,17) - WHEN data BETWEEN DATE(2023,10,24) AND DATE(2023,10,31) THEN DATE(2023,10,24) - -- 2022: - {% for i in range(6, 13) %} - WHEN data BETWEEN DATE(2022,{{ i }},1) AND DATE(2022,{{ i }},15) THEN DATE(2022,{{ i }},1) - WHEN data BETWEEN DATE(2022,{{ i }},16) AND LAST_DAY(DATE(2022,{{ i }},30), MONTH) THEN DATE(2022,{{ i }},16) - {% endfor %} - -- 2023: - {% for j in range(2023, 2024) %} - {% for i in range(1, 13) %} - WHEN EXTRACT(MONTH FROM data) = {{ i }} THEN DATE({{ j }},{{ i }},1) - {% endfor %} - {% endfor %} - END AS data_versao_frequencies, - CASE - WHEN EXTRACT(YEAR FROM data) = 2022 THEN ( - CASE - WHEN EXTRACT(MONTH FROM data) = 6 THEN 2.13 - WHEN EXTRACT(MONTH FROM data) = 7 THEN 1.84 - WHEN EXTRACT(MONTH FROM data) = 8 THEN 1.80 - WHEN EXTRACT(MONTH FROM data) = 9 THEN 1.75 - WHEN EXTRACT(MONTH FROM data) = 10 THEN 1.62 - WHEN EXTRACT(MONTH FROM data) = 11 THEN 1.53 - WHEN EXTRACT(MONTH FROM data) = 12 THEN 1.78 - END - ) - WHEN EXTRACT(YEAR FROM data) = 2023 THEN ( - CASE - WHEN data <= DATE("2023-01-06") THEN 3.18 - ELSE 2.81 - END - ) - END AS valor_subsidio_por_km -FROM UNNEST(GENERATE_DATE_ARRAY("2022-06-01", "2023-12-31")) AS data diff --git a/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql b/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql deleted file mode 100644 index 991ce814..00000000 --- a/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql +++ /dev/null @@ -1,13 +0,0 @@ -SELECT - SAFE_CAST(data_versao AS DATE) data_versao, - SAFE_CAST(servico AS STRING) servico, - SAFE_CAST(vista AS STRING) vista, - SAFE_CAST(consorcio AS STRING) consorcio, - SAFE_CAST(horario_inicio AS TIME) horario_inicio, - SAFE_CAST(horario_fim AS TIME) horario_fim, - SAFE_CAST(trip_id AS STRING) trip_id, - SAFE_CAST(sentido AS STRING) sentido, - SAFE_CAST(distancia_planejada AS FLOAT64) distancia_planejada, - SAFE_CAST(tipo_dia AS STRING) tipo_dia, - SAFE_CAST(distancia_total_planejada AS FLOAT64) distancia_total_planejada -FROM {{ var("quadro_horario") }} AS t \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql b/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql deleted file mode 100644 index 920a3cbe..00000000 --- a/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql +++ /dev/null @@ -1,98 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data_versao", - "data_type": "date", - "granularity":"day" - }, - unique_key=['data_versao', 'shape_id'], - incremental_strategy='insert_overwrite' -) -}} - -with data_versao as ( - select data_versao_shapes - from {{ ref("subsidio_data_versao_efetiva") }} - where data between date_sub("{{ var("run_date") }}", interval 1 day) and date("{{ var("run_date") }}") -), -contents as ( - SELECT - shape_id, - ST_GEOGPOINT( - SAFE_CAST(shape_pt_lon AS FLOAT64), - SAFE_CAST(shape_pt_lat AS FLOAT64) - ) ponto_shape, - SAFE_CAST(shape_pt_sequence as INT64) shape_pt_sequence, - DATE(data_versao) AS data_versao - FROM - {{ var("subsidio_shapes") }} s - {% if is_incremental() %} - WHERE - data_versao in (select data_versao_shapes from data_versao) - {% endif %} -), -pts as ( - select - *, - max(shape_pt_sequence) over( - partition by data_versao, shape_id - ) final_pt_sequence - from - contents c - order by - data_versao, shape_id, shape_pt_sequence -), -shapes as ( --- BUILD LINESTRINGS OVER SHAPE POINTS - SELECT - shape_id, - data_versao, - st_makeline(ARRAY_AGG(ponto_shape)) as shape - FROM pts - GROUP BY 1,2 -), -boundary as ( --- EXTRACT START AND END POINTS FROM SHAPES - SELECT - c1.shape_id, - c1.ponto_shape start_pt, - c2.ponto_shape end_pt, - c1.data_versao - FROM - (select * from pts where shape_pt_sequence = 1) c1 - JOIN - (select * from pts where shape_pt_sequence = final_pt_sequence) c2 - ON - c1.shape_id = c2.shape_id and c1.data_versao = c2.data_versao -), -merged as ( --- JOIN SHAPES AND BOUNDARY POINTS - SELECT - s.*, - b.* except(data_versao, shape_id), - round(ST_LENGTH(shape),1) shape_distance, - FROM - shapes s - JOIN - boundary b - ON - s.shape_id = b.shape_id and s.data_versao = b.data_versao -), -ids as ( - SELECT - shape_id, - shape, - shape_distance, - start_pt, - end_pt, - data_versao, - row_number() over( - partition by data_versao, shape_id - ) rn - FROM merged m -) -SELECT - * except(rn), - "{{ var("version") }}" as versao_modelo -FROM ids -WHERE rn = 1 \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql b/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql deleted file mode 100644 index 612bcc41..00000000 --- a/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql +++ /dev/null @@ -1,17 +0,0 @@ --- 1. Cria view das trips consideradas no subsidio -select - trip_id, - -- concat(substr(trip_id, 1, 10), substr(trip_id, 12, 4)) as trip_no_direction, - route_id, - trip_headsign, - case - when REGEXP_EXTRACT(trip_short_name, r'[A-Z]+') is null - then trip_short_name - else concat(REGEXP_EXTRACT(trip_short_name, r'[A-Z]+'), - REGEXP_EXTRACT(trip_short_name, r'[0-9]+')) - end as trip_short_name, - shape_id, - "DU" as variacao_itinerario, - DATE(data_versao) data_versao -from - {{ var("subsidio_trips") }} t \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql deleted file mode 100644 index e7d605a6..00000000 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql +++ /dev/null @@ -1,76 +0,0 @@ --- 1. Sumariza viagens aferidas -with viagem_paga as ( - select - data, - trip_id, - count(id_viagem) as viagens_realizadas - from - `rj-smtr.projeto_subsidio_sppo.viagem_completa` -- {{ ref("viagem_completa") }} -- todo: ref to prod - group by - 1,2 -), -viagem_recurso as ( - select - data, - trip_id, - count(id_viagem) as viagens_realizadas - from - {{ ref("viagem_completa_recurso") }} - group by - 1,2 -), -viagem as ( - select - coalesce(p.data, r.data) as data, - coalesce(p.trip_id, r.trip_id) as trip_id, - (ifnull(p.viagens_realizadas,0) + ifnull(r.viagens_realizadas,0)) as viagens_realizadas - from - viagem_paga p - left join - viagem_recurso r - on - r.trip_id = p.trip_id - and r.data = p.data -), --- 2. Junta informações de viagens planejadas às realizadas -planejado as ( - select distinct - p.*, - ifnull(v.viagens_realizadas, 0) as viagens_realizadas, - ifnull(v.viagens_realizadas, 0) as viagens_subsidio, -- sem limite maximo de viagens - from ( - select - consorcio, - data, - tipo_dia, - trip_id_planejado as trip_id, - servico, - vista, - sentido, - inicio_periodo, - fim_periodo, - case - when sentido = "C" then max(distancia_planejada) - else sum(distancia_planejada) - end as distancia_planejada, - max(distancia_total_planejada) as distancia_total_planejada, -- distancia total do dia (junta ida+volta) - null as viagens_planejadas -- max(viagens) as viagens_planejadas - from - `rj-smtr.projeto_subsidio_sppo.viagem_planejada` -- {{ ref("viagem_planejada") }} # todo: ref to prod - where data <= date_sub(current_date(), interval 1 day) - group by 1,2,3,4,5,6,7,8,9 - ) p - left join - viagem v - on - v.trip_id = p.trip_id - and v.data = p.data -) --- 4. Adiciona informações de distância total -select - * except(distancia_planejada, distancia_total_planejada), - distancia_total_planejada, - round(viagens_subsidio * distancia_planejada, 3) as distancia_total_subsidio, - round(viagens_realizadas * distancia_planejada, 3) as distancia_total_aferida, - '{{ var("version") }}' as versao_modelo -from planejado \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql deleted file mode 100644 index 3589ca7f..00000000 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql +++ /dev/null @@ -1,20 +0,0 @@ -with sumario as ( - SELECT - r.consorcio, - r.data, - r.servico, - s.viagens_subsidio as viagens_subsidio_pre_recurso, - s.perc_distancia_total_subsidio as perc_distancia_total_subsidio_pre_recurso, - s.valor_total_subsidio as valor_total_subsidio_pre_recurso, - r.viagens_subsidio as viagens_subsidio_pos_recurso, - r.perc_distancia_total_subsidio as perc_distancia_total_subsidio_pos_recurso, - r.valor_total_subsidio as valor_total_subsidio_pos_recurso - FROM {{ ref("sumario_subsidio_dia_recurso") }} r - join `rj-smtr.projeto_subsidio_sppo.sumario_subsidio_dia` s -- todo: ref to prod - on r.data = s.data - and r.servico = s.servico -) -select - *, - round(valor_total_subsidio_pos_recurso - valor_total_subsidio_pre_recurso, 2) as valor_total_subsidio_recurso -from sumario \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql deleted file mode 100644 index d50a4b77..00000000 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql +++ /dev/null @@ -1,33 +0,0 @@ -with sumario as ( - SELECT - consorcio, - data, - tipo_dia, - servico, - round(sum(viagens_planejadas), 3) as viagens_planejadas, - round(sum(viagens_subsidio), 3) as viagens_subsidio, - max(distancia_total_planejada) as distancia_total_planejada, -- distancia total do dia (junta ida+volta) - round(sum(distancia_total_subsidio), 3) as distancia_total_subsidio, - FROM {{ ref("sumario_subsidio_dia_periodo_recurso")}} - group by 1,2,3,4 -), -valor as ( - select - s.*, - v.valor_subsidio_por_km, - round(distancia_total_subsidio * v.valor_subsidio_por_km, 2) as valor_total_aferido, - round(100*distancia_total_subsidio/distancia_total_planejada, 2) as perc_distancia_total_subsidio - from - sumario s - left join - `rj-smtr.projeto_subsidio_sppo.subsidio_data_versao_efetiva` v -- {{ ref("subsidio_data_versao_efetiva")}} v - on v.data = s.data -) -select - *, - case - when perc_distancia_total_subsidio < {{ var("perc_distancia_total_subsidio") }} - then 0 - else valor_total_aferido - end as valor_total_subsidio -from valor \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/viagem_completa.sql b/queries/models/projeto_subsidio_sppo/viagem_completa.sql deleted file mode 100644 index 132ce29f..00000000 --- a/queries/models/projeto_subsidio_sppo/viagem_completa.sql +++ /dev/null @@ -1,171 +0,0 @@ -{{ -config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['id_viagem'], - incremental_strategy='insert_overwrite' -) -}} --- 1. Identifica viagens que estão dentro do quadro planejado (por --- enquanto, consideramos o dia todo). -with viagem_periodo as ( - select distinct - p.consorcio, - p.vista, - p.tipo_dia, - v.*, - p.inicio_periodo, - p.fim_periodo, - 0 as tempo_planejado - from ( - select distinct - consorcio, - vista, - data, - tipo_dia, - trip_id_planejado as trip_id, - servico, - inicio_periodo, - fim_periodo - from - {{ ref("viagem_planejada") }} - {% if is_incremental() %} - WHERE - data = date_sub(date("{{ var("run_date") }}"), interval 1 day) - {% endif %} - ) p - inner join ( - select distinct * from {{ ref("viagem_conformidade") }} - {% if is_incremental() %} - WHERE - data = date_sub(date("{{ var("run_date") }}"), interval 1 day) - {% endif %} - ) v - on - v.trip_id = p.trip_id - and v.data = p.data -), --- 2. Seleciona viagens completas de acordo com a conformidade -viagem_comp_conf as ( -select distinct - consorcio, - data, - tipo_dia, - id_empresa, - id_veiculo, - id_viagem, - servico_informado, - servico_realizado, - vista, - trip_id, - shape_id, - sentido, - datetime_partida, - datetime_chegada, - inicio_periodo, - fim_periodo, - case - when servico_realizado = servico_informado - then "Completa linha correta" - else "Completa linha incorreta" - end as tipo_viagem, - tempo_viagem, - tempo_planejado, - distancia_planejada, - distancia_aferida, - n_registros_shape, - n_registros_total, - n_registros_minuto, - perc_conformidade_shape, - perc_conformidade_distancia, - perc_conformidade_registros, - 0 as perc_conformidade_tempo, - -- round(100 * tempo_viagem/tempo_planejado, 2) as perc_conformidade_tempo, - '{{ var("version") }}' as versao_modelo -from - viagem_periodo v -where ( - perc_conformidade_shape >= {{ var("perc_conformidade_shape_min") }} -) -and ( - perc_conformidade_distancia >= {{ var("perc_conformidade_distancia_min") }} -) -and ( - perc_conformidade_registros >= {{ var("perc_conformidade_registros_min") }} -) -{% if var("run_date") == "2023-01-01" %} --- Reveillon (2022-12-31) -and - ( - -- 1. Viagens pre fechamento das vias - (fim_periodo = "22:00:00" and datetime_chegada <= "2022-12-31 22:05:00") - or - (fim_periodo = "18:00:00" and datetime_chegada <= "2022-12-31 18:05:00") -- 18h as 5h - or - -- 2. Viagens durante fechamento das vias - (inicio_periodo = "22:00:00" and datetime_partida >= "2022-12-31 21:55:00") -- 22h as 5h/10h - or - (inicio_periodo = "18:00:00" and datetime_partida >= "2022-12-31 17:55:00") -- 18h as 5h - or - -- 3. Viagens que nao sao afetadas pelo fechamento das vias - (inicio_periodo = "00:00:00" and fim_periodo = "23:59:59") - ) --- Feriado do Dia da Fraternidade Universal (2023-01-01) -{% elif var("run_date") == "2023-01-02" %} -and - ( - -- 1. Viagens durante fechamento das vias - (fim_periodo = "05:00:00" and datetime_partida <= "2023-01-01 05:05:00") - or - (fim_periodo = "10:00:00" and datetime_partida <= "2023-01-01 10:05:00") - or - -- 2. Viagens pos abertura das vias - (inicio_periodo = "05:00:00" and datetime_partida >= "2023-01-01 04:55:00") - or - (inicio_periodo = "10:00:00" and datetime_partida >= "2023-01-01 09:55:00") - or - -- 3. Viagens que nao sao afetadas pelo fechamento das vias - (inicio_periodo = "00:00:00" and fim_periodo = "23:59:59") - ) -{% endif %} -), --- 3. Filtra viagens com mesma chegada e partida pelo maior % de conformidade do shape -filtro_desvio as ( - SELECT - * EXCEPT(rn) -FROM ( - SELECT - *, - ROW_NUMBER() OVER(PARTITION BY id_veiculo, datetime_partida, datetime_chegada ORDER BY perc_conformidade_shape DESC) AS rn - FROM - viagem_comp_conf ) -WHERE - rn = 1 -), --- 4. Filtra viagens com partida ou chegada diferentes pela maior distancia percorrida -filtro_partida AS ( - SELECT - * EXCEPT(rn) - FROM ( - SELECT - *, - ROW_NUMBER() OVER(PARTITION BY id_veiculo, datetime_partida ORDER BY distancia_planejada DESC) AS rn - FROM - filtro_desvio ) - WHERE - rn = 1 ) --- filtro_chegada -SELECT - * EXCEPT(rn) -FROM ( - SELECT - *, - ROW_NUMBER() OVER(PARTITION BY id_veiculo, datetime_chegada ORDER BY distancia_planejada DESC) AS rn - FROM - filtro_partida ) -WHERE - rn = 1 diff --git a/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql b/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql deleted file mode 100644 index ff1e322f..00000000 --- a/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql +++ /dev/null @@ -1,111 +0,0 @@ -{{ -config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key="data", - incremental_strategy = 'insert_overwrite' -) -}} - -with recursos_viagem as ( - select distinct * - from {{ ref('viagem_conformidade_recurso') }} - {% if is_incremental() %} - where data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {% endif %} -), -viagem_planejada as ( - select distinct - consorcio, - vista, - data, - tipo_dia, - trip_id_planejado as trip_id, - servico - from - `rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` -- todo: ref to prod - {% if is_incremental() %} - where data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {% endif %} -), --- 1. Identifica viagens que estão dentro do quadro planejado (por --- enquanto, consideramos o dia todo). -viagem_periodo as ( - select distinct - p.consorcio, - p.vista, - p.tipo_dia, - v.*, - time("2022-06-01 00:00:00") as inicio_periodo, - time("2022-06-01 23:59:59") as fim_periodo, - 0 as tempo_planejado - from viagem_planejada p - inner join recursos_viagem v - on - v.trip_id = p.trip_id - and v.data = p.data - -- where ( - -- ( -- 05:00:00 as 23:00:00 - -- inicio_periodo < time_sub(fim_periodo, interval p.intervalo minute) - -- and extract (time from datetime_partida) >= inicio_periodo - -- and extract (time from datetime_partida) < time_sub(fim_periodo, interval p.intervalo minute) - -- ) or - -- ( -- 23:00:00 as 5:00:00 - -- inicio_periodo > time_sub(fim_periodo, interval intervalo minute) - -- and ((extract (time from datetime_partida) >= inicio_periodo) -- até 00h - -- or (extract (time from datetime_partida) < time_sub(fim_periodo, interval p.intervalo minute)) -- apos 00h - -- ) - -- ) - -- ) -) -select distinct - protocolo, - consorcio, - data, - tipo_dia, - id_empresa, - id_veiculo, - id_viagem, - servico_informado, - servico_realizado, - vista, - trip_id, - shape_id, - sentido, - datetime_partida, - datetime_chegada, - inicio_periodo, - fim_periodo, - case - when servico_realizado = servico_informado - then "Completa linha correta" - else "Completa linha incorreta" - end as tipo_viagem, - tempo_viagem, - tempo_planejado, - distancia_planejada, - distancia_aferida, - n_registros_shape, - n_registros_total, - n_registros_minuto, - perc_conformidade_shape, - perc_conformidade_distancia, - perc_conformidade_registros, - 0 as perc_conformidade_tempo, - -- round(100 * tempo_viagem/tempo_planejado, 2) as perc_conformidade_tempo, - '{{ var("version") }}' as versao_modelo -from - viagem_periodo v -where ( - perc_conformidade_shape >= {{ var("perc_conformidade_shape_min") }} -) -and ( - perc_conformidade_distancia > {{ var("perc_conformidade_distancia_recurso_min") }} -) -and ( - perc_conformidade_registros >= {{ var("perc_conformidade_registros_min") }} -) \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql b/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql deleted file mode 100644 index 6ba6ea61..00000000 --- a/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql +++ /dev/null @@ -1,74 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['id_viagem'], - incremental_strategy='insert_overwrite' -) -}} - --- 1. Agrega informações de viagens circulares: ajusta --- datetime_chegada, calcula tempo total de --- viagem e distancia total planejada. Mantem o shape planejado ("C") --- como padrão da viagem. -with viagem as ( - select - *, - datetime_diff(datetime_chegada, datetime_partida, minute) + 1 as tempo_viagem - from ( - select - * - from ( - select - * except(sentido_shape, distancia_inicio_fim, shape_id, shape_id_planejado, trip_id, trip_id_planejado, datetime_chegada), - datetime_chegada, - trip_id_planejado as trip_id, - shape_id_planejado as shape_id - from - {{ ref("aux_viagem_circular") }} v - where - sentido = "I" or sentido = "V" - ) - union all ( - select - * except(sentido_shape, distancia_inicio_fim, shape_id, shape_id_planejado, trip_id, trip_id_planejado), - trip_id_planejado as trip_id, - shape_id_planejado as shape_id, - from - (select - v.* except(datetime_chegada), - lead(datetime_chegada) over ( - partition by id_viagem order by sentido_shape) - as datetime_chegada, - -- TODO: mudar se tiver distancia planejada separada - -- por shape (ida/volta) - -- distancia_planejada, - -- round(distancia_planejada + lead(distancia_planejada) over ( - -- partition by id_viagem order by sentido_shape), 3) - -- as distancia_planejada, - from - {{ ref("aux_viagem_circular") }} v - where - sentido = "C" - ) c - where sentido_shape = "I" - ) - ) -) --- 2. Calcula os percentuais de conformidade da distancia, trajeto e GPS -select distinct - v.* except(versao_modelo), - d.* except(id_viagem, versao_modelo), - round(100 * n_registros_shape/n_registros_total, 2) as perc_conformidade_shape, - round(100 * d.distancia_aferida/v.distancia_planejada, 2) as perc_conformidade_distancia, - round(100 * n_registros_minuto/tempo_viagem, 2) as perc_conformidade_registros, - '{{ var("version") }}' as versao_modelo -from - viagem v -inner join - {{ ref("aux_viagem_registros") }} d -on - v.id_viagem = d.id_viagem \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql b/queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql deleted file mode 100644 index a6e2a6a5..00000000 --- a/queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql +++ /dev/null @@ -1,250 +0,0 @@ -{{ -config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key="data", - incremental_strategy = 'insert_overwrite' -) -}} - --- ==> aux_registros_status_trajeto = aux_registros_status_viagem -with recursos as ( - select * - FROM {{ ref("aux_recurso_viagem_paga") }} - where id_julgamento is null - {# {% if is_incremental() -%} #} - and data_viagem between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {# {% endif -%} #} -), -gps_viagem as ( - SELECT - r.protocolo, - r.data_viagem as data, - g.id_veiculo, - substr(g.id_veiculo, 2, 3) as id_empresa, - r.datetime_partida, # Partida informada no recurso - r.datetime_chegada, # Chegada informada no recurso - r.sentido, -- Sentido informado no recurso - datetime_diff(r.datetime_chegada, r.datetime_partida, minute) + 1 as tempo_viagem, # Tempo da viagem com base no recurso - g.timestamp_gps, - timestamp_trunc(timestamp_gps, minute) as timestamp_minuto_gps, - ST_GEOGPOINT(longitude, latitude) posicao_veiculo_geo, - TRIM(r.servico, " ") as servico_realizado, -- Servico informado no recurso - TRIM(g.servico, " ") as servico_informado, -- Servico informado no GPS - g.distancia, - from recursos r - left join ( - select - id_veiculo, - longitude, - latitude, - servico, - timestamp_gps, - timestamp_trunc(timestamp_gps, minute) as timestamp_minuto_gps, - distancia - from `rj-smtr.br_rj_riodejaneiro_veiculos.gps_sppo` -- TODO: ref in prod - where status != "Parado garagem" - {# {% if is_incremental() -%} #} - and data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - and timestamp_gps between '{{ var("recurso_viagem_start")}}' and datetime_add('{{ var("recurso_viagem_end")}}', interval 3 hour) - {# {% endif -%} #} - ) g - on - r.id_veiculo = substr(g.id_veiculo, 2) - and cast(g.timestamp_gps as datetime) between datetime_partida and datetime_chegada - where g.servico is not null -), -registros_status_viagem as ( - select - concat(g.id_veiculo, "-", g.servico_realizado,"-", g.sentido, "-", FORMAT_DATETIME("%Y%m%d%H%M%S", g.datetime_partida)) as id_viagem, - g.* except(distancia), - s.shape_id, - s.sentido_shape, - s.shape_id_planejado, - s.trip_id, - s.trip_id_planejado, - s.start_pt, - s.end_pt, - s.distancia_planejada, - ifnull(g.distancia,0) as distancia, - case - when ST_DWITHIN(g.posicao_veiculo_geo, start_pt, 500) - then 'start' - when ST_DWITHIN(g.posicao_veiculo_geo, end_pt, 500) - then 'end' - when ST_DWITHIN(g.posicao_veiculo_geo, shape, 500) - then 'middle' - else 'out' - end status_viagem, - '{{ var("version") }}' as versao_modelo - from - gps_viagem g - inner join ( - select - * - from ( - select - * except(trip_id, shape_id, shape, distancia_planejada), - trip_id, shape_id, shape, distancia_planejada - from - `rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` - where sentido != "C" - {# {% if is_incremental() -%} #} - and data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {# {% endif -%} #} - ) - union all ( - select - * except(shape, shape_volta, distancia_planejada, distancia_planejada_volta), - st_geogfromtext( - concat( - "LINESTRING(", - replace(TRIM(ST_ASTEXT(ST_UNION(shape, shape_volta)), "MULTILINESTRING()"), "), (", ","), - ")" - ) - ) as shape, - distancia_planejada + distancia_planejada_volta as distancia_planejada - from ( - select - * except(trip_id, shape_id), - concat(SUBSTR(trip_id, 1, 10), sentido, SUBSTR(trip_id, 12, length(trip_id))) as trip_id, - concat(SUBSTR(shape_id, 1, 10), sentido, SUBSTR(shape_id, 12, length(shape_id))) as shape_id, - lead(shape) over (partition by data, servico order by sentido_shape) as shape_volta, - lead(distancia_planejada) over (partition by data, servico order by sentido_shape) as distancia_planejada_volta - from - `rj-smtr`.`projeto_subsidio_sppo`.`viagem_planejada` - where sentido = "C" - {# {% if is_incremental() -%} #} - and data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') - {# {% endif -%} #} - ) - where sentido_shape = "I" - ) - ) s - on - g.data = s.data - and g.servico_realizado = s.servico - and g.sentido = s.sentido -), --- ==> aux_viagem_registros --- 1. Calcula a distância total percorrida por viagem, separada por --- shape. Adiciona distância do 1o/último sinal de gps ao início/final do --- shape. Isso é necessário pois o 1o/ultimo sinal é contabilizado --- apenas quando o veiculo sai/chega dentro do raio de 500m ao redor --- do ponto inicial/final. Contabiliza também o número de registros --- em cada tapa da viagem (inicio, meio, fim, fora), total de --- registros de gps e total de minutos da viagem com registros de gps. -distancia as ( - select - *, - n_registros_middle + n_registros_start + n_registros_end as n_registros_shape - from ( - select distinct - id_viagem, -- C // I - trip_id, -- I/V // I/V - sentido, - sentido_shape, - distancia_planejada, - 0 as distancia_inicio_fim, - round(sum(distancia)/1000, 3) as distancia_aferida, - sum(case when status_viagem = "middle" then 1 else 0 end) as n_registros_middle, - sum(case when status_viagem = "start" then 1 else 0 end) as n_registros_start, - sum(case when status_viagem = "end" then 1 else 0 end) as n_registros_end, - sum(case when status_viagem = "out" then 1 else 0 end) as n_registros_out, - count(timestamp_gps) as n_registros_total, - count(distinct timestamp_minuto_gps) as n_registros_minuto - from ( - select distinct * except(posicao_veiculo_geo, start_pt, end_pt) - from registros_status_viagem - -- where - -- data between date_sub(date("{{ var("run_date") }}"), interval 1 day) and date("{{ var("run_date") }}") - ) - group by 1,2,3,4,5 - ) -), --- 2. Calcula distancia total por viagem - junta distancias corrigidas --- de ida e volta de viagens circulares. -aux_viagem_registros as ( - select * - from ( - select - id_viagem, - sum(distancia_planejada) as distancia_planejada, - sum(distancia_aferida) as distancia_aferida, - sum(distancia_inicio_fim) as distancia_inicio_fim, - sum(n_registros_middle) as n_registros_middle, - sum(n_registros_start) as n_registros_start, - sum(n_registros_end) as n_registros_end, - sum(n_registros_out) as n_registros_out, - sum(n_registros_total) as n_registros_total, - sum(n_registros_minuto) as n_registros_minuto, - sum(n_registros_shape) as n_registros_shape, - '{{ var("version") }}' as versao_modelo - from - distancia - where sentido = "C" - group by 1 - ) - union all ( - select - id_viagem, - distancia_planejada, - distancia_aferida, - distancia_inicio_fim, - n_registros_middle, - n_registros_start, - n_registros_end, - n_registros_out, - n_registros_total, - n_registros_minuto, - n_registros_shape, - '{{ var("version") }}' as versao_modelo - from - distancia - where sentido = sentido_shape - ) -), --- (Adicional) Junta diferentes serviços informados por GPS ao longo viagem numa única string -servicos_gps_viagem as ( - select - protocolo, - id_viagem, - STRING_AGG(distinct servico_informado, ', ') as servico_informado - from registros_status_viagem - group by 1,2 -) --- => aux_viagem_conformidade: --- 2. Calcula os percentuais de conformidade da distancia, trajeto e GPS -select distinct - s.protocolo, - v.id_viagem, - v.data, - v.id_empresa, - v.id_veiculo, - s.servico_informado, - v.servico_realizado, - d.distancia_planejada, - v.sentido, - v.datetime_partida, - v.datetime_chegada, - v.trip_id, - v.shape_id, - v.tempo_viagem, - d.* except(id_viagem, distancia_planejada, versao_modelo), - round(100 * n_registros_shape/n_registros_total, 2) as perc_conformidade_shape, - round(100 * d.distancia_aferida/d.distancia_planejada, 2) as perc_conformidade_distancia, - round(100 * n_registros_minuto/tempo_viagem, 2) as perc_conformidade_registros, - '{{ var("version") }}' as versao_modelo -from - registros_status_viagem v -inner join - aux_viagem_registros d -on - v.id_viagem = d.id_viagem -inner join servicos_gps_viagem s -on - v.id_viagem = s.id_viagem \ No newline at end of file diff --git a/queries/models/projeto_subsidio_sppo/viagem_planejada.sql b/queries/models/projeto_subsidio_sppo/viagem_planejada.sql deleted file mode 100644 index 9ff6f984..00000000 --- a/queries/models/projeto_subsidio_sppo/viagem_planejada.sql +++ /dev/null @@ -1,159 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['data', 'trip_id'], - incremental_strategy='insert_overwrite' -) -}} - --- 1. Define datas do período planejado -with data_efetiva as ( - select - data, - tipo_dia, - data_versao_shapes, - data_versao_trips, - data_versao_frequencies - from {{ ref("subsidio_data_versao_efetiva") }} - where data between date_sub("{{ var("run_date") }}", interval 1 day) and date("{{ var("run_date") }}") -), --- 2. Puxa dados de distancia quadro no quadro horário -quadro as ( - select - e.data, - e.tipo_dia, - p.* except(tipo_dia, data_versao, horario_inicio, horario_fim), - horario_inicio as inicio_periodo, - horario_fim as fim_periodo - from - data_efetiva e - inner join ( - select * - from {{ ref("subsidio_quadro_horario") }} - {% if is_incremental() %} - where - data_versao in (select data_versao_frequencies from data_efetiva) - {% endif %} - ) p - on - e.data_versao_frequencies = p.data_versao - and - e.tipo_dia = p.tipo_dia -), --- 3. Trata informação de trips: adiciona ao sentido da trip o sentido --- planejado (os shapes/trips circulares são separados em --- ida/volta no sigmob) -trips as ( - select - e.data, - t.* - from ( - select * - from {{ ref('subsidio_trips_desaninhada') }} - {% if is_incremental() %} - where - data_versao in (select data_versao_trips from data_efetiva) - {% endif %} - ) t - inner join - data_efetiva e - on - t.data_versao = e.data_versao_trips -), -quadro_trips as ( - select - * - from ( - select distinct - * except(trip_id), - trip_id as trip_id_planejado, - trip_id - from - quadro - where sentido = "I" or sentido = "V" - ) - union all ( - select - * except(trip_id), - trip_id as trip_id_planejado, - concat(trip_id, "_0") as trip_id, - from - quadro - where sentido = "C" - ) - union all ( - select - * except(trip_id), - trip_id as trip_id_planejado, - concat(trip_id, "_1") as trip_id, - from - quadro - where sentido = "C" - ) -), -quadro_tratada as ( - select - q.*, - t.shape_id as shape_id_planejado, - case - when sentido = "C" - then shape_id || "_" || split(q.trip_id, "_")[offset(1)] - else shape_id - end as shape_id, -- TODO: adicionar no sigmob - from - quadro_trips q - left join - trips t - on - t.data = q.data - and - t.trip_id = q.trip_id_planejado -), --- 4. Trata informações de shapes: junta trips e shapes para resgatar o sentido --- planejado (os shapes/trips circulares são separados em --- ida/volta no sigmob) -shapes as ( - select - e.data, - data_versao as data_shape, - shape_id, - shape, - start_pt, - end_pt - from - data_efetiva e - inner join ( - select * - from {{ ref('subsidio_shapes_geom') }} - {% if is_incremental() %} - where - data_versao in (select data_versao_shapes from data_efetiva) - {% endif %} - ) s - on - s.data_versao = e.data_versao_shapes -) --- 5. Junta shapes e trips aos servicos planejados no quadro horário -select - p.*, - s.data_shape, - s.shape, - case - when p.sentido = "C" and split(p.shape_id, "_")[offset(1)] = "0" then "I" - when p.sentido = "C" and split(p.shape_id, "_")[offset(1)] = "1" then "V" - when p.sentido = "I" or p.sentido = "V" then p.sentido - end as sentido_shape, - s.start_pt, - s.end_pt -from - quadro_tratada p -inner join - shapes s -on - p.shape_id = s.shape_id -and - p.data = s.data \ No newline at end of file diff --git a/queries/models/veiculo/README.md b/queries/models/veiculo/README.md deleted file mode 100644 index 80e149af..00000000 --- a/queries/models/veiculo/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Veículo -* Versão: 2.0.0 -* Data de início: 16/01/2023 - -![veiculo](https://user-images.githubusercontent.com/66736583/227351937-7fe4113b-1d94-425d-a170-7e49ed40d66e.png) - -
- - ## Método - - ### 1. Captura de Dados - Diariamente são obtidos os [dados de infrações](https://www.data.rio/documents/multas-aplicadas-aos-modos-de-transporte-nos-últimos-cinco-anos) e [dados cadastrais dos veículos](https://www.data.rio/documents/dados-cadastrais-dos-veículos-que-operam-o-sistema-de-ônibus-brt-e-sppo) que operam o sistema de ônibus BRT e o Serviço Público de Transporte de Passageiros por Meio de Ônibus do Município do Rio de Janeiro (SPPO). Esses dados podem ser obtidos diretamente do site da Prefeitura da Cidade do Rio de Janeiro (PCRJ), que disponibiliza essas informações publicamente através do portal DATA.Rio. - - Após a captura, é realizado um processo de limpeza, validação e materialização desses dados no datalake da Secretaria Municipal de Transportes (SMTR) nas tabelas `veiculo.sppo_licenciamento_stu` e `veiculo.sppo_infracao`. - - Os dados da tabela `veiculo.sppo_licenciamento_stu` tem como origem o Sistema de Transportes Urbanos (STU) da PCRJ/SMTR. Como há um interstício de tempo entre a solitação das empresas operadoras e a efetiva inclusão no STU, esses pedidos são considerados temporariamente na tabela `veiculo.sppo_licenciamento_solicitacao`. - - Para considerar tanto as informações da tabela `veiculo.sppo_licenciamento_stu` quanto da `veiculo.sppo_licenciamento_solicitacao`, essas duas tabelas são aglutinadas, gerando a `veiculo.sppo_licenciamento`. - - ### 2. Classificação Diária dos Veículos - Na sequência, são considerados todos os veículos identificados na operação (através da tabela `br_rj_riodejaneiro_veiculos.gps_sppo`) e, considerando tanto os dados da tabela `veiculo.sppo_infracao` quanto da tabela `veiculo.sppo_licenciamento`, é gerada a tabela `veiculo.sppo_veiculo_dia`. - - Nesta tabela, há uma relação diária de operação do veículo e seu respectivo status para aquela data, a saber: - - * `Não licenciado`: caso o veículo não seja identificado na tabela `veiculo.sppo_licenciamento`; - * `Autuado por ar inoperante`: caso o veículo tenha sido autuado por inoperância ou mau funcionamento do sistema de ar condicionado (código de autuação: 023.II) - * `Autuado por segurança`: caso o veículo tenha sido autuado por infração relacionada à segurança do veículo - * `Autuado por limpeza/equipamento`: caso o veículo tenha sido autuado cumulativamente por infrações relacionadas à limpeza e equipamentos do veículo; - * `Sem ar e não autuado`: caso o veículo não tenha sido licenciado com ar condicionado e não tenha sido autuado; - * `Com ar e não autuado`: caso o veículo tenha sido licenciado com ar condicionado e não tenha sido autuado. -
diff --git a/queries/models/veiculo/schema.yml b/queries/models/veiculo/schema.yml deleted file mode 100644 index b8663f30..00000000 --- a/queries/models/veiculo/schema.yml +++ /dev/null @@ -1,231 +0,0 @@ -version: 2 - -models: - - name: sppo_infracao - description: "Tabela histórica de todas as multas aplicadas aos modos de transporte no município do Rio de Janeiro, com qualquer situação. - Dados capturados diariamente de: https://www.data.rio/documents/multas-aplicadas-aos-modos-de-transporte-nos-%C3%BAltimos-cinco-anos" - columns: - - name: DATA - description: "Data da captura (partição)" - - name: timestamp_captura - description: "Timestamp de captura dos dados de infração" - - name: modo - description: "ÔNIBUS – nesse arquivo só constam os ônibus" - - name: permissao - description: "Número da permissão do ônibus" - - name: placa - description: "Placa do veículo" - - name: id_auto_infracao - description: "Identificador do auto de infração da multa aplicada" - - name: data_infracao - description: "Data da infração" - - name: valor - description: "Valor devido (R$)" - - name: id_infracao - description: "Código da infração" - - name: infracao - description: "Descrição da infração" - - name: status - description: "CADASTRADA - Registrada no sistema sem guia de pagamento\n - EM ABERTO - Com guia de pagamento e dentro do prazo de vencimento\n - VENCIDA - Com guia de pagamento e fora do prazo de vencimento\n - EM RECURSO - Possui Processo de Recurso aguardando julgamento\n - PAGA - Com guia de pagamento efetivamente paga\n - CANCELADA - Multa foi cancelada através de um Processo de Recurso" - - name: data_pagamento - description: "Data de pagamento" - - name: sppo_licenciamento - description: "Tabela histórica de dados cadastrais dos veículos que operam o sistema de ônibus (BRT e SPPO), - considerando tanto os licenciados no Sistema de Transporte Urbano (STU) quanto as solicitações - válidas em andamento para ingresso no sistema" - columns: - - name: data - description: "Data da captura (partição)" - - name: modo - description: "ÔNIBUS – nesse arquivo só constam os ônibus" - - name: id_veiculo - description: "Número de ordem do veículo, identificação que é exibida na lateral do ônibus" - - name: ano_fabricacao - description: "Ano de fabricação do veículo" - - name: carroceria - description: "Descrição do modelo da carroceria" - - name: data_ultima_vistoria - description: "Data da última vistoria do veículo" - - name: id_carroceria - description: "Código do modelo da carroceria" - - name: id_chassi - description: "Código do modelo do chassi" - - name: id_fabricante_chassi - description: "Identificador do fabricante do chassi" - - name: id_interno_carroceria - description: "Código interno do modelo de carroceria" - - name: id_planta - description: "Código da planta do veículo" - - name: indicador_ar_condicionado - description: "Indicador se possui ar condicionado (Verdadeiro/Falso)" - - name: indicador_elevador - description: "Indicador se possui elevador (Verdadeiro/Falso)" - - name: indicador_usb - description: "Indicador se tem USB (Verdadeiro/Falso)" - - name: indicador_wifi - description: "Indicador se tem Wi-fi (Verdadeiro/Falso)" - - name: nome_chassi - description: "Descrição do modelo do chassi" - - name: permissao - description: "Número da permissão do ônibus" - - name: placa - description: "Placa do veículo" - - name: quantidade_lotacao_pe - description: "Quantidade de passageiros em pé" - - name: quantidade_lotacao_sentado - description: "Quantidade de passageiros sentados" - - name: tipo_combustivel - description: "Combustível utilizado" - - name: tipo_veiculo - description: "Tipo de veículo" - - name: status - description: "Licenciado - Veículo licenciado no Sistema de Transporte Urbano (STU)\n - Válido - Veículo com solicitação válida para ingresso no Sistema de Transporte Urbano (STU)" - - name: sppo_licenciamento_solicitacao - description: "Tabela histórica de dados cadastrais das solicitações em andamento para ingresso no Sistema de Transporte Urbano (STU)" - columns: - - name: data - description: "Data da captura (partição)" - - name: timestamp_captura - description: "Timestamp de captura dos dados de licenciamento" - - name: modo - description: "ÔNIBUS – nesse arquivo só constam os ônibus" - - name: id_veiculo - description: "Número de ordem do veículo, identificação que é exibida na lateral do ônibus" - - name: ano_fabricacao - description: "Ano de fabricação do veículo" - - name: carroceria - description: "Descrição do modelo da carroceria" - - name: data_ultima_vistoria - description: "Data da última vistoria do veículo" - - name: id_carroceria - description: "Código do modelo da carroceria" - - name: id_chassi - description: "Código do modelo do chassi" - - name: id_fabricante_chassi - description: "Identificador do fabricante do chassi" - - name: id_interno_carroceria - description: "Código interno do modelo de carroceria" - - name: id_planta - description: "Código da planta do veículo" - - name: indicador_ar_condicionado - description: "Indicador se possui ar condicionado (Verdadeiro/Falso)" - - name: indicador_elevador - description: "Indicador se possui elevador (Verdadeiro/Falso)" - - name: indicador_usb - description: "Indicador se tem USB (Verdadeiro/Falso)" - - name: indicador_wifi - description: "Indicador se tem Wi-fi (Verdadeiro/Falso)" - - name: nome_chassi - description: "Descrição do modelo do chassi" - - name: permissao - description: "Número da permissão do ônibus" - - name: placa - description: "Placa do veículo" - - name: quantidade_lotacao_pe - description: "Quantidade de passageiros em pé" - - name: quantidade_lotacao_sentado - description: "Quantidade de passageiros sentados" - - name: tipo_combustivel - description: "Combustível utilizado" - - name: tipo_veiculo - description: "Tipo de veículo" - - name: status - description: "Inválido - Veículo com solicitação inválida para ingresso no Sistema de Transporte Urbano (STU)\n - Válido - Veículo com solicitação válida para ingresso no Sistema de Transporte Urbano (STU)" - - name: solicitacao - description: "Inclusão - Solicitação de ingresso de veículo no Sistema de Transporte Urbano (STU)\n - Baixa - Solicitação de baixa de veículo já incluído no Sistema de Transporte Urbano (STU)\n - Renumeração - Solicitação de alteração de número de ordem de veículo já incluído no Sistema de Transporte Urbano (STU)" - - name: sppo_licenciamento_stu - description: "Tabela histórica de Dados cadastrais dos veículos que operam o sistema de ônibus (BRT e SPPO) no município do Rio de Janeiro.\n - Dados capturados diariamente de: https://www.data.rio/documents/c6c97d3c15434b5088965e25f85e27c3" - columns: - - name: data - description: "Data da captura (partição)" - - name: timestamp_captura - description: "Timestamp de captura dos dados de licenciamento" - - name: modo - description: "ÔNIBUS – nesse arquivo só constam os ônibus" - - name: id_veiculo - description: "Número de ordem do veículo, identificação que é exibida na lateral do ônibus" - - name: ano_fabricacao - description: "Ano de fabricação do veículo" - - name: carroceria - description: "Descrição do modelo da carroceria" - - name: data_ultima_vistoria - description: "Data da última vistoria do veículo" - - name: id_carroceria - description: "Código do modelo da carroceria" - - name: id_chassi - description: "Código do modelo do chassi" - - name: id_fabricante_chassi - description: "Identificador do fabricante do chassi" - - name: id_interno_carroceria - description: "Código interno do modelo de carroceria" - - name: id_planta - description: "Código da planta do veículo" - - name: indicador_ar_condicionado - description: "Indicador se possui ar condicionado (Verdadeiro/Falso)" - - name: indicador_elevador - description: "Indicador se possui elevador (Verdadeiro/Falso)" - - name: indicador_usb - description: "Indicador se tem USB (Verdadeiro/Falso)" - - name: indicador_wifi - description: "Indicador se tem Wi-fi (Verdadeiro/Falso)" - - name: nome_chassi - description: "Descrição do modelo do chassi" - - name: permissao - description: "Número da permissão do ônibus" - - name: placa - description: "Placa do veículo" - - name: quantidade_lotacao_pe - description: "Quantidade de passageiros em pé" - - name: quantidade_lotacao_sentado - description: "Quantidade de passageiros sentados" - - name: tipo_combustivel - description: "Combustível utilizado" - - name: tipo_veiculo - description: "Tipo de veículo" - - name: status - description: "Licenciado - Veículo licenciado no Sistema de Transporte Urbano (STU)" - - name: sppo_veiculo_dia - description: "Tabela resumo dos veículos que operaram no SPPO e seus respectivos indicadores" - columns: - - name: data - description: "Data de operação" - - name: id_veiculo - description: "Número de ordem do veículo, identificação que é exibida na lateral do ônibus" - - name: indicadores - description: "Indicadores para caraterização do status do veículo" - - name: indicadores.indicador_licenciado - description: "Indicador se o veículo encontra-se licenciado" - - name: indicadores.indicador_ar_condicionado - description: "Indicador se o veículo foi licenciado com ar condicionado" - - name: indicadores.indicador_autuacao_ar_condicionado - description: "Indicador se o veículo foi autuado por inoperância ou mau funcionamento do sistema de ar condicionado" - - name: indicadores.indicador_autuacao_seguranca - description: "Indicador se o veículo foi autuado por infração relacionada à segurança do veículo" - - name: indicadores.indicador_autuacao_limpeza - description: "Indicador se o veículo foi autuado por infração relacionada à limpeza do veículo" - - name: indicadores.indicador_autuacao_equipamento - description: "Indicador se o veículo foi autuado por infração relacionada à inoperância ou mau funcionamento de equipamentos do veículo" - - name: indicadores.indicador_sensor_temperatura - description: "Indicador se o sensor de temperatura do veículo não estava em funcionamento conforme especificação da SMTR" - - name: indicadores.indicador_validador_sbd - description: "Indicador se o veículo se encontra com o novo validador do Sistema de Bilhetagem Digital (SBD) instalado" - - name: status - description: "Classificação, observados os demais parâmetros - Categorias:\n - - Não licenciado - Veículo que operou, mas não é licenciado\n - - Autuado por ar inoperante - Veículo que operou, foi licenciado com ar condicionado e foi autuado por inoperância ou mau funcionamento do sistema de ar condicionado (023.II)\n - - Autuado por segurança - Veículo que operou, foi licenciado, mas foi autuado por infração relacionada à segurança do veículo\n - - Autuado por limpeza/equipamento - Veículo que operou, foi licenciado, mas foi autuado cumulativamente por infrações relacionadas à limpeza e equipamentos do veículo\n - - Sem ar e não autuado - Veículo que operou, foi licenciado sem ar condicionado e não foi autuado\n - - Com ar e não autuado - Veículo que operou, foi licenciado com ar condicionado e não foi autuado" - - name: versao - description: "SHA do repositório no Github" \ No newline at end of file diff --git a/queries/models/veiculo/sppo_infracao.sql b/queries/models/veiculo/sppo_infracao.sql deleted file mode 100644 index eb8c193f..00000000 --- a/queries/models/veiculo/sppo_infracao.sql +++ /dev/null @@ -1,43 +0,0 @@ - - {{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['data', 'id_auto_infracao'], - incremental_strategy='insert_overwrite' -) -}} -WITH - infracao AS ( - SELECT - SAFE_CAST(DATA AS DATE) data, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, - SAFE_CAST(JSON_VALUE(content,'$.modo') AS STRING) modo, - SAFE_CAST(JSON_VALUE(content,'$.permissao') AS STRING) permissao, - SAFE_CAST(placa AS STRING) placa, - SAFE_CAST(id_auto_infracao AS STRING) id_auto_infracao, - PARSE_DATE("%d/%m/%Y", SAFE_CAST(JSON_VALUE(content,'$.data_infracao') AS STRING)) data_infracao, - SAFE_CAST(JSON_VALUE(content,'$.valor') AS FLOAT64) valor, - SAFE_CAST(JSON_VALUE(content,'$.id_infracao') AS STRING) id_infracao, - SAFE_CAST(JSON_VALUE(content,'$.infracao') AS STRING) infracao, - SAFE_CAST(JSON_VALUE(content,'$.status') AS STRING) status, - IF(JSON_VALUE(content,'$.data_pagamento') = "", NULL, PARSE_DATE("%d/%m/%Y", JSON_VALUE(content,'$.data_pagamento'))) data_pagamento - FROM - {{ var('sppo_infracao_staging') }} as t - ), - infracao_rn AS ( - SELECT - *, - ROW_NUMBER() OVER (PARTITION BY data, id_auto_infracao) rn - FROM - infracao - ) -SELECT - * EXCEPT(rn) -FROM - infracao_rn -WHERE - rn = 1 \ No newline at end of file diff --git a/queries/models/veiculo/sppo_licenciamento.sql b/queries/models/veiculo/sppo_licenciamento.sql deleted file mode 100644 index 13da166c..00000000 --- a/queries/models/veiculo/sppo_licenciamento.sql +++ /dev/null @@ -1,42 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "id_veiculo"], - incremental_strategy="insert_overwrite", - ) -}} - -with - -- Tabela de licenciamento - stu as ( - select - * - from - {{ ref("sppo_licenciamento_stu") }} as t - where - {% if var("stu_data_versao") != "" %} - data = date("{{ var('stu_data_versao') }}") - {% else %} - {% if execute %} - {% set licenciamento_date = run_query("SELECT MIN(data) FROM " ~ ref("sppo_licenciamento_stu") ~ " WHERE data >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 5 DAY)").columns[0].values()[0] %} - {% endif %} - - data = DATE("{{ licenciamento_date }}") - {% endif %} - and tipo_veiculo not like "%ROD%" - ), - stu_rn AS ( - select - * except (timestamp_captura), - ROW_NUMBER() OVER (PARTITION BY data, id_veiculo) rn - from - stu - ) -select - * except(rn) -from - stu_rn -where - rn = 1 - diff --git a/queries/models/veiculo/sppo_licenciamento_solicitacao.sql b/queries/models/veiculo/sppo_licenciamento_solicitacao.sql deleted file mode 100644 index e8f69441..00000000 --- a/queries/models/veiculo/sppo_licenciamento_solicitacao.sql +++ /dev/null @@ -1,40 +0,0 @@ -{{ config( - materialized='incremental', - partition_by={ - "field":"data", - "data_type": "date", - "granularity":"day" - }, - unique_key=['data', 'id_veiculo'], - incremental_strategy='insert_overwrite' -) -}} - -SELECT - SAFE_CAST(data AS DATE) data, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, - SAFE_CAST(JSON_VALUE(content,"$.modo") AS STRING) modo, - SAFE_CAST(id_veiculo AS STRING) id_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.ano_fabricacao") AS STRING) ano_fabricacao, - SAFE_CAST(JSON_VALUE(content,"$.carroceria") AS STRING) carroceria, - SAFE_CAST(JSON_VALUE(content,"$.data_ultima_vistoria") AS STRING) data_ultima_vistoria, - SAFE_CAST(JSON_VALUE(content,"$.id_carroceria") AS INT64) id_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_chassi") AS INT64) id_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_fabricante_chassi") AS INT64) id_fabricante_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_interno_carroceria") AS INT64) id_interno_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_planta") AS INT64) id_planta, - SAFE_CAST(JSON_VALUE(content,"$.indicador_ar_condicionado") AS BOOL) indicador_ar_condicionado, - SAFE_CAST(JSON_VALUE(content,"$.indicador_elevador") AS BOOL) indicador_elevador, - SAFE_CAST(JSON_VALUE(content,"$.indicador_usb") AS BOOL) indicador_usb, - SAFE_CAST(JSON_VALUE(content,"$.indicador_wifi") AS BOOL) indicador_wifi, - SAFE_CAST(JSON_VALUE(content,"$.nome_chassi") AS STRING) nome_chassi, - SAFE_CAST(JSON_VALUE(content,"$.permissao") AS STRING) permissao, - SAFE_CAST(JSON_VALUE(content,"$.placa") AS STRING) placa, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_pe") AS INT64) quantidade_lotacao_pe, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_sentado") AS INT64) quantidade_lotacao_sentado, - SAFE_CAST(JSON_VALUE(content,"$.tipo_combustivel") AS STRING) tipo_combustivel, - SAFE_CAST(JSON_VALUE(content,"$.tipo_veiculo") AS STRING) tipo_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.status") AS STRING) status, - SAFE_CAST(JSON_VALUE(content,"$.solicitacao") AS STRING) solicitacao - FROM - {{ var('sppo_licenciamento_solicitacao_staging') }} as t \ No newline at end of file diff --git a/queries/models/veiculo/sppo_licenciamento_stu.sql b/queries/models/veiculo/sppo_licenciamento_stu.sql deleted file mode 100644 index a886e5d5..00000000 --- a/queries/models/veiculo/sppo_licenciamento_stu.sql +++ /dev/null @@ -1,27 +0,0 @@ -SELECT - SAFE_CAST(data AS DATE) data, - SAFE_CAST(DATETIME(TIMESTAMP_TRUNC(TIMESTAMP(timestamp_captura), SECOND), "America/Sao_Paulo" ) AS DATETIME) timestamp_captura, - SAFE_CAST(JSON_VALUE(content,"$.modo") AS STRING) modo, - SAFE_CAST(id_veiculo AS STRING) id_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.ano_fabricacao") AS STRING) ano_fabricacao, - SAFE_CAST(JSON_VALUE(content,"$.carroceria") AS STRING) carroceria, - SAFE_CAST(JSON_VALUE(content,"$.data_ultima_vistoria") AS STRING) data_ultima_vistoria, - SAFE_CAST(JSON_VALUE(content,"$.id_carroceria") AS INT64) id_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_chassi") AS INT64) id_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_fabricante_chassi") AS INT64) id_fabricante_chassi, - SAFE_CAST(JSON_VALUE(content,"$.id_interno_carroceria") AS INT64) id_interno_carroceria, - SAFE_CAST(JSON_VALUE(content,"$.id_planta") AS INT64) id_planta, - SAFE_CAST(JSON_VALUE(content,"$.indicador_ar_condicionado") AS BOOL) indicador_ar_condicionado, - SAFE_CAST(JSON_VALUE(content,"$.indicador_elevador") AS BOOL) indicador_elevador, - SAFE_CAST(JSON_VALUE(content,"$.indicador_usb") AS BOOL) indicador_usb, - SAFE_CAST(JSON_VALUE(content,"$.indicador_wifi") AS BOOL) indicador_wifi, - SAFE_CAST(JSON_VALUE(content,"$.nome_chassi") AS STRING) nome_chassi, - SAFE_CAST(JSON_VALUE(content,"$.permissao") AS STRING) permissao, - SAFE_CAST(JSON_VALUE(content,"$.placa") AS STRING) placa, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_pe") AS INT64) quantidade_lotacao_pe, - SAFE_CAST(JSON_VALUE(content,"$.quantidade_lotacao_sentado") AS INT64) quantidade_lotacao_sentado, - SAFE_CAST(JSON_VALUE(content,"$.tipo_combustivel") AS STRING) tipo_combustivel, - SAFE_CAST(JSON_VALUE(content,"$.tipo_veiculo") AS STRING) tipo_veiculo, - SAFE_CAST(JSON_VALUE(content,"$.status") AS STRING) status - FROM - {{ var('sppo_licenciamento_stu_staging') }} as t \ No newline at end of file diff --git a/queries/models/veiculo/sppo_veiculo_dia.sql b/queries/models/veiculo/sppo_veiculo_dia.sql deleted file mode 100644 index 0d068212..00000000 --- a/queries/models/veiculo/sppo_veiculo_dia.sql +++ /dev/null @@ -1,185 +0,0 @@ -{{ - config( - materialized="incremental", - partition_by={"field": "data", "data_type": "date", "granularity": "day"}, - unique_key=["data", "id_veiculo"], - incremental_strategy="insert_overwrite", - ) -}} - -WITH - licenciamento AS ( - SELECT - DATE("{{ var('run_date') }}") AS data, - id_veiculo, - placa, - tipo_veiculo, - indicador_ar_condicionado, - TRUE AS indicador_licenciado - FROM - {{ ref("sppo_licenciamento") }} --`rj-smtr`.`veiculo`.`sppo_licenciamento` - {%- if var("stu_data_versao") != "" %} - WHERE - data = DATE("{{ var('stu_data_versao') }}") - {% else -%} - {%- if execute %} - {% set licenciamento_date = run_query("SELECT MIN(data) FROM " ~ ref("sppo_licenciamento") ~ " WHERE data >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 5 DAY)").columns[0].values()[0] %} - {% endif -%} - WHERE - data = DATE("{{ licenciamento_date }}") - {% endif -%} - ), - gps AS ( - SELECT - DISTINCT data, - id_veiculo - FROM - {{ ref("gps_sppo") }} - WHERE - data = DATE("{{ var('run_date') }}") ), - autuacoes AS ( - SELECT - DISTINCT data_infracao AS data, - placa, - id_infracao - FROM - {{ ref("sppo_infracao") }} - WHERE - {%- if execute %} - {% set infracao_date = run_query("SELECT MIN(data) FROM " ~ ref("sppo_infracao") ~ " WHERE data >= DATE_ADD(DATE('" ~ var("run_date") ~ "'), INTERVAL 7 DAY)").columns[0].values()[0] %} - {% endif -%} - data = DATE("{{ infracao_date }}") - AND data_infracao = DATE("{{ var('run_date') }}") - AND modo = "ONIBUS"), - autuacao_ar_condicionado AS ( - SELECT - data, - placa, - TRUE AS indicador_autuacao_ar_condicionado - FROM - autuacoes - WHERE - id_infracao = "023.II" ), - autuacao_seguranca AS ( - SELECT - data, - placa, - TRUE AS indicador_autuacao_seguranca - FROM - autuacoes - WHERE - id_infracao IN ( - "016.VI", - "023.VII", - "024.II", - "024.III", - "024.IV", - "024.V", - "024.VI", - "024.VII", - "024.VIII", - "024.IX", - "024.XII", - "024.XIV", - "024.XV", - "025.II", - "025.XII", - "025.XIII", - "025.XIV", - "026.X") ), - autuacao_equipamento AS ( - SELECT - data, - placa, - TRUE AS indicador_autuacao_equipamento - FROM - autuacoes - WHERE - id_infracao IN ( - "023.IV", - "023.V", - "023.VI", - "023.VIII", - "024.XIII", - "024.XI", - "024.XVIII", - "024.XXI", - "025.III", - "025.IV", - "025.V", - "025.VI", - "025.VII", - "025.VIII", - "025.IX", - "025.X", - "025.XI") ), - autuacao_limpeza AS ( - SELECT - data, - placa, - TRUE AS indicador_autuacao_limpeza - FROM - autuacoes - WHERE - id_infracao IN ( - "023.IX", - "024.X") ), - autuacoes_agg AS ( - SELECT - DISTINCT * - FROM - autuacao_ar_condicionado - FULL JOIN - autuacao_seguranca - USING - (data, - placa) - FULL JOIN - autuacao_equipamento - USING - (data, - placa) - FULL JOIN - autuacao_limpeza - USING - (data, - placa) ), - gps_licenciamento_autuacao AS ( - SELECT - data, - id_veiculo, - STRUCT( COALESCE(l.indicador_licenciado, FALSE) AS indicador_licenciado, - COALESCE(l.indicador_ar_condicionado, FALSE) AS indicador_ar_condicionado, - COALESCE(a.indicador_autuacao_ar_condicionado, FALSE) AS indicador_autuacao_ar_condicionado, - COALESCE(a.indicador_autuacao_seguranca, FALSE) AS indicador_autuacao_seguranca, - COALESCE(a.indicador_autuacao_limpeza, FALSE) AS indicador_autuacao_limpeza, - COALESCE(a.indicador_autuacao_equipamento, FALSE) AS indicador_autuacao_equipamento) AS indicadores - FROM - gps g - LEFT JOIN - licenciamento AS l - USING - (data, - id_veiculo) - LEFT JOIN - autuacoes_agg AS a - USING - (data, - placa)) -SELECT - gla.* EXCEPT(indicadores), - TO_JSON(indicadores) AS indicadores, - status, - "{{ var("version") }}" AS versao -FROM - gps_licenciamento_autuacao AS gla -LEFT JOIN - {{ ref("subsidio_parametros") }} AS p --`rj-smtr.dashboard_subsidio_sppo.subsidio_parametros` -ON - gla.indicadores.indicador_licenciado = p.indicador_licenciado - AND gla.indicadores.indicador_ar_condicionado = p.indicador_ar_condicionado - AND gla.indicadores.indicador_autuacao_ar_condicionado = p.indicador_autuacao_ar_condicionado - AND gla.indicadores.indicador_autuacao_seguranca = p.indicador_autuacao_seguranca - AND gla.indicadores.indicador_autuacao_limpeza = p.indicador_autuacao_limpeza - AND gla.indicadores.indicador_autuacao_equipamento = p.indicador_autuacao_equipamento - AND (data BETWEEN p.data_inicio AND p.data_fim) \ No newline at end of file From df34c52abb6e5468f5f116d92685189955836909 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha <66736583+eng-rodrigocunha@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:36:44 -0300 Subject: [PATCH 2/3] =?UTF-8?q?Corre=C3=A7=C3=B5es=20do=20pre-commit=20(#5?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * commit inicial * remove tabelas * ordena imports * corrige ordem de imports --- pipelines/br_rj_riodejaneiro_brt_gps/flows.py | 51 ++++---- pipelines/br_rj_riodejaneiro_brt_gps/tasks.py | 15 +-- pipelines/constants.py | 11 +- pipelines/flows.py | 2 +- pipelines/schedules.py | 50 +++----- pipelines/tasks.py | 119 +++++++----------- pipelines/utils/secret.py | 10 +- pipelines/utils/utils.py | 110 ++++++---------- queries/dev/run.py | 4 +- queries/dev/utils.py | 10 +- queries/macros/many_to_one.sql | 2 +- queries/macros/one_to_one.sql | 4 +- queries/macros/unique_key.sql | 2 +- queries/models/sources.yml | 2 +- queries/tests/generic/contained.sql | 2 +- queries/tests/generic/unique_by_date.sql | 2 +- queries/tests/generic/unique_relation.sql | 2 +- 17 files changed, 163 insertions(+), 235 deletions(-) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py index f9817ae6..0e612087 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py @@ -3,53 +3,52 @@ Flows for br_rj_riodejaneiro_brt_gps """ +# Prefect Imports # + from prefect import Parameter, case from prefect.run_configs import KubernetesRun from prefect.storage import GCS +# isort: off # EMD Imports # -from pipelines.constants import constants as emd_constants from prefeitura_rio.pipelines_utils.custom import Flow +from prefeitura_rio.pipelines_utils.state_handlers import handler_inject_bd_credentials + # from prefeitura_rio.pipelines_utils.prefect import get_k8s_dbt_client -from pipelines.tasks import ( - get_current_flow_labels, -) -# SMTR Imports # +from pipelines.constants import constants as emd_constants -from pipelines.constants import constants +# isort: on +# SMTR Imports # -from pipelines.schedules import ( - every_minute, - every_hour, +from pipelines.br_rj_riodejaneiro_brt_gps.tasks import ( + pre_treatment_br_rj_riodejaneiro_brt_gps, ) -from pipelines.tasks import ( +from pipelines.constants import constants +from pipelines.tasks import ( # get_local_dbt_client,; setup_task, + bq_upload, create_date_hour_partition, create_local_partition_path, fetch_dataset_sha, + get_current_flow_labels, + get_current_flow_mode, get_current_timestamp, get_materialization_date_range, - # get_local_dbt_client, + get_now_time, get_raw, parse_timestamp_to_string, + rename_current_flow_run_now_time, +) +from pipelines.tasks import run_dbt_model_task as run_dbt_model +from pipelines.tasks import ( # get_local_dbt_client,; setup_task, save_raw_local, save_treated_local, set_last_run_timestamp, upload_logs_to_bq, - bq_upload, - get_now_time, - rename_current_flow_run_now_time, - get_current_flow_mode, - setup_task ) -from pipelines.br_rj_riodejaneiro_brt_gps.tasks import ( - pre_treatment_br_rj_riodejaneiro_brt_gps, -) -from pipelines.tasks import run_dbt_model_task as run_dbt_model -from prefeitura_rio.pipelines_utils.state_handlers import handler_inject_bd_credentials - +# from pipelines.schedules import every_hour, every_minute # Flows # @@ -62,12 +61,8 @@ ) # Get default parameters # - raw_dataset_id = Parameter( - "raw_dataset_id", default=constants.GPS_BRT_RAW_DATASET_ID.value - ) - raw_table_id = Parameter( - "raw_table_id", default=constants.GPS_BRT_RAW_TABLE_ID.value - ) + raw_dataset_id = Parameter("raw_dataset_id", default=constants.GPS_BRT_RAW_DATASET_ID.value) + raw_table_id = Parameter("raw_table_id", default=constants.GPS_BRT_RAW_TABLE_ID.value) dataset_id = Parameter("dataset_id", default=constants.GPS_BRT_DATASET_ID.value) table_id = Parameter("table_id", default=constants.GPS_BRT_TREATED_TABLE_ID.value) rebuild = Parameter("rebuild", False) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py b/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py index 7cfe41f5..7f04a30c 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py @@ -3,9 +3,14 @@ Tasks for br_rj_riodejaneiro_brt_gps """ -from datetime import timedelta import traceback +from datetime import timedelta + import pandas as pd + +# isort: off +# Prefect Imports # + from prefect import task # EMD Imports # @@ -53,9 +58,7 @@ def pre_treatment_br_rj_riodejaneiro_brt_gps(status: dict, timestamp): df = pd.DataFrame(columns=columns) # pylint: disable=c0103 # map_dict_keys change data keys to match project data structure - df["content"] = [ - map_dict_keys(piece, constants.GPS_BRT_MAPPING_KEYS.value) for piece in data - ] + df["content"] = [map_dict_keys(piece, constants.GPS_BRT_MAPPING_KEYS.value) for piece in data] df[key_column] = [piece[key_column] for piece in data] df["timestamp_gps"] = [piece["timestamp_gps"] for piece in data] df["timestamp_captura"] = timestamp @@ -64,9 +67,7 @@ def pre_treatment_br_rj_riodejaneiro_brt_gps(status: dict, timestamp): # Remove timezone and force it to be config timezone log(f"Before converting, timestamp_gps was: \n{df['timestamp_gps']}") df["timestamp_gps"] = ( - pd.to_datetime(df["timestamp_gps"], unit="ms") - .dt.tz_localize("UTC") - .dt.tz_convert(timezone) + pd.to_datetime(df["timestamp_gps"], unit="ms").dt.tz_localize("UTC").dt.tz_convert(timezone) ) log(f"After converting the timezone, timestamp_gps is: \n{df['timestamp_gps']}") diff --git a/pipelines/constants.py b/pipelines/constants.py index 0a6aa6b2..1aba4eff 100644 --- a/pipelines/constants.py +++ b/pipelines/constants.py @@ -10,6 +10,7 @@ class constants(Enum): # pylint: disable=c0103 """ Constant values for the rj_smtr projects """ + # CONFIGS # DOCKER_TAG = "AUTO_REPLACE_DOCKER_TAG" DOCKER_IMAGE_NAME = "AUTO_REPLACE_DOCKER_IMAGE" @@ -17,9 +18,9 @@ class constants(Enum): # pylint: disable=c0103 GCS_FLOWS_BUCKET = "datario-public" # AGENT LABELS # - RJ_SMTR_AGENT_LABEL = 'rj-smtr' - RJ_SMTR_DEV_AGENT_LABEL = 'rj-smtr-dev' - + RJ_SMTR_AGENT_LABEL = "rj-smtr" + RJ_SMTR_DEV_AGENT_LABEL = "rj-smtr-dev" + # DEFAULT TIMEZONE # TIMEZONE = "America/Sao_Paulo" @@ -44,9 +45,7 @@ class constants(Enum): # pylint: disable=c0103 GPS_SPPO_API_BASE_URL = ( "http://ccomobility.com.br/WebServices/Binder/WSConecta/EnvioInformacoesIplan?" ) - GPS_SPPO_API_BASE_URL_V2 = ( - "http://ccomobility.com.br/WebServices/Binder/wsconecta/EnvioIplan?" - ) + GPS_SPPO_API_BASE_URL_V2 = "http://ccomobility.com.br/WebServices/Binder/wsconecta/EnvioIplan?" GPS_SPPO_API_SECRET_PATH = "sppo_api" GPS_SPPO_API_SECRET_PATH_V2 = "sppo_api_v2" diff --git a/pipelines/flows.py b/pipelines/flows.py index 5da3fc95..71646f9e 100644 --- a/pipelines/flows.py +++ b/pipelines/flows.py @@ -2,5 +2,5 @@ """ Imports all flows for every project so we can register all of them. """ +# from pipelines.br_rj_riodejaneiro_brt_gps.flows import * from pipelines.exemplo import * # noqa -from pipelines.br_rj_riodejaneiro_brt_gps.flows import * \ No newline at end of file diff --git a/pipelines/schedules.py b/pipelines/schedules.py index 4312feb9..dafb810a 100644 --- a/pipelines/schedules.py +++ b/pipelines/schedules.py @@ -3,21 +3,21 @@ Schedules for rj_smtr """ -from datetime import timedelta, datetime -from pytz import timezone +from datetime import datetime, timedelta + from prefect.schedules import Schedule -from prefect.schedules.clocks import IntervalClock, CronClock +from prefect.schedules.clocks import CronClock, IntervalClock +from pytz import timezone + +from pipelines.constants import constants from pipelines.constants import constants as emd_constants from pipelines.utils.utils import generate_ftp_schedules -from pipelines.constants import constants every_minute = Schedule( clocks=[ IntervalClock( interval=timedelta(minutes=1), - start_date=datetime( - 2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -28,9 +28,7 @@ clocks=[ IntervalClock( interval=timedelta(minutes=1), - start_date=datetime( - 2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_DEV_AGENT_LABEL.value, ], @@ -42,9 +40,7 @@ clocks=[ IntervalClock( interval=timedelta(minutes=10), - start_date=datetime( - 2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -57,9 +53,7 @@ clocks=[ IntervalClock( interval=timedelta(hours=1), - start_date=datetime( - 2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -71,9 +65,7 @@ clocks=[ IntervalClock( interval=timedelta(hours=1), - start_date=datetime( - 2021, 1, 1, 0, 6, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 6, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -85,9 +77,7 @@ clocks=[ IntervalClock( interval=timedelta(days=1), - start_date=datetime( - 2021, 1, 1, 0, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2021, 1, 1, 0, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -103,9 +93,7 @@ clocks=[ IntervalClock( interval=timedelta(days=1), - start_date=datetime( - 2022, 11, 30, 5, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2022, 11, 30, 5, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -117,9 +105,7 @@ clocks=[ IntervalClock( interval=timedelta(days=1), - start_date=datetime( - 2022, 11, 30, 7, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2022, 11, 30, 7, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], @@ -131,18 +117,14 @@ clocks=[ CronClock( cron="0 12 16 * *", - start_date=datetime( - 2022, 12, 16, 12, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2022, 12, 16, 12, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], ), CronClock( cron="0 12 1 * *", - start_date=datetime( - 2023, 1, 1, 12, 0, tzinfo=timezone(constants.TIMEZONE.value) - ), + start_date=datetime(2023, 1, 1, 12, 0, tzinfo=timezone(constants.TIMEZONE.value)), labels=[ emd_constants.RJ_SMTR_AGENT_LABEL.value, ], diff --git a/pipelines/tasks.py b/pipelines/tasks.py index 0f75221c..3e8bfc68 100644 --- a/pipelines/tasks.py +++ b/pipelines/tasks.py @@ -3,49 +3,49 @@ """ Tasks for rj_smtr """ -from datetime import datetime, timedelta, date +import io import json import os -from pathlib import Path import traceback -from typing import Dict, List, Union, Iterable, Any -import io +from datetime import date, datetime, timedelta +from pathlib import Path +from typing import Any, Dict, Iterable, List, Union -from basedosdados import Storage, Table import basedosdados as bd import pandas as pd import pendulum import prefect -from prefect import task, Client +import requests +from basedosdados import Storage, Table +from prefect import Client, task from prefect.backend import FlowRunView +from prefeitura_rio.pipelines_utils.dbt import run_dbt_model +from prefeitura_rio.pipelines_utils.infisical import inject_bd_credentials +from prefeitura_rio.pipelines_utils.logging import log +from prefeitura_rio.pipelines_utils.redis_pal import get_redis_client from pytz import timezone -import requests from pipelines.constants import constants -from pipelines.utils.utils import ( - create_or_append_table, +from pipelines.utils.secret import get_secret +from pipelines.utils.utils import ( # normalize_keys, bq_project, - get_table_min_max_value, - get_last_run_timestamp, + create_or_append_table, data_info_str, dict_contains_keys, + get_datetime_range, + get_last_run_timestamp, get_raw_data_api, - get_raw_data_gcs, get_raw_data_db, + get_raw_data_gcs, get_raw_recursos, - upload_run_logs_to_bq, - get_datetime_range, + get_table_min_max_value, + log_critical, read_raw_data, - save_treated_local_func, save_raw_local_func, - log_critical, - normalize_keys + save_treated_local_func, + upload_run_logs_to_bq, ) -from pipelines.utils.secret import get_secret -from prefeitura_rio.pipelines_utils.dbt import run_dbt_model -from prefeitura_rio.pipelines_utils.redis_pal import get_redis_client -from prefeitura_rio.pipelines_utils.infisical import inject_bd_credentials -from prefeitura_rio.pipelines_utils.logging import log + ############### # @@ -56,6 +56,7 @@ def setup_task(): return inject_bd_credentials() + @task def get_current_flow_labels() -> List[str]: """ @@ -65,14 +66,16 @@ def get_current_flow_labels() -> List[str]: flow_run_view = FlowRunView.from_flow_run_id(flow_run_id) return flow_run_view.labels + ############### # # DBT # ############### + @task -def run_dbt_model_task( +def run_dbt_model_task( dataset_id: str = None, table_id: str = None, dbt_alias: bool = False, @@ -80,8 +83,8 @@ def run_dbt_model_task( downstream: bool = None, exclude: str = None, flags: str = None, - _vars: dict | List[Dict] = None - ): + _vars: dict | List[Dict] = None, +): return run_dbt_model( dataset_id=dataset_id, table_id=table_id, @@ -90,7 +93,7 @@ def run_dbt_model_task( downstream=downstream, exclude=exclude, flags=flags, - _vars=_vars + _vars=_vars, ) @@ -140,7 +143,7 @@ def build_incremental_model( # pylint: disable=too-many-arguments if refresh: log("Running in full refresh mode") log(f"DBT will run the following command:\n{run_command+' --full-refresh'}") - run_dbt_model(dataset_id=dataset_id, table_id=mat_table_id, flags='--full-refresh') + run_dbt_model(dataset_id=dataset_id, table_id=mat_table_id, flags="--full-refresh") last_mat_date = get_table_min_max_value( query_project_id, dataset_id, mat_table_id, field_name, "max" ) @@ -208,9 +211,7 @@ def create_dbt_run_vars( log("Creating date_range variable") # Set date_range variable manually - if dict_contains_keys( - dbt_vars["date_range"], ["date_range_start", "date_range_end"] - ): + if dict_contains_keys(dbt_vars["date_range"], ["date_range_start", "date_range_end"]): date_var = { "date_range_start": dbt_vars["date_range"]["date_range_start"], "date_range_end": dbt_vars["date_range"]["date_range_end"], @@ -490,13 +491,9 @@ def query_logs( """ if not datetime_filter: - datetime_filter = pendulum.now(constants.TIMEZONE.value).replace( - second=0, microsecond=0 - ) + datetime_filter = pendulum.now(constants.TIMEZONE.value).replace(second=0, microsecond=0) elif isinstance(datetime_filter, str): - datetime_filter = datetime.fromisoformat(datetime_filter).replace( - second=0, microsecond=0 - ) + datetime_filter = datetime.fromisoformat(datetime_filter).replace(second=0, microsecond=0) datetime_filter = datetime_filter.strftime("%Y-%m-%d %H:%M:%S") @@ -638,13 +635,9 @@ def get_raw( # pylint: disable=R0912 elif filetype in ("txt", "csv"): if csv_args is None: csv_args = {} - data = pd.read_csv(io.StringIO(response.text), **csv_args).to_dict( - orient="records" - ) + data = pd.read_csv(io.StringIO(response.text), **csv_args).to_dict(orient="records") else: - error = ( - "Unsupported raw file extension. Supported only: json, csv and txt" - ) + error = "Unsupported raw file extension. Supported only: json, csv and txt" except Exception: error = traceback.format_exc() @@ -750,9 +743,7 @@ def get_raw_from_sources( source_values = source_type.split("-", 1) - source_type, filetype = ( - source_values if len(source_values) == 2 else (source_values[0], None) - ) + source_type, filetype = source_values if len(source_values) == 2 else (source_values[0], None) log(f"Getting raw data from source type: {source_type}") @@ -779,9 +770,7 @@ def get_raw_from_sources( else: raise NotImplementedError(f"{source_type} not supported") - filepath = save_raw_local_func( - data=data, filepath=local_filepath, filetype=filetype - ) + filepath = save_raw_local_func(data=data, filepath=local_filepath, filetype=filetype) except NotImplementedError: error = traceback.format_exc() @@ -927,9 +916,7 @@ def upload_logs_to_bq( # pylint: disable=R0913 # Create partition directory filename = f"{table_id}_{timestamp.isoformat()}" partition = f"data={timestamp.date()}" - filepath = Path( - f"""data/staging/{dataset_id}/{table_id}/{partition}/{filename}.csv""" - ) + filepath = Path(f"""data/staging/{dataset_id}/{table_id}/{partition}/{filename}.csv""") filepath.parent.mkdir(exist_ok=True, parents=True) # Create dataframe to be uploaded if not error and recapture is True: @@ -1099,9 +1086,7 @@ def get_materialization_date_range( # pylint: disable=R0913 """ timestr = "%Y-%m-%dT%H:%M:%S" # get start from redis - last_run = get_last_run_timestamp( - dataset_id=dataset_id, table_id=table_id, mode=mode - ) + last_run = get_last_run_timestamp(dataset_id=dataset_id, table_id=table_id, mode=mode) # if there's no timestamp set on redis, get max timestamp on source table if last_run is None: log("Failed to fetch key from Redis...\n Querying tables for last suceeded run") @@ -1151,9 +1136,7 @@ def get_materialization_date_range( # pylint: disable=R0913 tzinfo=None, minute=0, second=0, microsecond=0 ) - end_ts = (end_ts - timedelta(hours=delay_hours)).replace( - minute=0, second=0, microsecond=0 - ) + end_ts = (end_ts - timedelta(hours=delay_hours)).replace(minute=0, second=0, microsecond=0) end_ts = end_ts.strftime(timestr) @@ -1343,15 +1326,9 @@ def transform_raw_to_nested_structure( pk_cols = primary_key + ["timestamp_captura"] data = ( data.groupby(pk_cols) - .apply( - lambda x: x[data.columns.difference(pk_cols)].to_json( - orient="records" - ) - ) + .apply(lambda x: x[data.columns.difference(pk_cols)].to_json(orient="records")) .str.strip("[]") - .reset_index(name="content")[ - primary_key + ["content", "timestamp_captura"] - ] + .reset_index(name="content")[primary_key + ["content", "timestamp_captura"]] ) log( @@ -1360,9 +1337,7 @@ def transform_raw_to_nested_structure( ) # save treated local - filepath = save_treated_local_func( - data=data, error=error, filepath=filepath - ) + filepath = save_treated_local_func(data=data, error=error, filepath=filepath) except Exception: # pylint: disable=W0703 error = traceback.format_exc() @@ -1462,13 +1437,12 @@ def get_scheduled_start_times( last_schedule = timestamp for param in parameters[1:]: - last_schedule += intervals.get( - param.get("table_id", "default"), intervals["default"] - ) + last_schedule += intervals.get(param.get("table_id", "default"), intervals["default"]) timestamps.append(last_schedule) return timestamps + @task def rename_current_flow_run_now_time(prefix: str, now_time=None, wait=None) -> None: """ @@ -1478,6 +1452,7 @@ def rename_current_flow_run_now_time(prefix: str, now_time=None, wait=None) -> N client = Client() return client.set_flow_run_name(flow_run_id, f"{prefix}{now_time}") + @prefect.task(checkpoint=False) def get_now_time(): """ @@ -1487,6 +1462,7 @@ def get_now_time(): return f"{now.hour}:{f'0{now.minute}' if len(str(now.minute))==1 else now.minute}" + @prefect.task(checkpoint=False) def get_now_date(): """ @@ -1496,6 +1472,7 @@ def get_now_date(): return now.to_date_string() + @task def get_current_flow_mode(labels: List[str]) -> str: """ diff --git a/pipelines/utils/secret.py b/pipelines/utils/secret.py index e4120538..46b1905b 100644 --- a/pipelines/utils/secret.py +++ b/pipelines/utils/secret.py @@ -1,8 +1,10 @@ +# -*- coding: utf-8 -*- from prefeitura_rio.pipelines_utils.infisical import get_infisical_client + from pipelines.utils.utils import normalize_keys -def get_secret(secret_path:str='/', secret_name:str=None, environment:str='dev'): +def get_secret(secret_path: str = "/", secret_name: str = None, environment: str = "dev"): """ Fetches secrets from Infisical. If passing only `secret_path` and no `secret_name`, returns all secrets inside a folder. @@ -16,10 +18,10 @@ def get_secret(secret_path:str='/', secret_name:str=None, environment:str='dev') _type_: _description_ """ client = get_infisical_client() - if not secret_path.startswith('/'): + if not secret_path.startswith("/"): secret_path = f"/{secret_path}" if secret_path and not secret_name: secrets = client.get_all_secrets(path=secret_path) - return normalize_keys({s.secret_name:s.secret_value for s in secrets}) + return normalize_keys({s.secret_name: s.secret_value for s in secrets}) secret = client.get_secret(secret_name=secret_name, path=secret_path, environment=environment) - return {secret_name:secret.secret_value} \ No newline at end of file + return {secret_name: secret.secret_value} diff --git a/pipelines/utils/utils.py b/pipelines/utils/utils.py index 8468307a..80cc11c3 100644 --- a/pipelines/utils/utils.py +++ b/pipelines/utils/utils.py @@ -4,46 +4,40 @@ General purpose functions for rj_smtr """ -from ftplib import FTP -from pathlib import Path - -from datetime import timedelta, datetime, date -from typing import List, Union, Any -import traceback import io import json +import math +import time +import traceback import zipfile -import pytz -import requests +from datetime import date, datetime, timedelta +from ftplib import FTP +from pathlib import Path +from typing import Any, List, Union + import basedosdados as bd -from basedosdados import Table -from basedosdados import Storage -from pytz import timezone -import math import pandas as pd -from google.cloud.storage.blob import Blob -import pymysql import psycopg2 import psycopg2.extras -from redis_pal import RedisPal -import time - - +import pymysql +import pytz +import requests +from basedosdados import Storage, Table +from google.cloud.storage.blob import Blob from prefect.schedules.clocks import IntervalClock +from prefeitura_rio.pipelines_utils.infisical import get_secret +from prefeitura_rio.pipelines_utils.logging import log # TODO: add or relocate imports +from prefeitura_rio.pipelines_utils.redis_pal import get_redis_client +from pytz import timezone +from redis_pal import RedisPal from pipelines.constants import constants - - from pipelines.utils.implicit_ftp import ImplicitFtpTls -from pipelines.constants import constants - -from prefeitura_rio.pipelines_utils.logging import log #TODO: add or relocate imports -from prefeitura_rio.pipelines_utils.infisical import get_secret -from prefeitura_rio.pipelines_utils.redis_pal import get_redis_client # Set BD config to run on cloud # bd.config.from_file = True + def send_discord_message( message: str, webhook_url: str, @@ -70,9 +64,7 @@ def log_critical(message: str, secret_path: str = constants.CRITICAL_SECRET_PATH return send_discord_message(message=message, webhook_url=url) -def create_or_append_table( - dataset_id: str, table_id: str, path: str, partitions: str = None -): +def create_or_append_table(dataset_id: str, table_id: str, path: str, partitions: str = None): """Conditionally create table or append data to its relative GCS folder. Args: @@ -92,9 +84,7 @@ def create_or_append_table( log("Table created in STAGING") else: log("Table already exists in STAGING, appending to it...") - tb_obj.append( - filepath=path, if_exists="replace", timeout=600, partitions=partitions - ) + tb_obj.append(filepath=path, if_exists="replace", timeout=600, partitions=partitions) log("Appended to table on STAGING successfully.") @@ -107,9 +97,7 @@ def generate_df_and_save(data: dict, fname: Path): """ # Generate dataframe dataframe = pd.DataFrame() - dataframe[data["key_column"]] = [ - piece[data["key_column"]] for piece in data["data"] - ] + dataframe[data["key_column"]] = [piece[data["key_column"]] for piece in data["data"]] dataframe["content"] = list(data["data"]) # Save dataframe to CSV @@ -158,6 +146,7 @@ def get_table_min_max_value( # pylint: disable=R0913 return result.iloc[0][0] + def get_last_run_timestamp(dataset_id: str, table_id: str, mode: str = "prod") -> str: """ Query redis to retrive the time for when the last materialization @@ -199,10 +188,12 @@ def map_dict_keys(data: dict, mapping: dict) -> None: data[new_key] = data.pop(old_key) return data -def normalize_keys(data:dict): - _data = {key.lower():value for key, value in data.items()} + +def normalize_keys(data: dict): + _data = {key.lower(): value for key, value in data.items()} return _data + def connect_ftp(secret_path: str = None, secure: bool = True): """Connect to FTP @@ -378,21 +369,11 @@ def check_relation(data: pd.DataFrame, columns: list): """ for cols in columns: - df_dup = ( - data[~data.duplicated(subset=cols)] - .groupby(cols) - .count() - .reset_index() - .iloc[:, :1] - ) + df_dup = data[~data.duplicated(subset=cols)].groupby(cols).count().reset_index().iloc[:, :1] for col in cols: df_dup_col = ( - data[~data.duplicated(subset=col)] - .groupby(col) - .count() - .reset_index() - .iloc[:, :1] + data[~data.duplicated(subset=col)].groupby(col).count().reset_index().iloc[:, :1] ) if len(df_dup_col[~df_dup_col[col].duplicated()]) == len(df_dup): @@ -427,9 +408,7 @@ def generate_execute_schedules( # pylint: disable=too-many-arguments,too-many-l labels: List[str], table_parameters: Union[list[dict], dict], runs_interval_minutes: int = 15, - start_date: datetime = datetime( - 2020, 1, 1, tzinfo=pytz.timezone(constants.TIMEZONE.value) - ), + start_date: datetime = datetime(2020, 1, 1, tzinfo=pytz.timezone(constants.TIMEZONE.value)), **general_flow_params, ) -> List[IntervalClock]: """ @@ -456,8 +435,7 @@ def generate_execute_schedules( # pylint: disable=too-many-arguments,too-many-l clocks.append( IntervalClock( interval=clock_interval, - start_date=start_date - + timedelta(minutes=runs_interval_minutes * count), + start_date=start_date + timedelta(minutes=runs_interval_minutes * count), labels=labels, parameter_defaults=parameter_defaults, ) @@ -491,9 +469,7 @@ def custom_serialization(obj: Any) -> Any: if isinstance(obj, (pd.Timestamp, date)): if isinstance(obj, pd.Timestamp): if obj.tzinfo is None: - obj = obj.tz_localize("UTC").tz_convert( - constants.TIMEZONE.value - ) + obj = obj.tz_localize("UTC").tz_convert(constants.TIMEZONE.value) return obj.isoformat() raise TypeError(f"Object of type {type(obj)} is not JSON serializable") @@ -638,9 +614,7 @@ def get_raw_data_gcs( if filetype == "zip": with zipfile.ZipFile(io.BytesIO(data), "r") as zipped_file: filenames = zipped_file.namelist() - filename = list( - filter(lambda x: x.split(".")[0] == table_id, filenames) - )[0] + filename = list(filter(lambda x: x.split(".")[0] == table_id, filenames))[0] filetype = filename.split(".")[-1] data = zipped_file.read(filename) @@ -749,9 +723,7 @@ def upload_run_logs_to_bq( # pylint: disable=R0913 # Create partition directory filename = f"{table_id}_{timestamp.isoformat()}" partition = f"data={timestamp.date()}" - filepath = Path( - f"""data/{mode}/{dataset_id}/{table_id}/{partition}/{filename}.csv""" - ) + filepath = Path(f"""data/{mode}/{dataset_id}/{table_id}/{partition}/{filename}.csv""") filepath.parent.mkdir(exist_ok=True, parents=True) # Create dataframe to be uploaded if not error and recapture is True: @@ -801,11 +773,7 @@ def get_datetime_range( dict: datetime range """ - start = ( - (timestamp - interval) - .astimezone(tz=pytz.timezone("UTC")) - .strftime("%Y-%m-%d %H:%M:%S") - ) + start = (timestamp - interval).astimezone(tz=pytz.timezone("UTC")).strftime("%Y-%m-%d %H:%M:%S") end = timestamp.astimezone(tz=pytz.timezone("UTC")).strftime("%Y-%m-%d %H:%M:%S") @@ -898,6 +866,7 @@ def get_raw_recursos(request_url: str, request_params: dict) -> tuple[str, str, return error, data, filetype + def build_table_id(mode: str, report_type: str): """Build table_id based on which table is the target of current flow run @@ -923,9 +892,8 @@ def build_table_id(mode: str, report_type: str): table_id = constants.STPL_RHO_TABLE_ID.value return table_id -def generate_ftp_schedules( - interval_minutes: int, label: str = constants.RJ_SMTR_AGENT_LABEL.value -): + +def generate_ftp_schedules(interval_minutes: int, label: str = constants.RJ_SMTR_AGENT_LABEL.value): """Generates IntervalClocks with the parameters needed to capture each report. @@ -956,4 +924,4 @@ def generate_ftp_schedules( labels=[label], ) ) - return clocks \ No newline at end of file + return clocks diff --git a/queries/dev/run.py b/queries/dev/run.py index be2aab71..f6fa99f3 100644 --- a/queries/dev/run.py +++ b/queries/dev/run.py @@ -1,5 +1,7 @@ +# -*- coding: utf-8 -*- +# import os + from utils import run_dbt_model -import os # Veja os parâmetros disponíveis da função run_dbt_model em util.py diff --git a/queries/dev/utils.py b/queries/dev/utils.py index 1f2922d0..db021da6 100644 --- a/queries/dev/utils.py +++ b/queries/dev/utils.py @@ -1,9 +1,11 @@ +# -*- coding: utf-8 -*- import os -from datetime import datetime as dt -from datetime import timedelta -import pandas as pd -from typing import Any, Dict, List, Union +# from datetime import datetime as dt +# from datetime import timedelta +from typing import Dict, List, Union + +# import pandas as pd def run_dbt_model( diff --git a/queries/macros/many_to_one.sql b/queries/macros/many_to_one.sql index d680ee62..fcb7a9c2 100644 --- a/queries/macros/many_to_one.sql +++ b/queries/macros/many_to_one.sql @@ -22,7 +22,7 @@ LEFT JOIN ( ON m.{{column_name}} = n.{{column_name}} ) -SELECT +SELECT * FROM t WHERE to_col is null diff --git a/queries/macros/one_to_one.sql b/queries/macros/one_to_one.sql index 5889af1b..3fcc3327 100644 --- a/queries/macros/one_to_one.sql +++ b/queries/macros/one_to_one.sql @@ -23,11 +23,11 @@ ON m.{{column_name}} = n.{{column_name}} ) SELECT * FROM ( - SELECT + SELECT from_col, count(to_col) ct FROM t GROUP BY from_col -) +) where ct != 1 {% endtest %} diff --git a/queries/macros/unique_key.sql b/queries/macros/unique_key.sql index ffe1285e..4e0b6657 100644 --- a/queries/macros/unique_key.sql +++ b/queries/macros/unique_key.sql @@ -1,5 +1,5 @@ {% test unique_key(model, column_name, partition_column, combined_keys) %} -SELECT +SELECT * FROM ( SELECT diff --git a/queries/models/sources.yml b/queries/models/sources.yml index bc0a4920..c5b297b2 100644 --- a/queries/models/sources.yml +++ b/queries/models/sources.yml @@ -40,7 +40,7 @@ sources: - name: br_rj_riodejaneiro_stu_staging database: rj-smtr-staging - + tables: - name: operadora_empresa - name: operadora_pessoa_fisica diff --git a/queries/tests/generic/contained.sql b/queries/tests/generic/contained.sql index 1b65571f..c39221cc 100644 --- a/queries/tests/generic/contained.sql +++ b/queries/tests/generic/contained.sql @@ -1,5 +1,5 @@ {% test contained(model, column_name, in, field) %} -select * +select * from ( SELECT DISTINCT {{ column_name }} contained, diff --git a/queries/tests/generic/unique_by_date.sql b/queries/tests/generic/unique_by_date.sql index ea0050dc..4046c611 100644 --- a/queries/tests/generic/unique_by_date.sql +++ b/queries/tests/generic/unique_by_date.sql @@ -1,5 +1,5 @@ {% test unique_by_date(model, column_name, date_column_name) %} -SELECT +SELECT * FROM ( SELECT diff --git a/queries/tests/generic/unique_relation.sql b/queries/tests/generic/unique_relation.sql index 3c2790bc..e56f153f 100644 --- a/queries/tests/generic/unique_relation.sql +++ b/queries/tests/generic/unique_relation.sql @@ -6,7 +6,7 @@ FROM ( {{ partition_column}}, COUNT({{ relation_field }}) ct FROM {{ model }} - WHERE + WHERE {{ partition_column }} = (select max({{ partition_column }}) from {{ model }}) GROUP BY 1, 2 ) From ba5bec00f5abe3a1ac64a80e273721d6d175fb87 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha <66736583+eng-rodrigocunha@users.noreply.github.com> Date: Fri, 5 Jan 2024 16:00:17 -0300 Subject: [PATCH 3/3] Fix pre commit (#7) * commit inicial * remove tabelas * ordena imports * corrige ordem de imports * ajusta imports + run_dbt_model --- pipelines/br_rj_riodejaneiro_brt_gps/flows.py | 4 +--- pipelines/tasks.py | 10 +++++----- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py index 0e612087..521e3c9a 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py @@ -39,9 +39,7 @@ get_raw, parse_timestamp_to_string, rename_current_flow_run_now_time, -) -from pipelines.tasks import run_dbt_model_task as run_dbt_model -from pipelines.tasks import ( # get_local_dbt_client,; setup_task, + run_dbt_model, save_raw_local, save_treated_local, set_last_run_timestamp, diff --git a/pipelines/tasks.py b/pipelines/tasks.py index 3e8bfc68..78355251 100644 --- a/pipelines/tasks.py +++ b/pipelines/tasks.py @@ -19,7 +19,7 @@ from basedosdados import Storage, Table from prefect import Client, task from prefect.backend import FlowRunView -from prefeitura_rio.pipelines_utils.dbt import run_dbt_model +from prefeitura_rio.pipelines_utils.dbt import run_dbt_model as run_dbt_model_func from prefeitura_rio.pipelines_utils.infisical import inject_bd_credentials from prefeitura_rio.pipelines_utils.logging import log from prefeitura_rio.pipelines_utils.redis_pal import get_redis_client @@ -75,7 +75,7 @@ def get_current_flow_labels() -> List[str]: @task -def run_dbt_model_task( +def run_dbt_model( dataset_id: str = None, table_id: str = None, dbt_alias: bool = False, @@ -85,7 +85,7 @@ def run_dbt_model_task( flags: str = None, _vars: dict | List[Dict] = None, ): - return run_dbt_model( + return run_dbt_model_func( dataset_id=dataset_id, table_id=table_id, dbt_alias=dbt_alias, @@ -143,7 +143,7 @@ def build_incremental_model( # pylint: disable=too-many-arguments if refresh: log("Running in full refresh mode") log(f"DBT will run the following command:\n{run_command+' --full-refresh'}") - run_dbt_model(dataset_id=dataset_id, table_id=mat_table_id, flags="--full-refresh") + run_dbt_model_func(dataset_id=dataset_id, table_id=mat_table_id, flags="--full-refresh") last_mat_date = get_table_min_max_value( query_project_id, dataset_id, mat_table_id, field_name, "max" ) @@ -152,7 +152,7 @@ def build_incremental_model( # pylint: disable=too-many-arguments log("Running interval step materialization") log(f"DBT will run the following command:\n{run_command}") while last_base_date > last_mat_date: - running = run_dbt_model(dataset_id=dataset_id, table_id=mat_table_id) + running = run_dbt_model_func(dataset_id=dataset_id, table_id=mat_table_id) # running = dbt_client.cli(run_command, sync=True) last_mat_date = get_table_min_max_value( query_project_id,