From 082b066574804b90dfb49540466e5d60dfc58ba3 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha Date: Fri, 5 Jan 2024 14:01:28 -0300 Subject: [PATCH 1/5] commit inicial --- pipelines/br_rj_riodejaneiro_brt_gps/flows.py | 56 ++++----- pipelines/br_rj_riodejaneiro_brt_gps/tasks.py | 18 ++- 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 +- .../ordem_pagamento.sql | 2 +- .../br_rj_riodejaneiro_bilhetagem/schema.yml | 1 - .../transacao.sql | 16 +-- .../staging_cliente.sql | 2 +- .../staging_consorcio.sql | 2 +- .../staging_conta_bancaria.sql | 2 +- .../staging_contato_pessoa_juridica.sql | 2 +- .../staging_grupo.sql | 2 +- .../staging_grupo_linha.sql | 2 +- .../staging_linha.sql | 2 +- .../staging_linha_consorcio.sql | 2 +- .../staging_operadora_transporte.sql | 2 +- .../staging_ordem_pagamento.sql | 2 +- .../staging_ordem_ressarcimento.sql | 2 +- .../staging_pessoa_juridica.sql | 2 +- .../brt_aux_registros_filtrada.sql | 6 +- ...brt_aux_registros_flag_trajeto_correto.sql | 17 ++- .../brt_aux_registros_parada.sql | 18 +-- .../brt_aux_registros_velocidade.sql | 20 +-- .../brt_registros.sql | 4 +- .../brt_registros_desaninhada.sql | 2 +- .../br_rj_riodejaneiro_gtfs/agency_gtfs.sql | 2 +- .../br_rj_riodejaneiro_gtfs/calendar_gtfs.sql | 2 +- .../fare_attributes_gtfs.sql | 2 +- .../fare_rules_gtfs.sql | 2 +- .../feed_info_gtfs.sql | 2 +- .../frequencies_gtfs.sql | 2 +- .../ordem_servico_diaria.sql | 8 +- .../br_rj_riodejaneiro_gtfs/routes_gtfs.sql | 2 +- .../models/br_rj_riodejaneiro_gtfs/schema.yml | 30 ++--- .../servicos_sentido.sql | 2 +- .../shapes_geom_gtfs.sql | 4 +- .../stop_times_gtfs.sql | 2 +- .../br_rj_riodejaneiro_gtfs/stops_gtfs.sql | 2 +- .../br_rj_riodejaneiro_gtfs/trips_gtfs.sql | 4 +- .../br_rj_riodejaneiro_onibus_gps/schema.yaml | 12 +- .../sppo_aux_registros_filtrada.sql | 10 +- ...ppo_aux_registros_flag_trajeto_correto.sql | 31 +++-- .../sppo_aux_registros_parada.sql | 28 ++--- .../sppo_aux_registros_realocacao.sql | 12 +- .../sppo_aux_registros_velocidade.sql | 20 +-- .../sppo_realocacao.sql | 6 +- .../sppo_registros.sql | 8 +- .../rho_registros_sppo.sql | 4 +- .../recurso_sppo_viagens_individuais.sql | 84 ++++++------- .../br_rj_riodejaneiro_sigmob/agency.sql | 2 +- .../agg_stops_vistoriadas.sql | 14 +-- .../br_rj_riodejaneiro_sigmob/calendar.sql | 2 +- .../data_versao_efetiva.sql | 72 +++++------ .../frota_determinada.sql | 2 +- .../frota_determinada_desaninhada.sql | 2 +- .../br_rj_riodejaneiro_sigmob/holidays.sql | 2 +- .../br_rj_riodejaneiro_sigmob/linhas.sql | 2 +- .../br_rj_riodejaneiro_sigmob/routes.sql | 2 +- .../routes_desaninhada.sql | 4 +- .../br_rj_riodejaneiro_sigmob/shapes.sql | 2 +- .../br_rj_riodejaneiro_sigmob/shapes_geom.sql | 38 +++--- .../stop_details.sql | 2 +- .../stop_details_desaninhada.sql | 4 +- .../br_rj_riodejaneiro_sigmob/stop_times.sql | 2 +- .../br_rj_riodejaneiro_sigmob/stops.sql | 2 +- .../stops_desaninhada.sql | 2 +- .../br_rj_riodejaneiro_sigmob/trips.sql | 2 +- .../trips_desaninhada.sql | 2 +- .../staging_operadora_empresa.sql | 2 +- .../staging_operadora_pessoa_fisica.sql | 2 +- .../br_rj_riodejaneiro_veiculos/gps_brt.sql | 22 ++-- .../gps_brt_15_minutos.sql | 22 ++-- .../br_rj_riodejaneiro_veiculos/gps_sppo.sql | 22 ++-- .../models/cadastro/diretorio_consorcios.sql | 4 +- .../models/cadastro/diretorio_operadoras.sql | 4 +- .../models/dashboard_subsidio_sppo/README.md | 2 +- .../models/dashboard_subsidio_sppo/schema.yml | 12 +- .../sumario_servico_dia_historico.sql | 2 +- .../sumario_servico_dia_tipo.sql | 14 +-- .../sumario_servico_dia_tipo_sem_glosa.sql | 10 +- .../valor_tipo_penalidade.sql | 2 +- .../aux_recurso_duplicado.sql | 4 +- .../aux_recurso_fora_prazo.sql | 12 +- .../aux_recurso_incorreto.sql | 10 +- .../aux_recurso_viagem_nao_planejada.sql | 6 +- .../aux_recurso_viagem_paga.sql | 2 +- .../aux_recurso_viagem_recalculada.sql | 2 +- .../aux_registros_status_trajeto.sql | 14 +-- .../aux_viagem_circular.sql | 16 +-- .../aux_viagem_inicio_fim.sql | 30 ++--- .../aux_viagem_registros.sql | 4 +- .../recurso_avaliado.sql | 2 +- .../registros_status_viagem.sql | 10 +- .../models/projeto_subsidio_sppo/schema.yml | 30 ++--- .../subsidio_data_versao_efetiva.sql | 4 +- .../subsidio_quadro_horario.sql | 2 +- .../subsidio_shapes_geom.sql | 28 ++--- .../subsidio_trips_desaninhada.sql | 8 +- .../sumario_subsidio_dia_periodo_recurso.sql | 12 +- .../sumario_subsidio_dia_pos_recurso.sql | 2 +- .../sumario_subsidio_dia_recurso.sql | 4 +- .../projeto_subsidio_sppo/viagem_completa.sql | 26 ++-- .../viagem_completa_recurso.sql | 14 +-- .../viagem_conformidade.sql | 20 +-- .../viagem_conformidade_recurso.sql | 36 +++--- .../viagem_planejada.sql | 34 ++--- queries/models/sources.yml | 2 +- queries/models/veiculo/README.md | 2 +- queries/models/veiculo/sppo_infracao.sql | 2 +- queries/models/veiculo/sppo_licenciamento.sql | 2 +- queries/models/veiculo/sppo_veiculo_dia.sql | 8 +- queries/tests/generic/contained.sql | 2 +- queries/tests/generic/unique_by_date.sql | 2 +- queries/tests/generic/unique_relation.sql | 2 +- 123 files changed, 671 insertions(+), 752 deletions(-) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py index f9817ae6..930aa774 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py @@ -6,49 +6,45 @@ from prefect import Parameter, case from prefect.run_configs import KubernetesRun from prefect.storage import GCS - -# EMD Imports # - -from pipelines.constants import constants as emd_constants from prefeitura_rio.pipelines_utils.custom import Flow -# from prefeitura_rio.pipelines_utils.prefect import get_k8s_dbt_client -from pipelines.tasks import ( - get_current_flow_labels, -) - -# SMTR Imports # +from prefeitura_rio.pipelines_utils.state_handlers import handler_inject_bd_credentials +from pipelines.br_rj_riodejaneiro_brt_gps.tasks import ( + pre_treatment_br_rj_riodejaneiro_brt_gps, +) from pipelines.constants import constants +from pipelines.constants import constants as emd_constants -from pipelines.schedules import ( - every_minute, - every_hour, -) -from pipelines.tasks import ( +# from prefeitura_rio.pipelines_utils.prefect import get_k8s_dbt_client +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 + + +# EMD Imports # + + +# SMTR Imports # # Flows # @@ -62,12 +58,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..37b00b93 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py @@ -3,19 +3,21 @@ Tasks for br_rj_riodejaneiro_brt_gps """ -from datetime import timedelta import traceback +from datetime import timedelta + import pandas as pd from prefect import task +from prefeitura_rio.pipelines_utils.logging import log + +from pipelines.constants import constants +from pipelines.utils.utils import log_critical, map_dict_keys # EMD Imports # -from prefeitura_rio.pipelines_utils.logging import log # SMTR Imports # -from pipelines.constants import constants -from pipelines.utils.utils import log_critical, map_dict_keys # Tasks # @@ -53,9 +55,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 +64,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/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql b/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql index f330e147..b169d600 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem/ordem_pagamento.sql @@ -57,7 +57,7 @@ ordem_pagamento AS ( 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 + FROM {{ ref("staging_ordem_ressarcimento") }} r LEFT JOIN {{ ref("staging_ordem_pagamento") }} p diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml b/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml index cea9ea19..4f7b3abc 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml +++ b/queries/models/br_rj_riodejaneiro_bilhetagem/schema.yml @@ -122,4 +122,3 @@ models: 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 index 0bda3abe..02e41c20 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem/transacao.sql @@ -54,7 +54,7 @@ WITH transacao_aberta AS ( {%- endif %} ), transacao_deduplicada AS ( - SELECT + SELECT * EXCEPT(rn) FROM ( @@ -67,7 +67,7 @@ transacao_deduplicada AS ( WHERE rn = 1 ) -SELECT +SELECT EXTRACT(DATE FROM data_transacao) AS data, EXTRACT(HOUR FROM data_transacao) AS hora, data_transacao AS datetime_transacao, @@ -97,28 +97,28 @@ FROM LEFT JOIN {{ ref("staging_linha") }} AS l ON - t.cd_linha = l.cd_linha + 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 +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 +ON gl.cd_grupo = g.cd_grupo AND t.data_transacao >= g.datetime_inclusao LEFT JOIN {{ ref("staging_linha_consorcio") }} AS lc -ON +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 +ON lc.cd_consorcio = c.cd_consorcio LEFT JOIN {{ ref("staging_operadora_transporte") }} AS o diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql index 3182a75b..7b9c0d93 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_cliente.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH cliente AS ( SELECT data, diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql index 9e2f51d5..8cf67a47 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_consorcio.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH consorcio AS ( SELECT data, 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 index 69dff169..8bb6fc5e 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_conta_bancaria.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH conta_bancaria AS ( SELECT data, 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 index 8e26794a..dbf02068 100644 --- 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 @@ -4,7 +4,7 @@ ) }} -WITH +WITH contato_pessoa_juridica AS ( SELECT data, diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql index 8360a105..2dbb02b6 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH grupo AS ( SELECT data, 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 index f38c0f4f..d7e8e4c3 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_grupo_linha.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH grupo_linha AS ( SELECT data, diff --git a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql index 5bdf0ef9..bf1fd4a6 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH linha AS ( SELECT data, 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 index a6b2705d..730f6cf8 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_linha_consorcio.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH linha_consorcio AS ( SELECT data, 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 index b980933c..8e68db6c 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_operadora_transporte.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH operadora_transporte AS ( SELECT data, 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 index c62a1f74..61deddb1 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_pagamento.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH ordem_pagamento AS ( SELECT data, 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 index c6366092..97aa1b05 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_ordem_ressarcimento.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH ordem_ressarcimento AS ( SELECT data, 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 index f875a626..6a9725b5 100644 --- a/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql +++ b/queries/models/br_rj_riodejaneiro_bilhetagem_staging/staging_pessoa_juridica.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH pessoa_juridica AS ( SELECT data, 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 index d4fee6f1..a0ed5432 100644 --- 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 @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -18,7 +18,7 @@ Filtragem e tratamento básico de registros de gps. */ WITH box AS ( - /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ + /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ SELECT * FROM @@ -60,7 +60,7 @@ filtrada AS ( ( SELECT min_longitude FROM box), ( SELECT min_latitude FROM box), ( SELECT max_longitude FROM box), - ( SELECT max_latitude FROM box)) + ( SELECT max_latitude FROM box)) ) SELECT * except(rn), 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 index d85a58ea..233e1e04 100644 --- 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 @@ -13,7 +13,7 @@ distância menor ou igual ao tamanho do buffer em relação ao traçado definido 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 +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, @@ -44,11 +44,11 @@ WITH 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 + 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, @@ -57,7 +57,7 @@ WITH -- 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 * + SELECT * FROM {{ ref('shapes_geom') }} WHERE id_modal_smtr in ({{ var('brt_id_modal_smtr')|join(', ') }}) AND data_versao = "{{var('versao_fixa_sigmob')}}" @@ -76,7 +76,7 @@ WITH 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, + -- STRUCT({{ maestro_sha }} AS versao_maestro, -- {{ maestro_bq_sha }} AS versao_maestro_bq, -- data_versao AS data_versao_sigmob -- ) versao @@ -90,4 +90,3 @@ WITH 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 index eef00ee3..25c471f6 100644 --- 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 @@ -9,14 +9,14 @@ 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 +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 +WITH terminais as ( -- 1. Selecionamos terminais, criando uma geometria de ponto para cada. select @@ -30,13 +30,13 @@ WITH ), distancia AS ( --2. Calculamos as distâncias e definimos nrow - SELECT - id_veiculo, + SELECT + id_veiculo, timestamp_gps, - data, - servico, - posicao_veiculo_geo, - nome_parada, + 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 @@ -59,7 +59,7 @@ SELECT timestamp_gps, servico, /* - 3. e 4. Identificamos o status do veículo como 'terminal', 'garagem' (para os veículos parados) ou + 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 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 index 3fed5312..4d92d01b 100644 --- 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 @@ -7,8 +7,8 @@ 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 à +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). @@ -19,7 +19,7 @@ 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 +with t_velocidade as ( select data, @@ -48,7 +48,7 @@ with SECOND )), 0 - ) * 3.6 velocidade + ) * 3.6 velocidade FROM {{ ref('brt_aux_registros_filtrada') }} {% if not flags.FULL_REFRESH -%} WHERE @@ -57,12 +57,12 @@ with {% endif %} ), medias as ( - select + select data, id_veiculo, timestamp_gps, servico, - distancia, + distancia, velocidade, # velocidade do pontual AVG(velocidade) OVER ( PARTITION BY id_veiculo, servico @@ -72,16 +72,16 @@ with from t_velocidade ) SELECT - timestamp_gps, + timestamp_gps, data, id_veiculo, - servico, + servico, distancia, ROUND( CASE WHEN velocidade_media > {{ var('velocidade_maxima') }} THEN {{ var('velocidade_maxima') }} - ELSE velocidade_media - END, + ELSE velocidade_media + END, 1) as velocidade, -- 2. Determinação do estado de movimento do veículo. case diff --git a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql b/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql index 5758fc61..fbe2bbc3 100644 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql +++ b/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros.sql @@ -1,9 +1,9 @@ -SELECT +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 +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 index b9773e34..db2c90c5 100644 --- a/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_brt_gps/brt_registros_desaninhada.sql @@ -1,4 +1,4 @@ -SELECT +SELECT data, hora, id_veiculo, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql index 7e40699b..25149b9f 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/agency_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['agency_id', 'data_versao'], alias = 'agency', -) }} +) }} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql index 81f7b2b4..3b399112 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/calendar_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['service_id', 'data_versao'], alias = 'calendar' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql index 9aa93e40..166f8706 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/fare_attributes_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['fare_id', 'data_versao'], alias = 'fare_attributes' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql index 27d72b8d..bfcc5401 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/fare_rules_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['fare_id', 'data_versao'], alias = 'fare_rules' -)}} +)}} SELECT diff --git a/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql index c2620a06..e57f63c2 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/feed_info_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['feed_publisher_name', 'data_versao'], alias = 'feed_info' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql index 4573ebaa..31bd6ba4 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/frequencies_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['trip_id', 'start_time', 'data_versao'], alias = 'frequencies' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql b/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql index 12651e2e..5d0c4393 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/ordem_servico_diaria.sql @@ -1,6 +1,6 @@ {{ config( materialized="view" -) }} +) }} WITH data_versao AS ( @@ -17,12 +17,12 @@ WITH SELECT * FROM - {{ ref("ordem_servico_gtfs") }} + {{ 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 ( + MAX(distancia_total_planejada) AS km FOR + tipo_dia IN ( 'Dia Útil' AS du, 'Ponto Facultativo' AS pf, 'Sabado' AS sab, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql index a3da2df7..15d1790b 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/routes_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['route_id', 'data_versao'], alias = 'routes' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/schema.yml b/queries/models/br_rj_riodejaneiro_gtfs/schema.yml index 25594898..c6008c7f 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/schema.yml +++ b/queries/models/br_rj_riodejaneiro_gtfs/schema.yml @@ -18,7 +18,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: calendar_gtfs @@ -46,7 +46,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: calendar_dates_gtfs @@ -60,7 +60,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: fare_attributes_gtfs @@ -82,7 +82,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: fare_rules_gtfs @@ -100,7 +100,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: feed_info_gtfs @@ -126,7 +126,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: frequencies_gtfs @@ -144,7 +144,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: routes_gtfs @@ -163,7 +163,7 @@ models: - 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." + 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 @@ -178,7 +178,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: shapes_geom_gtfs @@ -190,7 +190,7 @@ models: description: "Data de referência do feed (versão)." - name: shape description: "Dado geográfico construído com a query." - - name: versao_modelo + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: shapes_gtfs @@ -208,7 +208,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: stops_gtfs @@ -246,7 +246,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: stop_times_gtfs @@ -278,7 +278,7 @@ models: 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 + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: trips_gtfs @@ -306,7 +306,7 @@ models: description: "Indica se bicicletas são permitidas." - name: data_versao description: "Data de referência do feed (versão)." - - name: versao_modelo + - name: versao_modelo description: "Código de controle de versão (SHA do GitHub)." - name: ordem_servico_gtfs @@ -338,5 +338,5 @@ models: 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 + - 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 index 5e0bbfdb..6ff2e7fd 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/servicos_sentido.sql @@ -1,6 +1,6 @@ {{ config( materialized="view" -) }} +) }} WITH servicos_exclusivos_sabado AS ( diff --git a/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql index 4ec84c74..6feb3706 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/shapes_geom_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['shape_id', 'data_versao'], alias = 'shapes_geom' -) }} +) }} WITH contents AS ( @@ -70,7 +70,7 @@ ids AS ( ROW_NUMBER() OVER(PARTITION BY data_versao, shape_id) rn FROM merged m ) -SELECT +SELECT * EXCEPT(rn), '{{ var("version") }}' as versao_modelo FROM ids diff --git a/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql index 32b59921..e58f2d60 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/stop_times_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['trip_id', 'data_versao'], alias = 'stop_times' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql index 4000571f..70d419cf 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/stops_gtfs.sql @@ -4,7 +4,7 @@ 'granularity': 'day' }, unique_key = ['stop_id', 'data_versao'], alias = 'stops' -)}} +)}} SELECT SAFE_CAST(data_versao AS DATE) data_versao, diff --git a/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql b/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql index ee593466..c273ba08 100644 --- a/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql +++ b/queries/models/br_rj_riodejaneiro_gtfs/trips_gtfs.sql @@ -1,9 +1,9 @@ -{{config( +{{config( partition_by = { 'field' :'data_versao', 'data_type' :'date', 'granularity': 'day' }, unique_key = ['trip_id','data_versao'], - alias = 'trips' + alias = 'trips' )}} diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml b/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml index 99b6cedc..908fafc2 100644 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml +++ b/queries/models/br_rj_riodejaneiro_onibus_gps/schema.yaml @@ -88,7 +88,7 @@ models: # - not_null: # partition_column: data - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" + 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" @@ -124,7 +124,7 @@ models: 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'" + 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)" @@ -182,15 +182,15 @@ models: # - no_space: # partition_column: data - name: datetime_realocacao - description: "Datetime_realocacao que o registro da realocação foi informado pela empresa operadora" + 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'" + 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'" + 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 @@ -202,7 +202,7 @@ models: # - not_null: # partition_column: data - name: data - description: "Data de partição, conforme 'timestamp_captura' da tabela 'sppo_registros'" + 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)" 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 index 0573c6fd..8ac8cff9 100644 --- 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 @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -18,14 +18,14 @@ Filtragem e tratamento básico de registros de gps. */ WITH box AS ( - /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ + /*1. Geometria de caixa que contém a área do município de Rio de Janeiro.*/ SELECT * FROM - {{ var('limites_caixa') }} + {{ 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.*/ + /*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 @@ -70,7 +70,7 @@ filtrada AS ( ( SELECT min_longitude FROM box), ( SELECT min_latitude FROM box), ( SELECT max_longitude FROM box), - ( SELECT max_latitude FROM box)) + ( SELECT max_latitude FROM box)) ) SELECT * except(rn), 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 index 3c75a055..710b2e46 100644 --- 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 @@ -14,7 +14,7 @@ distância menor ou igual ao tamanho do buffer em relação ao traçado definido 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 +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, @@ -23,16 +23,16 @@ possíveis para a linha informada. */ WITH registros AS ( - SELECT - id_veiculo, - linha, - latitude, - longitude, - data, - posicao_veiculo_geo, + SELECT + id_veiculo, + linha, + latitude, + longitude, + data, + posicao_veiculo_geo, timestamp_gps FROM - {{ ref('sppo_aux_registros_filtrada') }} r + {{ 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')}}") @@ -52,11 +52,11 @@ WITH 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 + 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, @@ -65,7 +65,7 @@ WITH -- 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 * + SELECT * FROM {{ ref('shapes_geom') }} WHERE id_modal_smtr in ({{ var('sppo_id_modal_smtr')|join(', ') }}) AND data_versao = "{{ var('versao_fixa_sigmob')}}" @@ -93,4 +93,3 @@ WITH 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 index 49da8094..5fb07a7f 100644 --- 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 @@ -10,14 +10,14 @@ 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 +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 +WITH terminais as ( -- 1. Selecionamos terminais, criando uma geometria de ponto para cada. select @@ -31,25 +31,25 @@ WITH ), distancia AS ( --2. Calculamos as distâncias e definimos nrow - SELECT - id_veiculo, + SELECT + id_veiculo, timestamp_gps, - data, - linha, - posicao_veiculo_geo, - nome_parada, + 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, + SELECT + id_veiculo, timestamp_gps, - data, - linha, + data, + linha, posicao_veiculo_geo - FROM + FROM {{ ref('sppo_aux_registros_filtrada') }} {%if not flags.FULL_REFRESH %} WHERE @@ -65,7 +65,7 @@ SELECT timestamp_gps, linha, /* - 3. e 4. Identificamos o status do veículo como 'terminal', 'garagem' (para os veículos parados) ou + 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 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 index b6f53b1b..9fa59556 100644 --- 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 @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -11,7 +11,7 @@ -- 1. Filtra realocações válidas dentro do intervalo de GPS avaliado with realocacao as ( - select + select * except(datetime_saida), case when datetime_saida is null then datetime_operacao @@ -23,11 +23,11 @@ with realocacao as ( -- 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 + and data between DATE("{{var('date_range_start')}}") and DATE(datetime_add("{{var('date_range_end')}}", interval 1 hour)) - and + and datetime_operacao between datetime("{{var('date_range_start')}}") and datetime_add("{{var('date_range_end')}}", interval 1 hour) {%- endif -%} @@ -56,7 +56,7 @@ combinacao as ( g.hora from gps g inner join realocacao r - on + on g.ordem = r.id_veiculo and g.linha != r.servico and g.timestamp_gps between r.datetime_entrada and r.datetime_saida @@ -65,7 +65,7 @@ combinacao as ( select * except(rn) from ( - select + select *, row_number() over (partition by id_veiculo, timestamp_gps order by datetime_realocacao desc) as rn from combinacao 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 index aadaea0f..4cd06af9 100644 --- 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 @@ -7,8 +7,8 @@ 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 à +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). @@ -19,7 +19,7 @@ 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 +with t_velocidade as ( select data, @@ -48,7 +48,7 @@ with SECOND )), 0 - ) * 3.6 velocidade + ) * 3.6 velocidade FROM {{ ref("sppo_aux_registros_filtrada") }} {%if not flags.FULL_REFRESH -%} WHERE @@ -57,12 +57,12 @@ with {%- endif -%} ), medias as ( - select + select data, id_veiculo, timestamp_gps, linha, - distancia, + distancia, velocidade, # velocidade do pontual AVG(velocidade) OVER ( PARTITION BY id_veiculo, linha @@ -72,16 +72,16 @@ with from t_velocidade ) SELECT - timestamp_gps, + timestamp_gps, data, id_veiculo, - linha, + linha, distancia, ROUND( CASE WHEN velocidade_media > {{ var('velocidade_maxima') }} THEN {{ var('velocidade_maxima') }} - ELSE velocidade_media - END, + ELSE velocidade_media + END, 1) as velocidade, -- 2. Determinação do estado de movimento do veículo. case diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql index 174ce3b1..991f48b3 100644 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql +++ b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_realocacao.sql @@ -1,9 +1,9 @@ -SELECT +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]+'), "") + 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, diff --git a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql index 1e41af40..3aab65a8 100644 --- a/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql +++ b/queries/models/br_rj_riodejaneiro_onibus_gps/sppo_registros.sql @@ -1,15 +1,15 @@ -SELECT +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]+'), "") + 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 +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 index b92df3bc..b6a6dae4 100644 --- a/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql +++ b/queries/models/br_rj_riodejaneiro_rdo/rho_registros_sppo.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -14,5 +14,5 @@ FROM {{ref('rho_registros_sppo_view')}} {% if is_incremental() %} WHERE - data_particao BETWEEN DATE("{{var('date_range_start')}}") AND DATE("{{var('date_range_end')}}") + data_particao BETWEEN DATE("{{var('date_range_start')}}") AND DATE("{{var('date_range_end')}}") {% endif %} 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 index deca41de..95b9abf8 100644 --- a/queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql +++ b/queries/models/br_rj_riodejaneiro_recurso/recurso_sppo_viagens_individuais.sql @@ -10,76 +10,76 @@ WITH recurso_sppo AS ( SELECT - ROW_NUMBER() OVER(PARTITION BY protocol ORDER BY timestamp_captura DESC) AS rn, + 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')}} + FROM + {{source('br_rj_riodejaneiro_recurso_staging', + 'recurso_sppo_viagens_individuais')}} {% if is_incremental() -%} WHERE - DATE(data) BETWEEN DATE("{{var('date_range_start')}}") + 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(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 + SELECT id_recurso, datetime_recurso, - datetime_captura, + 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, + ) 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 + FROM exploded PIVOT( ANY_VALUE(value) FOR field_id IN ( - '111870', '111871', '111872', '111873', - '111901', '111865', '111867', '111868', - '111869', '111866', '111904', '125615', + '111870', '111871', '111872', '111873', + '111901', '111865', '111867', '111868', + '111869', '111866', '111904', '125615', '111900' ) ) -), +), tratado AS ( - SELECT - id_recurso, - datetime_captura, + SELECT + id_recurso, + datetime_captura, datetime_recurso, - SAFE_CAST(p.111865 AS STRING) AS julgamento, + 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, + 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, + 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 + +FROM pivotado p ) @@ -93,14 +93,14 @@ SELECT 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)), + 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, @@ -108,6 +108,6 @@ SELECT t.motivo_julgamento, t.observacao, DATE(datetime_recurso) AS data, - + FROM tratado t diff --git a/queries/models/br_rj_riodejaneiro_sigmob/agency.sql b/queries/models/br_rj_riodejaneiro_sigmob/agency.sql index 0df94f2f..00bf3d6b 100755 --- a/queries/models/br_rj_riodejaneiro_sigmob/agency.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/agency.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(agency_id AS STRING) agency_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql b/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql index 77f2e115..ea20934f 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/agg_stops_vistoriadas.sql @@ -1,11 +1,11 @@ WITH t AS ( -SELECT +SELECT data_versao, - case - when - json_value(content, '$.IDPropriedadeParada') is null - then false - else true + 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, @@ -18,4 +18,4 @@ select data_versao, AP, Bairro, count(*) n_pontos from t group by data_versao, AP, Bairro -order by 1,2,3 \ No newline at end of file +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 index 54b9c397..d2ddc80c 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/calendar.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/calendar.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(service_id AS STRING) service_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql b/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql index 11ffcc38..332fd350 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/data_versao_efetiva.sql @@ -12,11 +12,11 @@ with agency as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -26,11 +26,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), calendar as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -40,11 +40,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), frota_determinada as ( -SELECT +SELECT data, - DATE(data_versao) as data_versao_original, + 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) + 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 ( @@ -54,11 +54,11 @@ LEFT JOIN ( ON DATE(data) = DATE(data_versao) ), holidays as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -68,11 +68,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), linhas as ( - SELECT + SELECT data, - DATE(data_versao) as data_versao_original, + 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) + 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 ( @@ -82,11 +82,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), routes as ( -SELECT +SELECT data, - DATE(data_versao) as data_versao_original, + 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) + 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 ( @@ -96,11 +96,11 @@ LEFT JOIN ( ON data = data_versao ), shapes as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -110,11 +110,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), stop_details as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -124,11 +124,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), stop_times as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -138,11 +138,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), stops as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -152,11 +152,11 @@ LEFT JOIN ( ON data = DATE(data_versao) ), trips as ( -SELECT +SELECT data, - data_versao as data_versao_original, + 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) + 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 ( @@ -179,7 +179,7 @@ joined as ( 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 + from agency a join shapes s on s.data = a.data join calendar c @@ -201,8 +201,8 @@ joined as ( join trips t on a.data = t.data ) -select * -from joined +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}}") diff --git a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql index 6cab760b..1fb5623c 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(route_id AS STRING) route_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql index 7f8f2d28..54c2ff98 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/frota_determinada_desaninhada.sql @@ -1,4 +1,4 @@ -select +select data_versao, json_value(content, '$.IDFrotaDeterminada') IDFrotaDeterminada, json_value(content, '$.TipoOnibusID') TipoOnibusID, diff --git a/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql b/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql index ea8c0289..a582cd5c 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/holidays.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT DATE(SAFE_CAST(Data AS DATETIME)) data, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql b/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql index e4f9be0f..cbb7bf4a 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/linhas.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(linha_id AS STRING) linha_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/routes.sql b/queries/models/br_rj_riodejaneiro_sigmob/routes.sql index 3bc25346..79eecb82 100755 --- a/queries/models/br_rj_riodejaneiro_sigmob/routes.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/routes.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(route_id AS STRING) route_id, REPLACE(content, "None", '') content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql index c06c60d8..c28dac76 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/routes_desaninhada.sql @@ -1,5 +1,5 @@ with desaninhada as ( - select + select data_versao, json_value(content, '$.agency_id') agency_id, json_value(content, '$.route_short_name') route_short_name, @@ -50,7 +50,7 @@ ultimas_versoes as ( where DATE(fimVigencia) >= DATE(data_versao) or fimVigencia is null order by route_id, fimVigencia ) -select +select * from ultimas_versoes diff --git a/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql b/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql index f2c22310..3616f454 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/shapes.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(shape_id AS STRING) shape_id, REPLACE(content, "None", '') content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql b/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql index bf596717..c113885b 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/shapes_geom.sql @@ -14,7 +14,7 @@ {% endif %} with trips as ( - SELECT + SELECT trip_id, shape_id, route_id, @@ -23,11 +23,11 @@ with WHERE DATE(data_versao) between DATE("{{start_date}}") and DATE_ADD(DATE("{{start_date}}"), INTERVAL 15 DAY) ), linhas as ( - SELECT - trip_id, + SELECT + trip_id, shape_id, - t.route_id, - route_short_name linha, + t.route_id, + route_short_name linha, idModalSmtr id_modal_smtr, t.data_versao, FROM trips t @@ -36,12 +36,12 @@ with 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 + on t.route_id = r.route_id and t.data_versao = r.data_versao ), contents as ( - -- EXTRACTS VALUES FROM JSON STRING FIELD 'content' - SELECT + -- EXTRACTS VALUES FROM JSON STRING FIELD 'content' + SELECT shape_id, ST_GEOGPOINT( SAFE_CAST(json_value(content, "$.shape_pt_lon") AS FLOAT64), @@ -53,8 +53,8 @@ with WHERE DATE(data_versao) between DATE("{{start_date}}") and DATE_ADD(DATE("{{start_date}}"), INTERVAL 15 DAY) ), pts as ( - select - *, + select + *, max(shape_pt_sequence) over( partition by data_versao, shape_id ) final_pt_sequence @@ -63,8 +63,8 @@ with ), shapes as ( -- BUILD LINESTRINGS OVER SHAPE POINTS - SELECT - shape_id, + SELECT + shape_id, data_versao, st_makeline(ARRAY_AGG(ponto_shape)) as shape FROM pts @@ -72,7 +72,7 @@ with ), boundary as ( -- EXTRACT START AND END POINTS FROM SHAPES - SELECT + SELECT c1.shape_id, c1.ponto_shape start_pt, c2.ponto_shape end_pt, @@ -83,7 +83,7 @@ with ), merged as ( -- JOIN SHAPES AND BOUNDARY POINTS - SELECT + SELECT s.*, b.* except(data_versao, shape_id), round(ST_LENGTH(shape),1) shape_distance, @@ -92,21 +92,21 @@ with ON s.shape_id = b.shape_id and s.data_versao = b.data_versao ), ids as ( - SELECT + SELECT trip_id, m.shape_id, route_id, id_modal_smtr, - replace(linha, " ", "") as linha_gtfs, + replace(linha, " ", "") as linha_gtfs, shape, - shape_distance, - start_pt, + 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 + FROM merged m JOIN linhas l ON m.shape_id = l.shape_id AND m.data_versao = l.data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql index ec2a44da..d578d6cb 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/stop_details.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(stop_id AS STRING) stop_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql index 407bb4e6..5440b975 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/stop_details_desaninhada.sql @@ -1,5 +1,5 @@ /*Desaninha os campos presentes em 'content' da tabela stop_details*/ -SELECT +SELECT stop_id, json_value(content, '$.stop_name') stop_name, json_value(content, '$.stop_desc') stop_desc, @@ -40,6 +40,6 @@ SELECT json_value(content, '$.parent_station') parent_station, json_value(content, '$.nome_ponto') nome_ponto, json_value(content, '$.route_type') route_type, - data_versao + 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 index b9c8b74f..249e65f5 100755 --- a/queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/stop_times.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(stop_id AS STRING) stop_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stops.sql b/queries/models/br_rj_riodejaneiro_sigmob/stops.sql index 2250b677..92dacbbb 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/stops.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/stops.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(stop_id AS STRING) stop_id, REPLACE(content, "None", '') content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql index c0dd04d1..edb4ef0d 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/stops_desaninhada.sql @@ -1,4 +1,4 @@ -SELECT +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, diff --git a/queries/models/br_rj_riodejaneiro_sigmob/trips.sql b/queries/models/br_rj_riodejaneiro_sigmob/trips.sql index 92856abb..cceaa4f8 100755 --- a/queries/models/br_rj_riodejaneiro_sigmob/trips.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/trips.sql @@ -19,7 +19,7 @@ TIPOS: */ -SELECT +SELECT SAFE_CAST(trip_id AS STRING) trip_id, REPLACE(content,"None","") content, SAFE_CAST(data_versao AS DATE) data_versao diff --git a/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql b/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql index e2c3dc02..a4381820 100644 --- a/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql +++ b/queries/models/br_rj_riodejaneiro_sigmob/trips_desaninhada.sql @@ -38,7 +38,7 @@ ultimas_versoes as ( on c.route_id = r.route_id and c.data_versao = r.data_versao ) -select +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 index 97978ab0..dfe2bfbe 100644 --- a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql +++ b/queries/models/br_rj_riodejaneiro_stu/staging_operadora_empresa.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH operadora_empresa AS ( SELECT data, 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 index dd80db8c..08a1e306 100644 --- a/queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql +++ b/queries/models/br_rj_riodejaneiro_stu/staging_operadora_pessoa_fisica.sql @@ -4,7 +4,7 @@ ) }} -WITH +WITH operadora_pessoa_fisica AS ( SELECT data, diff --git a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql b/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql index 2e50a6e8..e0d5ace8 100644 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql +++ b/queries/models/br_rj_riodejaneiro_veiculos/gps_brt.sql @@ -25,7 +25,7 @@ com o traçado da linha informada. WITH registros as ( -- 1. registros_filtrada - SELECT + SELECT id_veiculo, timestamp_gps, timestamp_captura, @@ -45,11 +45,11 @@ WITH -- 2. velocidades SELECT id_veiculo, timestamp_gps, servico, velocidade, distancia, flag_em_movimento - FROM {{ ref('brt_aux_registros_velocidade') }} + FROM {{ ref('brt_aux_registros_velocidade') }} ), paradas as ( -- 3. paradas - SELECT + SELECT id_veiculo, timestamp_gps, servico, tipo_parada, FROM {{ ref('brt_aux_registros_parada') }} ), @@ -57,11 +57,11 @@ WITH -- 4. flag_trajeto_correto SELECT id_veiculo, - timestamp_gps, + timestamp_gps, servico, - route_id, + route_id, flag_linha_existe_sigmob, - flag_trajeto_correto, + flag_trajeto_correto, flag_trajeto_correto_hist FROM {{ ref('brt_aux_registros_flag_trajeto_correto') }} ) @@ -75,8 +75,8 @@ SELECT replace(r.servico, " ", "") as servico, r.latitude, r.longitude, - CASE - WHEN + CASE + WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true THEN true ELSE false @@ -92,7 +92,7 @@ SELECT WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false THEN 'Operando fora trajeto' WHEN flag_em_movimento is false - THEN + THEN CASE WHEN tipo_parada is not null THEN concat("Parado ", tipo_parada) @@ -125,9 +125,9 @@ ON AND r.timestamp_gps = v.timestamp_gps AND r.servico = v.servico -JOIN +JOIN paradas p -ON +ON r.id_veiculo = p.id_veiculo AND r.timestamp_gps = p.timestamp_gps AND r.servico = p.servico 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 index 2e50a6e8..e0d5ace8 100644 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql +++ b/queries/models/br_rj_riodejaneiro_veiculos/gps_brt_15_minutos.sql @@ -25,7 +25,7 @@ com o traçado da linha informada. WITH registros as ( -- 1. registros_filtrada - SELECT + SELECT id_veiculo, timestamp_gps, timestamp_captura, @@ -45,11 +45,11 @@ WITH -- 2. velocidades SELECT id_veiculo, timestamp_gps, servico, velocidade, distancia, flag_em_movimento - FROM {{ ref('brt_aux_registros_velocidade') }} + FROM {{ ref('brt_aux_registros_velocidade') }} ), paradas as ( -- 3. paradas - SELECT + SELECT id_veiculo, timestamp_gps, servico, tipo_parada, FROM {{ ref('brt_aux_registros_parada') }} ), @@ -57,11 +57,11 @@ WITH -- 4. flag_trajeto_correto SELECT id_veiculo, - timestamp_gps, + timestamp_gps, servico, - route_id, + route_id, flag_linha_existe_sigmob, - flag_trajeto_correto, + flag_trajeto_correto, flag_trajeto_correto_hist FROM {{ ref('brt_aux_registros_flag_trajeto_correto') }} ) @@ -75,8 +75,8 @@ SELECT replace(r.servico, " ", "") as servico, r.latitude, r.longitude, - CASE - WHEN + CASE + WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true THEN true ELSE false @@ -92,7 +92,7 @@ SELECT WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false THEN 'Operando fora trajeto' WHEN flag_em_movimento is false - THEN + THEN CASE WHEN tipo_parada is not null THEN concat("Parado ", tipo_parada) @@ -125,9 +125,9 @@ ON AND r.timestamp_gps = v.timestamp_gps AND r.servico = v.servico -JOIN +JOIN paradas p -ON +ON r.id_veiculo = p.id_veiculo AND r.timestamp_gps = p.timestamp_gps AND r.servico = p.servico diff --git a/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql b/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql index 7ed9db8f..41e56c81 100644 --- a/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql +++ b/queries/models/br_rj_riodejaneiro_veiculos/gps_sppo.sql @@ -25,7 +25,7 @@ com o traçado da linha informada. WITH registros as ( -- 1. registros_filtrada - SELECT + SELECT id_veiculo, timestamp_gps, timestamp_captura, @@ -49,7 +49,7 @@ WITH ), paradas as ( -- 3. paradas - SELECT + SELECT id_veiculo, timestamp_gps, linha, tipo_parada, FROM {{ ref('sppo_aux_registros_parada') }} ), @@ -57,11 +57,11 @@ WITH -- 4. flag_trajeto_correto SELECT id_veiculo, - timestamp_gps, + timestamp_gps, linha, - route_id, + route_id, flag_linha_existe_sigmob, - flag_trajeto_correto, + flag_trajeto_correto, flag_trajeto_correto_hist FROM {{ ref('sppo_aux_registros_flag_trajeto_correto') }} @@ -71,13 +71,13 @@ SELECT "SPPO" modo, r.timestamp_gps, date(r.timestamp_gps) data, - extract(time from r.timestamp_gps) hora, + extract(time from r.timestamp_gps) hora, r.id_veiculo, r.linha as servico, r.latitude, r.longitude, - CASE - WHEN + CASE + WHEN flag_em_movimento IS true AND flag_trajeto_correto_hist is true THEN true ELSE false @@ -93,7 +93,7 @@ SELECT WHEN flag_em_movimento is true and flag_trajeto_correto_hist is false THEN 'Operando fora trajeto' WHEN flag_em_movimento is false - THEN + THEN CASE WHEN tipo_parada is not null THEN concat("Parado ", tipo_parada) @@ -126,9 +126,9 @@ ON AND r.timestamp_gps = v.timestamp_gps AND r.linha = v.linha -JOIN +JOIN paradas p -ON +ON r.id_veiculo = p.id_veiculo AND r.timestamp_gps = p.timestamp_gps AND r.linha = p.linha diff --git a/queries/models/cadastro/diretorio_consorcios.sql b/queries/models/cadastro/diretorio_consorcios.sql index 49d2f991..4bbcc518 100644 --- a/queries/models/cadastro/diretorio_consorcios.sql +++ b/queries/models/cadastro/diretorio_consorcios.sql @@ -6,7 +6,7 @@ }} WITH stu AS ( - SELECT + SELECT perm_autor AS id_consorcio, cnpj, processo, @@ -35,4 +35,4 @@ LEFT JOIN ON j.cd_consorcio = s.cd_consorcio_jae - + diff --git a/queries/models/cadastro/diretorio_operadoras.sql b/queries/models/cadastro/diretorio_operadoras.sql index 4d4a6c70..1db1dc3b 100644 --- a/queries/models/cadastro/diretorio_operadoras.sql +++ b/queries/models/cadastro/diretorio_operadoras.sql @@ -71,14 +71,14 @@ stu AS ( SELECT *, - CASE + CASE WHEN modo = 'Complementar (cabritinho)' THEN 'Van' ELSE modo END AS modo_join FROM stu_pessoa_fisica ) -SELECT +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, diff --git a/queries/models/dashboard_subsidio_sppo/README.md b/queries/models/dashboard_subsidio_sppo/README.md index 8d6a4c50..6e2db99f 100644 --- a/queries/models/dashboard_subsidio_sppo/README.md +++ b/queries/models/dashboard_subsidio_sppo/README.md @@ -17,7 +17,7 @@ Este modelo tem por objetivo calcular o valor diário de subsídio para as empre 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); +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. diff --git a/queries/models/dashboard_subsidio_sppo/schema.yml b/queries/models/dashboard_subsidio_sppo/schema.yml index 8456e669..0140c728 100644 --- a/queries/models/dashboard_subsidio_sppo/schema.yml +++ b/queries/models/dashboard_subsidio_sppo/schema.yml @@ -135,8 +135,8 @@ models: 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." @@ -149,15 +149,15 @@ models: - 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)." + 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)." + 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)." + 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: @@ -244,7 +244,7 @@ models: (ida), V (volta), C (circular)" - name: id_viagem description: "Código identificador da viagem - (id_veiculo + servico_realizado + sentido + shape_id_planejado + datetime_partida)" + (id_veiculo + servico_realizado + sentido + shape_id_planejado + datetime_partida)" - name: datetime_partida description: "Horário de início da viagem" - name: datetime_chegada diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql index 19c7b97a..522919ac 100644 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql +++ b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_historico.sql @@ -6,7 +6,7 @@ WITH vista FROM {{ ref("viagem_planejada") }} - --`rj-smtr`.`projeto_subsidio_sppo`.`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 ( diff --git a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql index b67ccb82..5d39e5cd 100644 --- a/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql +++ b/queries/models/dashboard_subsidio_sppo/sumario_servico_dia_tipo.sql @@ -49,7 +49,7 @@ SELECT DISTINCT r'\bnao\b', 'n' -- Substitui "não" por "n" ), r'[_\s]+', '_' -- Substitui múltiplos espaços ou underscores por um único "_" - ) AS status_tratado + ) AS status_tratado FROM status_principal {% endset %} @@ -142,11 +142,11 @@ WITH FROM tabela_status_array), status_flat AS ( - SELECT DISTINCT - status_t, - status - FROM - status_update, + SELECT DISTINCT + status_t, + status + FROM + status_update, UNNEST(status_array) AS status_t), servico_km_tipo_atualizado AS ( SELECT @@ -156,7 +156,7 @@ WITH servico_km_tipo AS k LEFT JOIN status_flat AS u - ON + ON u.status_t = k.tipo_viagem), servico_km AS ( SELECT 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 index 26071bf2..784d5094 100644 --- 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 @@ -1,13 +1,13 @@ --- TABELA TEMPORÁRIA até decisão judicial final +-- 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 +WITH parametros AS ( - SELECT + 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 + 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' diff --git a/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql b/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql index 12902b20..0409c43d 100644 --- a/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql +++ b/queries/models/dashboard_subsidio_sppo/valor_tipo_penalidade.sql @@ -16,6 +16,6 @@ with penalidade as ( 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/projeto_subsidio_sppo/aux_recurso_duplicado.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql index ef360cc6..80aa8769 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_duplicado.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='ephemeral' ) @@ -16,7 +16,7 @@ recursos_duplicados as ( concat("Pedidos sobrepostos: ", string_agg(s2.protocolo, ", ")) as observacao FROM recursos s1 inner join recursos s2 - on + on s1.id_veiculo = s2.id_veiculo and s1.datetime_partida <= s2.datetime_partida and s2.datetime_partida < s1.datetime_chegada diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql index d45b085c..1560e079 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_fora_prazo.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='ephemeral' ) @@ -10,15 +10,15 @@ with recursos as ( where id_julgamento is null ), recurso_prazo as ( - select + select r.protocolo, 2 as id_julgamento, concat("Prazo (30 dias após apuração):", data_fim_recurso) as observacao - from + from recursos r - inner join + inner join {{ var("recurso_prazo") }} p - on + 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) ) @@ -26,6 +26,6 @@ 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 +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 index c5345ae9..8a5d9e3e 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_incorreto.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='ephemeral' ) @@ -17,7 +17,7 @@ with recursos_tratada as ( then datetime(date_add(data_viagem, interval 1 day), hora_chegada) else datetime(data_viagem, hora_chegada) end as datetime_chegada, - case + case -- caso 1: linha regular => SA when tipo_servico_extra is null and tipo_servico = "SA" then linha -- caso 2: lecd @@ -35,7 +35,7 @@ with recursos_tratada as ( recursos_incorretos as ( select *, - case + 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." @@ -46,9 +46,9 @@ recursos_incorretos as ( ) select *, - case + case when observacao is not null then 1 - else null + 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 index 550349f4..3f2ada84 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_nao_planejada.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='ephemeral' ) @@ -8,7 +8,7 @@ with recursos as ( select * FROM {{ ref("aux_recurso_incorreto") }} where id_julgamento is null - + ), servico_planejado as ( select data, servico, sentido @@ -33,6 +33,6 @@ 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 +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 index d8eefc25..5f2eb84a 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_paga.sql @@ -18,7 +18,7 @@ with recursos as ( ), -- 1. Avalia recursos cuja viagem ja foi paga viagens as ( - select * + 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")}}') diff --git a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql index cee3de03..4b6bbe0a 100644 --- a/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql +++ b/queries/models/projeto_subsidio_sppo/aux_recurso_viagem_recalculada.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='ephemeral' ) diff --git a/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql b/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql index 445623cf..6f36e3ee 100644 --- a/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql +++ b/queries/models/projeto_subsidio_sppo/aux_registros_status_trajeto.sql @@ -1,6 +1,6 @@ -- 1. Seleciona sinais de GPS registrados no período with gps as ( - select + 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 @@ -14,7 +14,7 @@ with gps as ( {% endif %} substr(id_veiculo, 2, 3) as id_empresa, ST_GEOGPOINT(longitude, latitude) posicao_veiculo_geo - from + 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") }}") @@ -57,22 +57,22 @@ status_viagem as ( then 'middle' else 'out' end status_viagem - from + from gps g inner join ( - select + select * from {{ ref("viagem_planejada") }} where data between date_sub(date("{{ var("run_date") }}"), interval 1 day) and date("{{ var("run_date") }}") ) s - on + on g.data = s.data and g.servico = s.servico ) -select +select *, '{{ var("version") }}' as versao_modelo -from +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 index f226a6a2..4cae15c9 100644 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql +++ b/queries/models/projeto_subsidio_sppo/aux_viagem_circular.sql @@ -1,10 +1,10 @@ -- 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 + select t.* from ( - select + 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, @@ -14,7 +14,7 @@ with ida_volta_circular as ( 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 + from {{ ref("aux_viagem_inicio_fim") }} v where sentido = "C" @@ -28,7 +28,7 @@ with ida_volta_circular as ( -- (mantem ida e volta separadas, mas com o mesmo id) viagem_circular as ( select distinct - * + * from ( select case @@ -42,9 +42,9 @@ viagem_circular as ( ) then c.id_viagem end as id_viagem, v.* except(id_viagem) - from + from {{ ref("aux_viagem_inicio_fim") }} v - inner join + inner join ida_volta_circular c on c.id_veiculo = v.id_veiculo @@ -57,13 +57,13 @@ viagem_circular as ( -- 3. Junta viagens circulares tratadas às viagens não circulares já identificadas select * -from +from viagem_circular v union all ( select * from {{ ref("aux_viagem_inicio_fim") }} v - where + 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 index 8242b756..236c4cca 100644 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql +++ b/queries/models/projeto_subsidio_sppo/aux_viagem_inicio_fim.sql @@ -1,6 +1,6 @@ -- 1. Cria colunas identificadoras de início (starts) e fim (ends) de viagens with aux_status as ( - select + select *, string_agg(status_viagem,"") over ( partition by id_veiculo, shape_id @@ -10,44 +10,44 @@ with aux_status as ( partition by id_veiculo, shape_id order by id_veiculo, shape_id, timestamp_gps rows between 1 preceding and current row) = 'middleend' ends - from + from {{ ref('aux_registros_status_trajeto') }} ), -- 2. Classifica início-fim consecutivos como partida-chegada da viagem aux_inicio_fim AS ( - select + select *, - case + 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 + rows between CURRENT row and 1 following) = 'startend' + then timestamp_gps end datetime_partida, - case + 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' + rows between 1 preceding and CURRENT row) = 'startend' then timestamp_gps end datetime_chegada - from + from aux_status - where + where starts = true OR ends = true ), -- 3. Junta partida-chegada da viagem na mesma linha inicio_fim AS ( - select + select * except(datetime_chegada, posicao_veiculo_geo), posicao_veiculo_geo as posicao_partida, lead(datetime_chegada) over( - partition by id_veiculo, shape_id + 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 + partition by id_veiculo, shape_id order by id_veiculo, shape_id, timestamp_gps ) as posicao_chegada, from aux_inicio_fim @@ -71,7 +71,7 @@ select distinct datetime_partida, datetime_chegada, '{{ var("version") }}' as versao_modelo -from +from inicio_fim -where +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 index b72a346c..9a5662e7 100644 --- a/queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql +++ b/queries/models/projeto_subsidio_sppo/aux_viagem_registros.sql @@ -6,7 +6,7 @@ -- 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 + select *, n_registros_middle + n_registros_start + n_registros_end as n_registros_shape from ( @@ -31,7 +31,7 @@ with distancia as ( ) ) -- 2. Calcula distancia total por viagem - junta distancias corrigidas --- de ida e volta de viagens circulares. +-- de ida e volta de viagens circulares. select id_viagem, sum(distancia_aferida) as distancia_aferida, diff --git a/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql b/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql index 35db0ac3..9e6c1e18 100644 --- a/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql +++ b/queries/models/projeto_subsidio_sppo/recurso_avaliado.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ diff --git a/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql b/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql index 6da3dfd4..52fb74fd 100644 --- a/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql +++ b/queries/models/projeto_subsidio_sppo/registros_status_viagem.sql @@ -18,10 +18,10 @@ with registros_viagem as ( datetime_chegada, distancia_inicio_fim, id_viagem - from + from {{ ref("aux_registros_status_trajeto") }} s left join ( - select + select id_veiculo, trip_id, servico_realizado, @@ -33,16 +33,16 @@ with registros_viagem as ( from {{ ref("aux_viagem_circular") }} ) v - on + 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 +select *, '{{ var("version") }}' as versao_modelo -from +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 index 0f062e55..ec5a01c3 100644 --- a/queries/models/projeto_subsidio_sppo/schema.yml +++ b/queries/models/projeto_subsidio_sppo/schema.yml @@ -203,7 +203,7 @@ models: values: ["I", "V", "C"] - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -237,7 +237,7 @@ models: - 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: @@ -245,7 +245,7 @@ models: - 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: @@ -265,7 +265,7 @@ models: values: ["I", "V", "C"] - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -357,7 +357,7 @@ models: values: ["I", "V", "C"] - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -380,7 +380,7 @@ models: columns: - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -455,7 +455,7 @@ models: - 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: @@ -484,7 +484,7 @@ models: values: ["I", "V", "C"] - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -598,7 +598,7 @@ models: - 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: @@ -629,7 +629,7 @@ models: values: ["I", "V", "C"] - name: id_viagem description: "Código identificador da viagem (id_veiculo + - servico + datetime_partida)" + servico + datetime_partida)" tests: - not_null - unique @@ -647,16 +647,16 @@ models: tests: - not_null - accepted_values: - values: ["Completa linha correta", "Completa linha incorreta"] + 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)" @@ -707,7 +707,7 @@ models: - 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." diff --git a/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql b/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql index 7ef4765a..ac7946b2 100644 --- a/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql +++ b/queries/models/projeto_subsidio_sppo/subsidio_data_versao_efetiva.sql @@ -1,4 +1,4 @@ -SELECT +SELECT data, CASE WHEN data = "2022-06-16" THEN "Domingo" @@ -127,7 +127,7 @@ SELECT {% endfor %} {% endfor %} END AS data_versao_frequencies, - CASE + CASE WHEN EXTRACT(YEAR FROM data) = 2022 THEN ( CASE WHEN EXTRACT(MONTH FROM data) = 6 THEN 2.13 diff --git a/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql b/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql index 991ce814..d4a9b432 100644 --- a/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql +++ b/queries/models/projeto_subsidio_sppo/subsidio_quadro_horario.sql @@ -1,4 +1,4 @@ -SELECT +SELECT SAFE_CAST(data_versao AS DATE) data_versao, SAFE_CAST(servico AS STRING) servico, SAFE_CAST(vista AS STRING) vista, diff --git a/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql b/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql index 920a3cbe..16b2298f 100644 --- a/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql +++ b/queries/models/projeto_subsidio_sppo/subsidio_shapes_geom.sql @@ -16,7 +16,7 @@ with data_versao as ( where data between date_sub("{{ var("run_date") }}", interval 1 day) and date("{{ var("run_date") }}") ), contents as ( - SELECT + SELECT shape_id, ST_GEOGPOINT( SAFE_CAST(shape_pt_lon AS FLOAT64), @@ -24,7 +24,7 @@ contents as ( ) ponto_shape, SAFE_CAST(shape_pt_sequence as INT64) shape_pt_sequence, DATE(data_versao) AS data_versao - FROM + FROM {{ var("subsidio_shapes") }} s {% if is_incremental() %} WHERE @@ -33,18 +33,18 @@ contents as ( ), pts as ( select - *, + *, max(shape_pt_sequence) over( partition by data_versao, shape_id ) final_pt_sequence - from + from contents c order by data_versao, shape_id, shape_pt_sequence ), shapes as ( -- BUILD LINESTRINGS OVER SHAPE POINTS - SELECT + SELECT shape_id, data_versao, st_makeline(ARRAY_AGG(ponto_shape)) as shape @@ -53,33 +53,33 @@ shapes as ( ), boundary as ( -- EXTRACT START AND END POINTS FROM SHAPES - SELECT + SELECT c1.shape_id, c1.ponto_shape start_pt, c2.ponto_shape end_pt, c1.data_versao - FROM + FROM (select * from pts where shape_pt_sequence = 1) c1 - JOIN + JOIN (select * from pts where shape_pt_sequence = final_pt_sequence) c2 - ON + ON c1.shape_id = c2.shape_id and c1.data_versao = c2.data_versao ), merged as ( -- JOIN SHAPES AND BOUNDARY POINTS - SELECT + SELECT s.*, b.* except(data_versao, shape_id), round(ST_LENGTH(shape),1) shape_distance, - FROM + FROM shapes s - JOIN + JOIN boundary b - ON + ON s.shape_id = b.shape_id and s.data_versao = b.data_versao ), ids as ( - SELECT + SELECT shape_id, shape, shape_distance, diff --git a/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql b/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql index 612bcc41..00a77a56 100644 --- a/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql +++ b/queries/models/projeto_subsidio_sppo/subsidio_trips_desaninhada.sql @@ -4,14 +4,14 @@ select -- concat(substr(trip_id, 1, 10), substr(trip_id, 12, 4)) as trip_no_direction, route_id, trip_headsign, - case + 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]+')) + 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 +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 index e7d605a6..f9ecbfe6 100644 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql +++ b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_periodo_recurso.sql @@ -4,7 +4,7 @@ with viagem_paga as ( data, trip_id, count(id_viagem) as viagens_realizadas - from + from `rj-smtr.projeto_subsidio_sppo.viagem_completa` -- {{ ref("viagem_completa") }} -- todo: ref to prod group by 1,2 @@ -14,7 +14,7 @@ viagem_recurso as ( data, trip_id, count(id_viagem) as viagens_realizadas - from + from {{ ref("viagem_completa_recurso") }} group by 1,2 @@ -24,13 +24,13 @@ viagem as ( 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 + from viagem_paga p left join viagem_recurso r on r.trip_id = p.trip_id - and r.data = p.data + and r.data = p.data ), -- 2. Junta informações de viagens planejadas às realizadas planejado as ( @@ -51,7 +51,7 @@ planejado as ( fim_periodo, case when sentido = "C" then max(distancia_planejada) - else sum(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 @@ -67,7 +67,7 @@ planejado as ( and v.data = p.data ) -- 4. Adiciona informações de distância total -select +select * except(distancia_planejada, distancia_total_planejada), distancia_total_planejada, round(viagens_subsidio * distancia_planejada, 3) as distancia_total_subsidio, 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 index 3589ca7f..175dc2ed 100644 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql +++ b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_pos_recurso.sql @@ -14,7 +14,7 @@ with sumario as ( on r.data = s.data and r.servico = s.servico ) -select +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 index d50a4b77..a6c7e211 100644 --- a/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql +++ b/queries/models/projeto_subsidio_sppo/sumario_subsidio_dia_recurso.sql @@ -1,5 +1,5 @@ with sumario as ( - SELECT + SELECT consorcio, data, tipo_dia, @@ -23,7 +23,7 @@ valor as ( `rj-smtr.projeto_subsidio_sppo.subsidio_data_versao_efetiva` v -- {{ ref("subsidio_data_versao_efetiva")}} v on v.data = s.data ) -select +select *, case when perc_distancia_total_subsidio < {{ var("perc_distancia_total_subsidio") }} diff --git a/queries/models/projeto_subsidio_sppo/viagem_completa.sql b/queries/models/projeto_subsidio_sppo/viagem_completa.sql index 132ce29f..af155c2c 100644 --- a/queries/models/projeto_subsidio_sppo/viagem_completa.sql +++ b/queries/models/projeto_subsidio_sppo/viagem_completa.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -39,13 +39,13 @@ with viagem_periodo as ( {% endif %} ) p inner join ( - select distinct * from {{ ref("viagem_conformidade") }} + select distinct * from {{ ref("viagem_conformidade") }} {% if is_incremental() %} - WHERE + WHERE data = date_sub(date("{{ var("run_date") }}"), interval 1 day) {% endif %} - ) v - on + ) v + on v.trip_id = p.trip_id and v.data = p.data ), @@ -68,7 +68,7 @@ select distinct datetime_chegada, inicio_periodo, fim_periodo, - case + case when servico_realizado = servico_informado then "Completa linha correta" else "Completa linha incorreta" @@ -86,7 +86,7 @@ select distinct 0 as perc_conformidade_tempo, -- round(100 * tempo_viagem/tempo_planejado, 2) as perc_conformidade_tempo, '{{ var("version") }}' as versao_modelo -from +from viagem_periodo v where ( perc_conformidade_shape >= {{ var("perc_conformidade_shape_min") }} @@ -103,9 +103,9 @@ and ( -- 1. Viagens pre fechamento das vias (fim_periodo = "22:00:00" and datetime_chegada <= "2022-12-31 22:05:00") - or + or (fim_periodo = "18:00:00" and datetime_chegada <= "2022-12-31 18:05:00") -- 18h as 5h - or + 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 @@ -120,14 +120,14 @@ and ( -- 1. Viagens durante fechamento das vias (fim_periodo = "05:00:00" and datetime_partida <= "2023-01-01 05:05:00") - or + or (fim_periodo = "10:00:00" and datetime_partida <= "2023-01-01 10:05:00") - or + 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 + or -- 3. Viagens que nao sao afetadas pelo fechamento das vias (inicio_periodo = "00:00:00" and fim_periodo = "23:59:59") ) @@ -157,7 +157,7 @@ filtro_partida AS ( FROM filtro_desvio ) WHERE - rn = 1 ) + rn = 1 ) -- filtro_chegada SELECT * EXCEPT(rn) diff --git a/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql b/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql index ff1e322f..991d6bf8 100644 --- a/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql +++ b/queries/models/projeto_subsidio_sppo/viagem_completa_recurso.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -12,7 +12,7 @@ config( }} with recursos_viagem as ( - select distinct * + select distinct * from {{ ref('viagem_conformidade_recurso') }} {% if is_incremental() %} where data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') @@ -45,13 +45,13 @@ viagem_periodo as ( 0 as tempo_planejado from viagem_planejada p inner join recursos_viagem v - on + 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 + -- 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 @@ -80,7 +80,7 @@ select distinct datetime_chegada, inicio_periodo, fim_periodo, - case + case when servico_realizado = servico_informado then "Completa linha correta" else "Completa linha incorreta" @@ -98,7 +98,7 @@ select distinct 0 as perc_conformidade_tempo, -- round(100 * tempo_viagem/tempo_planejado, 2) as perc_conformidade_tempo, '{{ var("version") }}' as versao_modelo -from +from viagem_periodo v where ( perc_conformidade_shape >= {{ var("perc_conformidade_shape_min") }} diff --git a/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql b/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql index 6ba6ea61..9cdcae55 100644 --- a/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql +++ b/queries/models/projeto_subsidio_sppo/viagem_conformidade.sql @@ -19,7 +19,7 @@ with viagem as ( *, datetime_diff(datetime_chegada, datetime_partida, minute) + 1 as tempo_viagem from ( - select + select * from ( select @@ -27,18 +27,18 @@ with viagem as ( datetime_chegada, trip_id_planejado as trip_id, shape_id_planejado as shape_id - from + from {{ ref("aux_viagem_circular") }} v - where + where sentido = "I" or sentido = "V" ) union all ( - select + 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 + from + (select v.* except(datetime_chegada), lead(datetime_chegada) over ( partition by id_viagem order by sentido_shape) @@ -49,9 +49,9 @@ with viagem as ( -- round(distancia_planejada + lead(distancia_planejada) over ( -- partition by id_viagem order by sentido_shape), 3) -- as distancia_planejada, - from + from {{ ref("aux_viagem_circular") }} v - where + where sentido = "C" ) c where sentido_shape = "I" @@ -66,9 +66,9 @@ select distinct 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 +from viagem v -inner join +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 index a6e2a6a5..fd3857c8 100644 --- a/queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql +++ b/queries/models/projeto_subsidio_sppo/viagem_conformidade_recurso.sql @@ -1,4 +1,4 @@ -{{ +{{ config( materialized='incremental', partition_by={ @@ -21,7 +21,7 @@ with recursos as ( {# {% endif -%} #} ), gps_viagem as ( - SELECT + SELECT r.protocolo, r.data_viagem as data, g.id_veiculo, @@ -38,9 +38,9 @@ gps_viagem as ( g.distancia, from recursos r left join ( - select + select id_veiculo, - longitude, + longitude, latitude, servico, timestamp_gps, @@ -81,13 +81,13 @@ registros_status_viagem as ( else 'out' end status_viagem, '{{ var("version") }}' as versao_modelo - from + from gps_viagem g inner join ( - select + select * from ( - select + select * except(trip_id, shape_id, shape, distancia_planejada), trip_id, shape_id, shape, distancia_planejada from @@ -98,18 +98,18 @@ registros_status_viagem as ( {# {% endif -%} #} ) union all ( - select + select * except(shape, shape_volta, distancia_planejada, distancia_planejada_volta), st_geogfromtext( concat( - "LINESTRING(", - replace(TRIM(ST_ASTEXT(ST_UNION(shape, shape_volta)), "MULTILINESTRING()"), "), (", ","), + "LINESTRING(", + replace(TRIM(ST_ASTEXT(ST_UNION(shape, shape_volta)), "MULTILINESTRING()"), "), (", ","), ")" ) ) as shape, distancia_planejada + distancia_planejada_volta as distancia_planejada from ( - select + 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, @@ -121,7 +121,7 @@ registros_status_viagem as ( {# {% if is_incremental() -%} #} and data between date('{{ var("recurso_viagem_start")}}') and date('{{ var("recurso_viagem_end")}}') {# {% endif -%} #} - ) + ) where sentido_shape = "I" ) ) s @@ -139,7 +139,7 @@ registros_status_viagem as ( -- 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 + select *, n_registros_middle + n_registros_start + n_registros_end as n_registros_shape from ( @@ -167,7 +167,7 @@ distancia as ( ) ), -- 2. Calcula distancia total por viagem - junta distancias corrigidas --- de ida e volta de viagens circulares. +-- de ida e volta de viagens circulares. aux_viagem_registros as ( select * from ( @@ -210,7 +210,7 @@ aux_viagem_registros as ( ), -- (Adicional) Junta diferentes serviços informados por GPS ao longo viagem numa única string servicos_gps_viagem as ( - select + select protocolo, id_viagem, STRING_AGG(distinct servico_informado, ', ') as servico_informado @@ -221,7 +221,7 @@ servicos_gps_viagem as ( -- 2. Calcula os percentuais de conformidade da distancia, trajeto e GPS select distinct s.protocolo, - v.id_viagem, + v.id_viagem, v.data, v.id_empresa, v.id_veiculo, @@ -239,9 +239,9 @@ select distinct 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 +from registros_status_viagem v -inner join +inner join aux_viagem_registros d on v.id_viagem = d.id_viagem diff --git a/queries/models/projeto_subsidio_sppo/viagem_planejada.sql b/queries/models/projeto_subsidio_sppo/viagem_planejada.sql index 9ff6f984..7210e519 100644 --- a/queries/models/projeto_subsidio_sppo/viagem_planejada.sql +++ b/queries/models/projeto_subsidio_sppo/viagem_planejada.sql @@ -12,7 +12,7 @@ -- 1. Define datas do período planejado with data_efetiva as ( - select + select data, tipo_dia, data_versao_shapes, @@ -29,13 +29,13 @@ quadro as ( p.* except(tipo_dia, data_versao, horario_inicio, horario_fim), horario_inicio as inicio_periodo, horario_fim as fim_periodo - from + from data_efetiva e inner join ( - select * + select * from {{ ref("subsidio_quadro_horario") }} {% if is_incremental() %} - where + where data_versao in (select data_versao_frequencies from data_efetiva) {% endif %} ) p @@ -55,13 +55,13 @@ trips as ( select * from {{ ref('subsidio_trips_desaninhada') }} {% if is_incremental() %} - where + where data_versao in (select data_versao_trips from data_efetiva) {% endif %} ) t - inner join + inner join data_efetiva e - on + on t.data_versao = e.data_versao_trips ), quadro_trips as ( @@ -99,16 +99,16 @@ quadro_tratada as ( select q.*, t.shape_id as shape_id_planejado, - case + 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 + left join trips t - on + on t.data = q.data and t.trip_id = q.trip_id_planejado @@ -124,25 +124,25 @@ shapes as ( shape, start_pt, end_pt - from + from data_efetiva e inner join ( - select * + select * from {{ ref('subsidio_shapes_geom') }} {% if is_incremental() %} - where + where data_versao in (select data_versao_shapes from data_efetiva) {% endif %} ) s - on + on s.data_versao = e.data_versao_shapes ) -- 5. Junta shapes e trips aos servicos planejados no quadro horário -select +select p.*, s.data_shape, s.shape, - case + 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 @@ -153,7 +153,7 @@ from quadro_tratada p inner join shapes s -on +on p.shape_id = s.shape_id and p.data = s.data \ No newline at end of file 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/models/veiculo/README.md b/queries/models/veiculo/README.md index 80e149af..900f0988 100644 --- a/queries/models/veiculo/README.md +++ b/queries/models/veiculo/README.md @@ -5,7 +5,7 @@ ![veiculo](https://user-images.githubusercontent.com/66736583/227351937-7fe4113b-1d94-425d-a170-7e49ed40d66e.png)
- + ## Método ### 1. Captura de Dados diff --git a/queries/models/veiculo/sppo_infracao.sql b/queries/models/veiculo/sppo_infracao.sql index eb8c193f..84827a88 100644 --- a/queries/models/veiculo/sppo_infracao.sql +++ b/queries/models/veiculo/sppo_infracao.sql @@ -10,7 +10,7 @@ incremental_strategy='insert_overwrite' ) }} -WITH +WITH infracao AS ( SELECT SAFE_CAST(DATA AS DATE) data, diff --git a/queries/models/veiculo/sppo_licenciamento.sql b/queries/models/veiculo/sppo_licenciamento.sql index 13da166c..b82afa85 100644 --- a/queries/models/veiculo/sppo_licenciamento.sql +++ b/queries/models/veiculo/sppo_licenciamento.sql @@ -10,7 +10,7 @@ with -- Tabela de licenciamento stu as ( - select + select * from {{ ref("sppo_licenciamento_stu") }} as t diff --git a/queries/models/veiculo/sppo_veiculo_dia.sql b/queries/models/veiculo/sppo_veiculo_dia.sql index 0d068212..5b2a2799 100644 --- a/queries/models/veiculo/sppo_veiculo_dia.sql +++ b/queries/models/veiculo/sppo_veiculo_dia.sql @@ -19,15 +19,15 @@ WITH FROM {{ ref("sppo_licenciamento") }} --`rj-smtr`.`veiculo`.`sppo_licenciamento` {%- if var("stu_data_versao") != "" %} - WHERE + 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 + WHERE data = DATE("{{ licenciamento_date }}") - {% endif -%} + {% endif -%} ), gps AS ( SELECT @@ -174,7 +174,7 @@ SELECT FROM gps_licenciamento_autuacao AS gla LEFT JOIN - {{ ref("subsidio_parametros") }} AS p --`rj-smtr.dashboard_subsidio_sppo.subsidio_parametros` + {{ 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 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 567007ef2b1b64519f99475cd20b3a68bf65a27d Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha Date: Fri, 5 Jan 2024 14:44:29 -0300 Subject: [PATCH 2/5] remove tabelas --- .../sppo_aux_registros_filtrada.sql | 81 ------------------- 1 file changed, 81 deletions(-) delete mode 100644 queries/models/br_rj_riodejaneiro_onibus_gps/sppo_aux_registros_filtrada.sql 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 8ac8cff9..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 From fe24d5cd6bea1007c16915df0b2937831d9b2b31 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha Date: Fri, 5 Jan 2024 15:07:25 -0300 Subject: [PATCH 3/5] ordena imports --- pipelines/br_rj_riodejaneiro_brt_gps/flows.py | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py index 930aa774..0e612087 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/flows.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/flows.py @@ -3,19 +3,29 @@ 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 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.constants import constants as emd_constants + +# isort: on +# SMTR Imports # + from pipelines.br_rj_riodejaneiro_brt_gps.tasks import ( pre_treatment_br_rj_riodejaneiro_brt_gps, ) from pipelines.constants import constants -from pipelines.constants import constants as emd_constants - -# from prefeitura_rio.pipelines_utils.prefect import get_k8s_dbt_client from pipelines.tasks import ( # get_local_dbt_client,; setup_task, bq_upload, create_date_hour_partition, @@ -40,13 +50,6 @@ # from pipelines.schedules import every_hour, every_minute - -# EMD Imports # - - -# SMTR Imports # - - # Flows # with Flow( From cc3fa2633e81933ad99165a66648eacca3440ca2 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha Date: Fri, 5 Jan 2024 15:19:20 -0300 Subject: [PATCH 4/5] corrige ordem de imports --- pipelines/br_rj_riodejaneiro_brt_gps/tasks.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py b/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py index 37b00b93..7f04a30c 100644 --- a/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py +++ b/pipelines/br_rj_riodejaneiro_brt_gps/tasks.py @@ -7,17 +7,20 @@ from datetime import timedelta import pandas as pd -from prefect import task -from prefeitura_rio.pipelines_utils.logging import log -from pipelines.constants import constants -from pipelines.utils.utils import log_critical, map_dict_keys +# isort: off +# Prefect Imports # + +from prefect import task # EMD Imports # +from prefeitura_rio.pipelines_utils.logging import log # SMTR Imports # +from pipelines.constants import constants +from pipelines.utils.utils import log_critical, map_dict_keys # Tasks # From 0b8cf6ef3a20836037a68875db6c6448cbf907c6 Mon Sep 17 00:00:00 2001 From: Rodrigo Cunha Date: Fri, 5 Jan 2024 15:43:28 -0300 Subject: [PATCH 5/5] 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,