diff --git a/dags/acteur_views/dags/build_vue.py b/dags/acteur_views/dags/build_vue.py index 184453657..36445b3eb 100755 --- a/dags/acteur_views/dags/build_vue.py +++ b/dags/acteur_views/dags/build_vue.py @@ -25,51 +25,68 @@ schedule=None, max_active_runs=1, ) as dag: + """ + # Exhaustive + dbt run --models base + dbt test --models base + dbt run --models intermediate + dbt test --models intermediate + dbt test --models intermediate + dbt test --models marts.exhaustive + dbt run --models marts.exhaustive + dbt test --models marts.exhaustive + dbt run --models exposure.exhaustive + dbt test --models exposure.exhaustive - run_dbt_exhaustive_acteurs_model = BashOperator( - task_id="build_exhaustive_acteurs", - bash_command=( - "cd /opt/airflow/dbt/ && dbt run --select qfdmo.exhaustive_acteurs" - ), + """ + dbt_run_base = BashOperator( + task_id="run_base", + bash_command=("cd /opt/airflow/dbt/ && dbt run --models base"), dag=dag, ) - test_dbt_exhaustive_acteurs_model = BashOperator( - task_id="test_exhaustive_acteurs", - bash_command=( - "cd /opt/airflow/dbt/ && dbt test --select qfdmo.exhaustive_acteurs" - ), + dbt_test_base = BashOperator( + task_id="test_base", + bash_command=("cd /opt/airflow/dbt/ && dbt test --models base"), dag=dag, ) - run_dbt_carte_acteurs_model = BashOperator( - task_id="build_carte_acteurs", - bash_command=("cd /opt/airflow/dbt/ && dbt run --select qfdmo.carte_acteurs"), + dbt_run_intermediate = BashOperator( + task_id="run_intermediate", + bash_command=("cd /opt/airflow/dbt/ && dbt run --models intermediate"), dag=dag, ) - test_dbt_carte_acteurs_model = BashOperator( - task_id="test_carte_acteurs", - bash_command=("cd /opt/airflow/dbt/ && dbt test --select qfdmo.carte_acteurs"), + dbt_test_intermediate = BashOperator( + task_id="test_intermediate", + bash_command=("cd /opt/airflow/dbt/ && dbt test --models intermediate"), dag=dag, ) - run_dbt_opendata_acteurs_model = BashOperator( - task_id="build_opendata_acteurs", - bash_command=( - "cd /opt/airflow/dbt/ && dbt run --select qfdmo.opendata_acteurs" - ), + dbt_run_marts_exhaustive = BashOperator( + task_id="run_marts_exhaustive", + bash_command=("cd /opt/airflow/dbt/ && dbt run --models marts.exhaustive"), dag=dag, ) - test_dbt_opendata_acteurs_model = BashOperator( - task_id="test_opendata_acteurs", - bash_command=( - "cd /opt/airflow/dbt/ && dbt test --select qfdmo.opendata_acteurs" - ), + dbt_test_marts_exhaustive = BashOperator( + task_id="test_marts_exhaustive", + bash_command=("cd /opt/airflow/dbt/ && dbt test --models marts.exhaustive"), + dag=dag, + ) + dbt_run_exposure_exhaustive = BashOperator( + task_id="run_exposure_exhaustive", + bash_command=("cd /opt/airflow/dbt/ && dbt run --models exposure.exhaustive"), + dag=dag, + ) + dbt_test_exposure_exhaustive = BashOperator( + task_id="test_exposure_exhaustive", + bash_command=("cd /opt/airflow/dbt/ && dbt test --models exposure.exhaustive"), dag=dag, ) ( - run_dbt_exhaustive_acteurs_model - >> test_dbt_exhaustive_acteurs_model - >> run_dbt_carte_acteurs_model - >> test_dbt_carte_acteurs_model - >> run_dbt_opendata_acteurs_model - >> test_dbt_opendata_acteurs_model + dbt_run_base + >> dbt_test_base + >> dbt_run_intermediate + >> dbt_test_intermediate + >> dbt_run_marts_exhaustive + >> dbt_test_marts_exhaustive + >> dbt_run_exposure_exhaustive + >> dbt_test_exposure_exhaustive ) diff --git a/dbt/dbt_project.yml b/dbt/dbt_project.yml index ddcfb83a2..32e91f4c0 100644 --- a/dbt/dbt_project.yml +++ b/dbt/dbt_project.yml @@ -23,12 +23,29 @@ clean-targets: - "dbt_packages" models: - qfdmo: - exhaustive_acteurs: - materialized: table - - opendata_acteurs: - materialized: table - - carte_acteurs: - materialized: table + base: + schema: public + +materialized: view + intermediate: + schema: public + +materialized: view + marts: + exhaustive: + schema: public + +materialized: view + carte: + schema: public + +materialized: view + opendata: + schema: public + +materialized: view + exposure: + exhaustive: + schema: public + +materialized: view + carte: + schema: public + +materialized: view + opendata: + schema: public + +materialized: view diff --git a/dbt/macros/macro_acteur.sql b/dbt/macros/macro_acteur.sql new file mode 100644 index 000000000..1e5bf70ad --- /dev/null +++ b/dbt/macros/macro_acteur.sql @@ -0,0 +1,8 @@ +{%- macro acteur(ephemeral_filtered_acteur, propositionservice ) -%} + +SELECT DISTINCT va.* +FROM {{ ref(ephemeral_filtered_acteur) }} AS va +INNER JOIN {{ ref(propositionservice) }} AS cps + ON va.identifiant_unique = cps.acteur_id + +{%- endmacro -%} \ No newline at end of file diff --git a/dbt/models/opendata_acteurs/opendata_acteur_acteur_services.sql b/dbt/macros/macro_acteur_acteur_services.sql similarity index 63% rename from dbt/models/opendata_acteurs/opendata_acteur_acteur_services.sql rename to dbt/macros/macro_acteur_acteur_services.sql index b2abdd84e..58fa7ea1a 100644 --- a/dbt/models/opendata_acteurs/opendata_acteur_acteur_services.sql +++ b/dbt/macros/macro_acteur_acteur_services.sql @@ -1,9 +1,11 @@ +{%- macro acteur_acteur_services(ephemeral_filtered_acteur, acteur ) -%} + WITH nochild_acteur_acteur_services AS ( SELECT aas.vueacteur_id AS acteur_id, aas.acteurservice_id AS acteurservice_id FROM qfdmo_vueacteur_acteur_services aas - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is null + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is null GROUP BY aas.vueacteur_id, aas.acteurservice_id ), parentacteur_acteur_services AS ( @@ -11,7 +13,7 @@ parentacteur_acteur_services AS ( a.parent_id AS acteur_id, aas.acteurservice_id AS acteurservice_id FROM qfdmo_vueacteur_acteur_services aas - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is not null + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is not null GROUP BY a.parent_id, aas.acteurservice_id ), acteur_acteur_services AS ( @@ -22,4 +24,6 @@ acteur_acteur_services AS ( SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, aas.acteurservice_id) AS id, aas.* FROM acteur_acteur_services AS aas -INNER JOIN {{ ref('opendata_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file +INNER JOIN {{ ref(acteur) }} AS a ON a.identifiant_unique = acteur_id + +{%- endmacro -%} diff --git a/dbt/models/opendata_acteurs/opendata_acteur_labels.sql b/dbt/macros/macro_acteur_labels.sql similarity index 60% rename from dbt/models/opendata_acteurs/opendata_acteur_labels.sql rename to dbt/macros/macro_acteur_labels.sql index 1973202b5..08416b3b6 100644 --- a/dbt/models/opendata_acteurs/opendata_acteur_labels.sql +++ b/dbt/macros/macro_acteur_labels.sql @@ -1,9 +1,11 @@ +{%- macro acteur_labels(ephemeral_filtered_acteur, acteur ) -%} + WITH nochild_acteur_labels AS ( SELECT al.vueacteur_id AS acteur_id, al.labelqualite_id AS labelqualite_id FROM qfdmo_vueacteur_labels al - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is null + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is null GROUP BY al.vueacteur_id, al.labelqualite_id ), parentacteur_labels AS ( @@ -11,7 +13,7 @@ parentacteur_labels AS ( a.parent_id AS acteur_id, al.labelqualite_id AS labelqualite_id FROM qfdmo_vueacteur_labels al - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is not null + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is not null GROUP BY a.parent_id, al.labelqualite_id ), acteur_labels AS ( @@ -22,4 +24,6 @@ acteur_labels AS ( SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, al.labelqualite_id) AS id, al.* FROM acteur_labels AS al -INNER JOIN {{ ref('opendata_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file +INNER JOIN {{ ref(acteur) }} AS a ON a.identifiant_unique = acteur_id + +{%- endmacro -%} diff --git a/dbt/models/opendata_acteurs/opendata_acteur_sources.sql b/dbt/macros/macro_acteur_sources.sql similarity index 70% rename from dbt/models/opendata_acteurs/opendata_acteur_sources.sql rename to dbt/macros/macro_acteur_sources.sql index f46718218..b9258481b 100644 --- a/dbt/models/opendata_acteurs/opendata_acteur_sources.sql +++ b/dbt/macros/macro_acteur_sources.sql @@ -1,8 +1,10 @@ +{%- macro acteur_sources(ephemeral_filtered_acteur, acteur ) -%} + WITH nochild_acteur_labels AS ( SELECT a.identifiant_unique AS acteur_id, a.source_id AS source_id - FROM {{ ref('temp_opendata_filteredacteur') }} AS a + FROM {{ ref(ephemeral_filtered_acteur) }} AS a WHERE a.parent_id is null AND a.source_id is not null GROUP BY a.identifiant_unique, a.source_id ), @@ -10,7 +12,7 @@ parentacteur_labels AS ( SELECT a.parent_id AS acteur_id, a.source_id AS source_id - FROM {{ ref('temp_opendata_filteredacteur') }} AS a + FROM {{ ref(ephemeral_filtered_acteur) }} AS a WHERE a.parent_id is not null GROUP BY a.parent_id, a.source_id ), @@ -22,4 +24,6 @@ acteur_sources AS ( SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, s.source_id) AS id, s.* FROM acteur_sources AS s -INNER JOIN {{ ref('opendata_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file +INNER JOIN {{ ref(acteur) }} AS a ON a.identifiant_unique = acteur_id + +{%- endmacro -%} diff --git a/dbt/models/opendata_acteurs/temp_opendata_parentpropositionservice.sql b/dbt/macros/macro_filtered_parentpropositionservice.sql similarity index 63% rename from dbt/models/opendata_acteurs/temp_opendata_parentpropositionservice.sql rename to dbt/macros/macro_filtered_parentpropositionservice.sql index 6cea16995..f74f0ab0c 100644 --- a/dbt/models/opendata_acteurs/temp_opendata_parentpropositionservice.sql +++ b/dbt/macros/macro_filtered_parentpropositionservice.sql @@ -1,3 +1,4 @@ +{%- macro filtered_parentpropositionservice(ephemeral_filtered_acteur ) -%} SELECT tvps.id AS id, @@ -5,6 +6,8 @@ SELECT tvps.acteur_id AS acteur_id, tvps.action_id AS action_id FROM qfdmo_vuepropositionservice AS tvps - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS tcfa + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS tcfa ON tvps.acteur_id = tcfa.identifiant_unique AND tcfa.parent_id IS NOT NULL + +{%- endmacro -%} \ No newline at end of file diff --git a/dbt/models/carte_acteurs/temp_propositionservice.sql b/dbt/macros/macro_filtered_propositionservice.sql similarity index 66% rename from dbt/models/carte_acteurs/temp_propositionservice.sql rename to dbt/macros/macro_filtered_propositionservice.sql index 37c3fae3c..28da9e507 100644 --- a/dbt/models/carte_acteurs/temp_propositionservice.sql +++ b/dbt/macros/macro_filtered_propositionservice.sql @@ -1,9 +1,11 @@ +{%- macro filtered_propositionservice(ephemeral_filtered_acteur, ephemeral_filtered_parentpropositionservice ) -%} + with parent_propositionservice AS ( SELECT concat(pps.parent_id::text, '_', pps.action_id::text) AS id, pps.parent_id AS acteur_id, pps.action_id AS action_id - FROM {{ ref('temp_parentpropositionservice') }} AS pps + FROM {{ ref(ephemeral_filtered_parentpropositionservice) }} AS pps group by 2,3 ), nochild_propositionservice AS ( @@ -12,10 +14,12 @@ nochild_propositionservice AS ( vps.acteur_id AS acteur_id, vps.action_id AS action_id FROM qfdmo_vuepropositionservice AS vps - INNER JOIN {{ ref('temp_filteredacteur') }} AS cfa + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS cfa ON vps.acteur_id = cfa.identifiant_unique AND cfa.parent_id is null ) SELECT * FROM parent_propositionservice union all SELECT * FROM nochild_propositionservice + +{%- endmacro -%} \ No newline at end of file diff --git a/dbt/macros/macro_propositionservice.sql b/dbt/macros/macro_propositionservice.sql new file mode 100644 index 000000000..d6949bd25 --- /dev/null +++ b/dbt/macros/macro_propositionservice.sql @@ -0,0 +1,12 @@ +{%- macro propositionservice(ephemeral_filtered_propositionservice, propositionservice_sous_categories ) -%} + +SELECT + MIN(ps.id) AS id, + ps.acteur_id, + ps.action_id +FROM {{ ref(ephemeral_filtered_propositionservice) }} AS ps +INNER JOIN {{ ref(propositionservice_sous_categories) }} AS pssscat + ON ps.id = pssscat.propositionservice_id +GROUP BY acteur_id, action_id + +{%- endmacro -%} diff --git a/dbt/macros/macro_propositionservice_sous_categories.sql b/dbt/macros/macro_propositionservice_sous_categories.sql new file mode 100644 index 000000000..144ed3365 --- /dev/null +++ b/dbt/macros/macro_propositionservice_sous_categories.sql @@ -0,0 +1,37 @@ +{%- macro propositionservice_sous_categories(ephemeral_filtered_acteur, ephemeral_filtered_propositionservice, ephemeral_filtered_parentpropositionservice ) -%} + +with + parent_propositionservice_sous_categories + AS + ( + SELECT + MIN(pssscat.id) AS id, + CONCAT(pps.parent_id::text, '_', pps.action_id::text) AS propositionservice_id, + pssscat.souscategorieobjet_id AS souscategorieobjet_id + FROM {{ ref("int_propositionservice_sous_categories") }} AS pssscat + INNER JOIN {{ ref(ephemeral_filtered_parentpropositionservice) }} AS pps + ON pps.id = pssscat.propositionservice_id + GROUP BY + pps.parent_id, + pps.action_id, + pssscat.souscategorieobjet_id + ), + nochild_propositionservice_sous_categories + AS + ( + SELECT + pssscat.id AS id, + pssscat.propositionservice_id AS propositionservice_id, + pssscat.souscategorieobjet_id AS souscategorieobjet_id + FROM {{ ref("int_propositionservice_sous_categories") }} AS pssscat + INNER JOIN {{ ref(ephemeral_filtered_propositionservice) }} AS ps ON pssscat.propositionservice_id = ps.id + INNER JOIN {{ ref(ephemeral_filtered_acteur) }} AS cfa ON ps.acteur_id = cfa.identifiant_unique AND cfa.parent_id is null + ) + +SELECT * + FROM parent_propositionservice_sous_categories +UNION ALL +SELECT * + FROM nochild_propositionservice_sous_categories + +{%- endmacro -%} diff --git a/dbt/models/base/base_acteur.sql b/dbt/models/base/base_acteur.sql new file mode 100644 index 000000000..209b43f2f --- /dev/null +++ b/dbt/models/base/base_acteur.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_acteur') }} \ No newline at end of file diff --git a/dbt/models/base/base_acteur_acteur_services.sql b/dbt/models/base/base_acteur_acteur_services.sql new file mode 100644 index 000000000..abfeb5184 --- /dev/null +++ b/dbt/models/base/base_acteur_acteur_services.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_acteur_acteur_services') }} \ No newline at end of file diff --git a/dbt/models/base/base_acteur_labels.sql b/dbt/models/base/base_acteur_labels.sql new file mode 100644 index 000000000..2d7ffafb3 --- /dev/null +++ b/dbt/models/base/base_acteur_labels.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_acteur_labels') }} \ No newline at end of file diff --git a/dbt/models/base/base_propositionservice.sql b/dbt/models/base/base_propositionservice.sql new file mode 100644 index 000000000..e5f1037e4 --- /dev/null +++ b/dbt/models/base/base_propositionservice.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_propositionservice') }} \ No newline at end of file diff --git a/dbt/models/base/base_propositionservice_sous_categories.sql b/dbt/models/base/base_propositionservice_sous_categories.sql new file mode 100644 index 000000000..09b41886c --- /dev/null +++ b/dbt/models/base/base_propositionservice_sous_categories.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_propositionservice_sous_categories') }} \ No newline at end of file diff --git a/dbt/models/base/base_revisionacteur.sql b/dbt/models/base/base_revisionacteur.sql new file mode 100644 index 000000000..4f471ec14 --- /dev/null +++ b/dbt/models/base/base_revisionacteur.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_revisionacteur') }} \ No newline at end of file diff --git a/dbt/models/base/base_revisionacteur_acteur_services.sql b/dbt/models/base/base_revisionacteur_acteur_services.sql new file mode 100644 index 000000000..fef93b0f1 --- /dev/null +++ b/dbt/models/base/base_revisionacteur_acteur_services.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_revisionacteur_acteur_services') }} \ No newline at end of file diff --git a/dbt/models/base/base_revisionacteur_labels.sql b/dbt/models/base/base_revisionacteur_labels.sql new file mode 100644 index 000000000..1d9ba2ff6 --- /dev/null +++ b/dbt/models/base/base_revisionacteur_labels.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_revisionacteur_labels') }} \ No newline at end of file diff --git a/dbt/models/base/base_revisionpropositionservice.sql b/dbt/models/base/base_revisionpropositionservice.sql new file mode 100644 index 000000000..c7373ab52 --- /dev/null +++ b/dbt/models/base/base_revisionpropositionservice.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_revisionpropositionservice') }} \ No newline at end of file diff --git a/dbt/models/base/base_revisionpropositionservice_sous_categories.sql b/dbt/models/base/base_revisionpropositionservice_sous_categories.sql new file mode 100644 index 000000000..a39dfd6f6 --- /dev/null +++ b/dbt/models/base/base_revisionpropositionservice_sous_categories.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_revisionpropositionservice_sous_categories') }} \ No newline at end of file diff --git a/dbt/models/base/base_source.sql b/dbt/models/base/base_source.sql new file mode 100644 index 000000000..8640c8845 --- /dev/null +++ b/dbt/models/base/base_source.sql @@ -0,0 +1 @@ +select * from {{ source('qfdmo', 'qfdmo_source') }} \ No newline at end of file diff --git a/dbt/models/base/schema.yml b/dbt/models/base/schema.yml new file mode 100644 index 000000000..157b6e544 --- /dev/null +++ b/dbt/models/base/schema.yml @@ -0,0 +1,340 @@ +version: 2 + +models: + - name: base_acteur + description: "Acteurs Importés" + columns: + - name: identifiant_unique + description: "L'identifiant unique de l'acteur" + data_tests: + - not_null + - unique + - name: nom + description: "Le nom de l'acteur" + data_tests: + - not_null + - name: description + description: "La description de l'acteur" + - name: acteur_type_id + description: "Le type d'acteur" + - name: adresse + description: "L'adresse de l'acteur" + - name: adresse_complement + description: "L'adresse complémentaire de l'acteur" + - name: code_postal + description: "Le code postal de l'acteur" + - name: ville + description: "La ville de l'acteur" + - name: url + description: "L'URL de l'acteur" + - name: email + description: "L'email de l'acteur" + - name: location + description: "La localisation de l'acteur" + - name: telephone + description: "Le numéro de téléphone de l'acteur" + - name: nom_commercial + description: "Le nom commercial de l'acteur" + - name: nom_officiel + description: "Le nom officiel de l'acteur" + - name: siren + description: "Le numéro SIREN de l'acteur" + - name: siret + description: "Le numéro SIRET de l'acteur" + - name: source_id + description: "L'identifiant source de l'acteur" + - name: identifiant_externe + description: "L'identifiant externe de l'acteur" + - name: naf_principal + description: "Le code NAF principal de l'acteur" + - name: commentaires + description: "Les commentaires de l'acteur" + - name: horaires_osm + description: "Les horaires OSM de l'acteur" + - name: horaires_description + description: "La description des horaires de l'acteur" + - name: public_accueilli + description: "Le public accueilli par l'acteur" + - name: reprise + description: "La reprise de l'acteur" + - name: exclusivite_de_reprisereparation + description: "L'exclusivité de la réparation de l'acteur" + - name: uniquement_sur_rdv + description: "Le fait que l'acteur soit uniquement sur RDV" + - name: action_principale_id + description: "L'action principale de l'acteur" + - name: modifie_le + description: "La date de modification de l'acteur" + - name: parent_id + description: "L'identifiant du parent de l'acteur" + - name: cree_le + description: "La date de création de l'acteur" + - name: statut + description: "Le statut de l'acteur" + - name: base_acteur_acteur_services + description: "Services des acteurs" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: acteurservice_id + description: "The acteurservice_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - acteurservice_id + - name: base_acteur_labels + description: "Labels des acteurs" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: labelqualite_id + description: "The labelqualite_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - labelqualite_id + - name: base_propositionservice + description: "Propositions de services" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The vueacteur_id for this table" + data_tests: + - not_null + - name: action_id + description: "The action_id for this table" + data_tests: + - not_null + - name: ps_id + description: "The ps_id for this table" + - name: rps_id + description: "The rps_id for this table" + - name: revision_existe + description: "The revision_existe for this table" + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - action_id + - name: base_propositionservice_sous_categories + description: "Sous-catégories de propositions de services" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: propositionservice_id + description: "The propositionservice_id for this table" + data_tests: + - not_null + - name: souscategorieobjet_id + description: "The souscategorieobjet_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - propositionservice_id + - souscategorieobjet_id + - name: base_revisionacteur + description: "Correction sur les acteurs" + columns: + - name: identifiant_unique + description: "L'identifiant unique de l'acteur" + - name: nom + description: "Le nom de l'acteur" + - name: description + description: "La description de l'acteur" + - name: acteur_type_id + description: "Le type d'acteur" + - name: adresse + description: "L'adresse de l'acteur" + - name: adresse_complement + description: "L'adresse complémentaire de l'acteur" + - name: code_postal + description: "Le code postal de l'acteur" + - name: ville + description: "La ville de l'acteur" + - name: url + description: "L'URL de l'acteur" + - name: email + description: "L'email de l'acteur" + - name: location + description: "La localisation de l'acteur" + - name: telephone + description: "Le numéro de téléphone de l'acteur" + - name: nom_commercial + description: "Le nom commercial de l'acteur" + - name: nom_officiel + description: "Le nom officiel de l'acteur" + - name: siren + description: "Le numéro SIREN de l'acteur" + - name: siret + description: "Le numéro SIRET de l'acteur" + - name: source_id + description: "L'identifiant source de l'acteur" + - name: identifiant_externe + description: "L'identifiant externe de l'acteur" + - name: naf_principal + description: "Le code NAF principal de l'acteur" + - name: commentaires + description: "Les commentaires de l'acteur" + - name: horaires_osm + description: "Les horaires OSM de l'acteur" + - name: horaires_description + description: "La description des horaires de l'acteur" + - name: public_accueilli + description: "Le public accueilli par l'acteur" + - name: reprise + description: "La reprise de l'acteur" + - name: exclusivite_de_reprisereparation + description: "L'exclusivité de la réparation de l'acteur" + - name: uniquement_sur_rdv + description: "Le fait que l'acteur soit uniquement sur RDV" + - name: action_principale_id + description: "L'action principale de l'acteur" + - name: modifie_le + description: "La date de modification de l'acteur" + - name: parent_id + description: "L'identifiant du parent de l'acteur" + - name: cree_le + description: "La date de création de l'acteur" + - name: statut + description: "Le statut de l'acteur" + - name: base_revisionacteur_acteur_services + description: "Services des acteurs" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: revisionacteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: acteurservice_id + description: "The acteurservice_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - revisionacteur_id + - acteurservice_id + - name: base_revisionacteur_labels + description: "Labels des acteurs" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: revisionacteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: labelqualite_id + description: "The labelqualite_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - revisionacteur_id + - labelqualite_id + - name: base_revisionpropositionservice + description: "Propositions de services" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The vueacteur_id for this table" + data_tests: + - not_null + - name: action_id + description: "The action_id for this table" + data_tests: + - not_null + - name: ps_id + description: "The ps_id for this table" + - name: rps_id + description: "The rps_id for this table" + - name: revision_existe + description: "The revision_existe for this table" + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - action_id + - name: base_revisionpropositionservice_sous_categories + description: "Sous-catégories de propositions de services" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: revisionpropositionservice_id + description: "The revisionpropositionservice_id for this table" + data_tests: + - not_null + - name: souscategorieobjet_id + description: "The souscategorieobjet_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - revisionpropositionservice_id + - souscategorieobjet_id + - name: base_source + description: "Sources" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: libelle + description: "The libelle for this table" + data_tests: + - not_null + - name: code + description: "The code for this table" + data_tests: + - not_null + - unique + - name: afficher + description: "The afficher for this table" + data_tests: + - not_null + - name: url + description: "The url for this table" + - name: logo_file + description: "The logo_file for this table" + - name: licence + description: "The licence for this table" diff --git a/dbt/models/carte_acteurs/carte_acteur.sql b/dbt/models/carte_acteurs/carte_acteur.sql deleted file mode 100644 index 0e8163234..000000000 --- a/dbt/models/carte_acteurs/carte_acteur.sql +++ /dev/null @@ -1,4 +0,0 @@ -SELECT DISTINCT va.* -FROM {{ ref('temp_filteredacteur') }} AS va -INNER JOIN {{ ref('carte_propositionservice') }} AS cps - ON va.identifiant_unique = cps.acteur_id diff --git a/dbt/models/carte_acteurs/carte_acteur_acteur_services.sql b/dbt/models/carte_acteurs/carte_acteur_acteur_services.sql deleted file mode 100644 index dd40f2d10..000000000 --- a/dbt/models/carte_acteurs/carte_acteur_acteur_services.sql +++ /dev/null @@ -1,25 +0,0 @@ -WITH nochild_acteur_acteur_services AS ( - SELECT - aas.vueacteur_id AS acteur_id, - aas.acteurservice_id AS acteurservice_id - FROM qfdmo_vueacteur_acteur_services aas - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is null - GROUP BY aas.vueacteur_id, aas.acteurservice_id -), -parentacteur_acteur_services AS ( - SELECT - a.parent_id AS acteur_id, - aas.acteurservice_id AS acteurservice_id - FROM qfdmo_vueacteur_acteur_services aas - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON aas.vueacteur_id = a.identifiant_unique AND a.parent_id is not null - GROUP BY a.parent_id, aas.acteurservice_id -), -acteur_acteur_services AS ( - SELECT * FROM nochild_acteur_acteur_services - UNION ALL - SELECT * FROM parentacteur_acteur_services -) - -SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, aas.acteurservice_id) AS id, aas.* -FROM acteur_acteur_services AS aas -INNER JOIN {{ ref('carte_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file diff --git a/dbt/models/carte_acteurs/carte_acteur_labels.sql b/dbt/models/carte_acteurs/carte_acteur_labels.sql deleted file mode 100644 index 8eef86b72..000000000 --- a/dbt/models/carte_acteurs/carte_acteur_labels.sql +++ /dev/null @@ -1,25 +0,0 @@ -WITH nochild_acteur_labels AS ( - SELECT - al.vueacteur_id AS acteur_id, - al.labelqualite_id AS labelqualite_id - FROM qfdmo_vueacteur_labels al - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is null - GROUP BY al.vueacteur_id, al.labelqualite_id -), -parentacteur_labels AS ( - SELECT - a.parent_id AS acteur_id, - al.labelqualite_id AS labelqualite_id - FROM qfdmo_vueacteur_labels al - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON al.vueacteur_id = a.identifiant_unique AND a.parent_id is not null - GROUP BY a.parent_id, al.labelqualite_id -), -acteur_labels AS ( - SELECT * FROM nochild_acteur_labels - UNION ALL - SELECT * FROM parentacteur_labels -) - -SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, al.labelqualite_id) AS id, al.* -FROM acteur_labels AS al -INNER JOIN {{ ref('carte_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file diff --git a/dbt/models/carte_acteurs/carte_acteur_sources.sql b/dbt/models/carte_acteurs/carte_acteur_sources.sql deleted file mode 100644 index 71b2be05f..000000000 --- a/dbt/models/carte_acteurs/carte_acteur_sources.sql +++ /dev/null @@ -1,25 +0,0 @@ -WITH nochild_acteur_labels AS ( - SELECT - a.identifiant_unique AS acteur_id, - a.source_id AS source_id - FROM {{ ref('temp_filteredacteur') }} AS a - WHERE a.parent_id is null AND a.source_id is not null - GROUP BY a.identifiant_unique, a.source_id -), -parentacteur_labels AS ( - SELECT - a.parent_id AS acteur_id, - a.source_id AS source_id - FROM {{ ref('temp_filteredacteur') }} AS a - WHERE a.parent_id is not null - GROUP BY a.parent_id, a.source_id -), -acteur_sources AS ( - SELECT * FROM nochild_acteur_labels - UNION ALL - SELECT * FROM parentacteur_labels -) - -SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, s.source_id) AS id, s.* -FROM acteur_sources AS s -INNER JOIN {{ ref('carte_acteur') }} AS a ON a.identifiant_unique = acteur_id \ No newline at end of file diff --git a/dbt/models/carte_acteurs/carte_propositionservice.sql b/dbt/models/carte_acteurs/carte_propositionservice.sql deleted file mode 100644 index 714e33326..000000000 --- a/dbt/models/carte_acteurs/carte_propositionservice.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - MIN(ps.id) AS id, - ps.acteur_id, - ps.action_id -FROM {{ ref('temp_propositionservice') }} AS ps -INNER JOIN {{ ref('carte_propositionservice_sous_categories') }} AS pssscat - ON ps.id = pssscat.propositionservice_id -GROUP BY acteur_id, action_id diff --git a/dbt/models/carte_acteurs/carte_propositionservice_sous_categories.sql b/dbt/models/carte_acteurs/carte_propositionservice_sous_categories.sql deleted file mode 100644 index 2a83bbb0d..000000000 --- a/dbt/models/carte_acteurs/carte_propositionservice_sous_categories.sql +++ /dev/null @@ -1,32 +0,0 @@ -with - parent_vuepropositionservice_sous_categories - AS - ( - SELECT - MIN(qfdmo_vuepropositionservice_sous_categories.id) AS id, - CONCAT(temp_parentpropositionservice.parent_id::text, '_', temp_parentpropositionservice.action_id::text) AS propositionservice_id, - qfdmo_vuepropositionservice_sous_categories.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_vuepropositionservice_sous_categories - INNER JOIN {{ ref('temp_parentpropositionservice') }} AS temp_parentpropositionservice - ON temp_parentpropositionservice.id = qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id - GROUP BY - propositionservice_id, - souscategorieobjet_id - ), - nochild_vuepropositionservice_sous_categories - AS - ( - SELECT - qfdmo_vuepropositionservice_sous_categories.id AS id, - qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id AS propositionservice_id, - qfdmo_vuepropositionservice_sous_categories.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_vuepropositionservice_sous_categories - INNER JOIN {{ ref('temp_propositionservice') }} AS ps ON qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id = ps.id - INNER JOIN {{ ref('temp_filteredacteur') }} AS cfa ON ps.acteur_id = cfa.identifiant_unique AND cfa.parent_id is null - ) - -SELECT * - FROM parent_vuepropositionservice_sous_categories -UNION ALL -SELECT * - FROM nochild_vuepropositionservice_sous_categories diff --git a/dbt/models/carte_acteurs/temp_parentpropositionservice.sql b/dbt/models/carte_acteurs/temp_parentpropositionservice.sql deleted file mode 100644 index d92ecda01..000000000 --- a/dbt/models/carte_acteurs/temp_parentpropositionservice.sql +++ /dev/null @@ -1,10 +0,0 @@ - -SELECT - tvps.id AS id, - tcfa.parent_id AS parent_id, - tvps.acteur_id AS acteur_id, - tvps.action_id AS action_id -FROM qfdmo_vuepropositionservice AS tvps - INNER JOIN {{ ref('temp_filteredacteur') }} AS tcfa - ON tvps.acteur_id = tcfa.identifiant_unique - AND tcfa.parent_id IS NOT NULL diff --git a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_acteur_services.sql b/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_acteur_services.sql deleted file mode 100644 index 3453fdb40..000000000 --- a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_acteur_services.sql +++ /dev/null @@ -1,22 +0,0 @@ -WITH acteur_acteur_services AS ( - SELECT - MIN(al.id) AS id, - al.acteur_id AS vueacteur_id, - al.acteurservice_id AS acteurservice_id - FROM qfdmo_acteur_acteur_services al - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON al.acteur_id = a.identifiant_unique AND a.revision_existe = false - GROUP BY al.acteur_id, al.acteurservice_id -), -revisionacteur_acteur_services AS ( - SELECT - MIN(ral.id) AS id, - ral.revisionacteur_id AS vueacteur_id, - ral.acteurservice_id AS acteurservice_id - FROM qfdmo_revisionacteur_acteur_services ral - INNER JOIN {{ ref('temp_filteredacteur') }} AS a ON ral.revisionacteur_id = a.identifiant_unique AND a.revision_existe = true - GROUP BY ral.revisionacteur_id, ral.acteurservice_id -) - -SELECT * FROM acteur_acteur_services -UNION ALL -SELECT * FROM revisionacteur_acteur_services diff --git a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_labels.sql b/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_labels.sql deleted file mode 100644 index 33197191f..000000000 --- a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur_labels.sql +++ /dev/null @@ -1,22 +0,0 @@ -WITH acteur_labels AS ( - SELECT - MIN(al.id) AS id, - al.acteur_id AS vueacteur_id, - al.labelqualite_id AS labelqualite_id - FROM qfdmo_acteur_labels al - INNER JOIN {{ ref('qfdmo_vueacteur') }} AS a ON al.acteur_id = a.identifiant_unique AND a.revision_existe = false - GROUP BY al.acteur_id, al.labelqualite_id -), -revisionacteur_labels AS ( - SELECT - MIN(ral.id) AS id, - ral.revisionacteur_id AS vueacteur_id, - ral.labelqualite_id AS labelqualite_id - FROM qfdmo_revisionacteur_labels ral - INNER JOIN {{ ref('qfdmo_vueacteur') }} AS a ON ral.revisionacteur_id = a.identifiant_unique AND a.revision_existe = true - GROUP BY ral.revisionacteur_id, ral.labelqualite_id -) - -SELECT * FROM acteur_labels -UNION ALL -SELECT * FROM revisionacteur_labels \ No newline at end of file diff --git a/dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice_sous_categories.sql b/dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice_sous_categories.sql deleted file mode 100644 index 3dec0df85..000000000 --- a/dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice_sous_categories.sql +++ /dev/null @@ -1,22 +0,0 @@ - - -WITH propositionservice_sous_categories AS ( - SELECT - pssscat.id AS id, - ps.id AS vuepropositionservice_id, - pssscat.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_propositionservice_sous_categories pssscat - INNER JOIN {{ ref('qfdmo_vuepropositionservice') }} AS ps ON CONCAT('PS_', pssscat.propositionservice_id) = ps.id AND ps.revision_existe = false -), -revisionpropositionservice_sous_categories AS ( - SELECT - rpssscat.id AS id, - ps.id AS vuepropositionservice_id, - rpssscat.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_revisionpropositionservice_sous_categories rpssscat - JOIN {{ ref('qfdmo_vuepropositionservice') }} AS ps ON CONCAT('RPS_', rpssscat.revisionpropositionservice_id) = ps.id AND ps.revision_existe = true -) - -SELECT * FROM propositionservice_sous_categories -UNION ALL -SELECT * FROM revisionpropositionservice_sous_categories diff --git a/dbt/models/exhaustive_acteurs/schema.yml b/dbt/models/exhaustive_acteurs/schema.yml deleted file mode 100644 index 0ec5724b2..000000000 --- a/dbt/models/exhaustive_acteurs/schema.yml +++ /dev/null @@ -1,249 +0,0 @@ -# Create a exhaustive vue of all acteurs AND theirs linked objects -# Applying corrections - -version: 2 - -models: - - name: qfdmo_vueacteur - description: "Vue Acteur model" - columns: - - name: identifiant_unique - description: "The primary key for this table" - data_tests: - - unique - - not_null - - name: uuid - description: "The uuid for this table" - data_tests: - - unique - - not_null - #TODO: ajouter les déclaration pour chaque champ - config: - materialized: table - indexes: - - columns: ['modifie_le', 'identifiant_unique'] - type: btree - - columns: ['identifiant_unique'] - type: btree - unique: true - - columns: ['code_postal'] - type: btree - - columns: ['nom'] - type: btree - - columns: ['siren'] - type: btree - - columns: ['siret'] - type: btree - - columns: ['source_id'] - type: hash - - columns: ['ville'] - type: btree - - columns: ['acteur_type_id'] - type: hash - - columns: ['location'] - type: gist - - columns: ['parent_id'] - type: hash - constraints: - - type: foreign_key - columns: [acteur_type_id] - ref_columns: [id] - ref_table: qfdmo_acteurtype - deferrable: true - initially_deferred: true - - - type: foreign_key - columns: [action_principale_id] - ref_columns: [id] - ref_table: qfdmo_action - deferrable: true - initially_deferred: true - - - type: foreign_key - columns: [source_id] - ref_columns: [id] - ref_table: qfdmo_source - deferrable: true - initially_deferred: true - - - name: qfdmo_vueacteur_labels - description: "Vue Acteur Labels model" - columns: - - name: id - description: "The primary key for this table" - data_tests: - - unique - - not_null - - name: vueacteur_id - description: "The vueacteur_id for this table" - data_tests: - - not_null - - name: labelqualite_id - description: "The labelqualite_id for this table" - data_tests: - - not_null - config: - materialized: table - indexes: - - columns: ['vueacteur_id', 'labelqualite_id'] - unique: true - - columns: ['vueacteur_id'] - type: hash - - columns: ['labelqualite_id'] - type: hash - constraints: - - type: foreign_key - columns: [vueacteur_id] - ref_columns: [identifiant_unique] - ref_table: qfdmo_vueacteur - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [labelqualite_id] - ref_columns: [id] - ref_table: qfdmo_labelqualite - deferrable: true - initially_deferred: true - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - vueacteur_id - - labelqualite_id - - - name: qfdmo_vueacteur_acteur_services - description: "Vue Acteur Acteur Services model" - columns: - - name: id - description: "The primary key for this table" - data_tests: - - not_null - - name: vueacteur_id - description: "The vueacteur_id for this table" - data_tests: - - not_null - - name: acteurservice_id - description: "The acteurservice_id for this table" - data_tests: - - not_null - config: - materialized: table - indexes: - - columns: ['vueacteur_id', 'acteurservice_id'] - unique: true - - columns: ['vueacteur_id'] - type: hash - - columns: ['acteurservice_id'] - type: hash - constraints: - - type: foreign_key - columns: [vueacteur_id] - ref_columns: [identifiant_unique] - ref_table: qfdmo_vueacteur - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [acteurservice_id] - ref_columns: [id] - ref_table: qfdmo_acteurservice - deferrable: true - initially_deferred: true - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - vueacteur_id - - acteurservice_id - - - name: qfdmo_vuepropositionservice - description: "Vue Proposition Service model" - columns: - - name: id - description: "The primary key for this table" - data_tests: - - unique - - not_null - - name: acteur_id - description: "The vueacteur_id for this table" - data_tests: - - not_null - - name: action_id - description: "The action_id for this table" - data_tests: - - not_null - - name: ps_id - description: "The ps_id for this table" - - name: rps_id - description: "The rps_id for this table" - - name: revision_existe - description: "The revision_existe for this table" - config: - materialized: table - indexes: - - columns: ['acteur_id', 'action_id'] - unique: true - - columns: ['acteur_id'] - type: hash - - columns: ['action_id'] - type: hash - - columns: ['id'] - type: hash - constraints: - - type: foreign_key - columns: [acteur_id] - ref_columns: [identifiant_unique] - ref_table: qfdmo_vueacteur - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [action_id] - ref_columns: [id] - ref_table: qfdmo_action - deferrable: true - initially_deferred: true - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - acteur_id - - action_id - - - name: qfdmo_vuepropositionservice_sous_categories - description: "Vue Proposition Service Sous Categories model" - columns: - - name: id - description: "The primary key for this table" - data_tests: - - not_null - - name: vuepropositionservice_id - description: "The vuepropositionservice_id for this table" - data_tests: - - not_null - - name: souscategorieobjet_id - description: "The souscategorieobjet_id for this table" - data_tests: - - not_null - config: - materialized: table - indexes: - - columns: ['vuepropositionservice_id', 'souscategorieobjet_id'] - unique: true - - columns: ['vuepropositionservice_id'] - type: hash - - columns: ['souscategorieobjet_id'] - type: hash - constraints: - - type: foreign_key - columns: [vuepropositionservice_id] - ref_columns: [id] - ref_table: qfdmo_vuepropositionservice - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [souscategorieobjet_id] - ref_columns: [id] - ref_table: qfdmo_souscategorieobjet - deferrable: true - initially_deferred: true - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - vuepropositionservice_id - - souscategorieobjet_id diff --git a/dbt/models/exposure/carte/exposure_carte_acteur.sql b/dbt/models/exposure/carte/exposure_carte_acteur.sql new file mode 100644 index 000000000..cb4faa647 --- /dev/null +++ b/dbt/models/exposure/carte/exposure_carte_acteur.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_carte_acteur') }} \ No newline at end of file diff --git a/dbt/models/exposure/carte/exposure_carte_acteur_labels.sql b/dbt/models/exposure/carte/exposure_carte_acteur_labels.sql new file mode 100644 index 000000000..e1ff7d271 --- /dev/null +++ b/dbt/models/exposure/carte/exposure_carte_acteur_labels.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_carte_acteur_labels') }} \ No newline at end of file diff --git a/dbt/models/exposure/carte/schema.yml b/dbt/models/exposure/carte/schema.yml new file mode 100644 index 000000000..4a8e86008 --- /dev/null +++ b/dbt/models/exposure/carte/schema.yml @@ -0,0 +1,315 @@ +# Create a carte vue of all acteurs AND theirs linked objects +# Applying corrections + +version: 2 + +models: + - name: exposure_carte_acteur + description: "Acteur model" + columns: + - name: identifiant_unique + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: uuid + description: "The uuid for this table" + data_tests: + - unique + - not_null + - name: nom + description: "Le nom de l'acteur" + data_tests: + - not_null + # - name: description + # description: "La description de l'acteur" + - name: acteur_type_id + description: "Le type d'acteur" + - name: adresse + description: "L'adresse de l'acteur" + - name: adresse_complement + description: "L'adresse complémentaire de l'acteur" + - name: code_postal + description: "Le code postal de l'acteur" + - name: ville + description: "La ville de l'acteur" + - name: url + description: "L'URL de l'acteur" + - name: email + description: "L'email de l'acteur" + - name: location + description: "La localisation de l'acteur" + - name: telephone + description: "Le numéro de téléphone de l'acteur" + - name: nom_commercial + description: "Le nom commercial de l'acteur" + - name: nom_officiel + description: "Le nom officiel de l'acteur" + - name: siren + description: "Le numéro SIREN de l'acteur" + - name: siret + description: "Le numéro SIRET de l'acteur" + - name: source_id + description: "L'identifiant source de l'acteur" + - name: identifiant_externe + description: "L'identifiant externe de l'acteur" + - name: naf_principal + description: "Le code NAF principal de l'acteur" + - name: commentaires + description: "Les commentaires de l'acteur" + - name: horaires_osm + description: "Les horaires OSM de l'acteur" + - name: horaires_description + description: "La description des horaires de l'acteur" + - name: public_accueilli + description: "Le public accueilli par l'acteur" + - name: reprise + description: "La reprise de l'acteur" + - name: exclusivite_de_reprisereparation + description: "L'exclusivité de la réparation de l'acteur" + - name: uniquement_sur_rdv + description: "Le fait que l'acteur soit uniquement sur RDV" + - name: action_principale_id + description: "L'action principale de l'acteur" + - name: modifie_le + description: "La date de modification de l'acteur" + - name: parent_id + description: "L'identifiant du parent de l'acteur" + - name: cree_le + description: "La date de création de l'acteur" + - name: statut + description: "Le statut de l'acteur" + - name: revision_existe + description: "Le fait que l'acteur est une révision" + data_tests: + - not_null + #TODO: ajouter les déclarations pour chaque champ + # config: + # materialized: table + # indexes: + # - columns: ['modifie_le', 'identifiant_unique'] + # type: btree + # - columns: ['identifiant_unique'] + # type: btree + # unique: true + # - columns: ['code_postal'] + # type: btree + # - columns: ['nom'] + # type: btree + # - columns: ['siren'] + # type: btree + # - columns: ['siret'] + # type: btree + # - columns: ['source_id'] + # type: hash + # - columns: ['ville'] + # type: btree + # - columns: ['acteur_type_id'] + # type: hash + # - columns: ['location'] + # type: gist + # - columns: ['parent_id'] + # type: hash + # constraints: + # - type: foreign_key + # columns: [acteur_type_id] + # ref_columns: [id] + # ref_table: qfdmo_acteurtype + # deferrable: true + # initially_deferred: true + + # - type: foreign_key + # columns: [action_principale_id] + # ref_columns: [id] + # ref_table: qfdmo_action + # deferrable: true + # initially_deferred: true + + # - type: foreign_key + # columns: [source_id] + # ref_columns: [id] + # ref_table: qfdmo_source + # deferrable: true + # initially_deferred: true + + - name: exposure_carte_acteur_labels + description: "Acteur Labels model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The vueacteur_id for this table" + data_tests: + - not_null + - name: labelqualite_id + description: "The labelqualite_id for this table" + data_tests: + - not_null + # config: + # materialized: table + # indexes: + # - columns: ['vueacteur_id', 'labelqualite_id'] + # unique: true + # - columns: ['vueacteur_id'] + # type: hash + # - columns: ['labelqualite_id'] + # type: hash + # constraints: + # - type: foreign_key + # columns: [vueacteur_id] + # ref_columns: [identifiant_unique] + # ref_table: exposure_carte_acteur + # deferrable: true + # initially_deferred: true + # - type: foreign_key + # columns: [labelqualite_id] + # ref_columns: [id] + # ref_table: qfdmo_labelqualite + # deferrable: true + # initially_deferred: true + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - labelqualite_id + + # - name: exposure_carte_acteur_acteur_services + # description: "Acteur Acteur Services model" + # columns: + # - name: id + # description: "The primary key for this table" + # data_tests: + # - not_null + # - name: vueacteur_id + # description: "The vueacteur_id for this table" + # data_tests: + # - not_null + # - name: acteurservice_id + # description: "The acteurservice_id for this table" + # data_tests: + # - not_null + # config: + # materialized: table + # indexes: + # - columns: ['vueacteur_id', 'acteurservice_id'] + # unique: true + # - columns: ['vueacteur_id'] + # type: hash + # - columns: ['acteurservice_id'] + # type: hash + # constraints: + # - type: foreign_key + # columns: [vueacteur_id] + # ref_columns: [identifiant_unique] + # ref_table: exposure_carte_acteur + # deferrable: true + # initially_deferred: true + # - type: foreign_key + # columns: [acteurservice_id] + # ref_columns: [id] + # ref_table: qfdmo_acteurservice + # deferrable: true + # initially_deferred: true + # tests: + # - dbt_utils.unique_combination_of_columns: + # combination_of_columns: + # - vueacteur_id + # - acteurservice_id + + # - name: exposure_carte_propositionservice + # description: "Proposition Service model" + # columns: + # - name: id + # description: "The primary key for this table" + # data_tests: + # - unique + # - not_null + # - name: acteur_id + # description: "The vueacteur_id for this table" + # data_tests: + # - not_null + # - name: action_id + # description: "The action_id for this table" + # data_tests: + # - not_null + # - name: ps_id + # description: "The ps_id for this table" + # - name: rps_id + # description: "The rps_id for this table" + # - name: revision_existe + # description: "The revision_existe for this table" + # config: + # materialized: table + # indexes: + # - columns: ['acteur_id', 'action_id'] + # unique: true + # - columns: ['acteur_id'] + # type: hash + # - columns: ['action_id'] + # type: hash + # - columns: ['id'] + # type: hash + # constraints: + # - type: foreign_key + # columns: [acteur_id] + # ref_columns: [identifiant_unique] + # ref_table: exposure_carte_acteur + # deferrable: true + # initially_deferred: true + # - type: foreign_key + # columns: [action_id] + # ref_columns: [id] + # ref_table: qfdmo_action + # deferrable: true + # initially_deferred: true + # tests: + # - dbt_utils.unique_combination_of_columns: + # combination_of_columns: + # - acteur_id + # - action_id + + # - name: exposure_carte_propositionservice_sous_categories + # description: "Proposition Service Sous Categories model" + # columns: + # - name: id + # description: "The primary key for this table" + # data_tests: + # - not_null + # - name: vuepropositionservice_id + # description: "The vuepropositionservice_id for this table" + # data_tests: + # - not_null + # - name: souscategorieobjet_id + # description: "The souscategorieobjet_id for this table" + # data_tests: + # - not_null + # config: + # materialized: table + # indexes: + # - columns: ['vuepropositionservice_id', 'souscategorieobjet_id'] + # unique: true + # - columns: ['vuepropositionservice_id'] + # type: hash + # - columns: ['souscategorieobjet_id'] + # type: hash + # constraints: + # - type: foreign_key + # columns: [vuepropositionservice_id] + # ref_columns: [id] + # ref_table: exposure_carte_propositionservice + # deferrable: true + # initially_deferred: true + # - type: foreign_key + # columns: [souscategorieobjet_id] + # ref_columns: [id] + # ref_table: qfdmo_souscategorieobjet + # deferrable: true + # initially_deferred: true + # tests: + # - dbt_utils.unique_combination_of_columns: + # combination_of_columns: + # - vuepropositionservice_id + # - souscategorieobjet_id diff --git a/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur.sql b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur.sql new file mode 100644 index 000000000..c5c942c60 --- /dev/null +++ b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_exhaustive_acteur') }} \ No newline at end of file diff --git a/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_acteur_services.sql b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_acteur_services.sql new file mode 100644 index 000000000..bf836a57b --- /dev/null +++ b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_acteur_services.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_exhaustive_acteur_acteur_services') }} \ No newline at end of file diff --git a/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_labels.sql b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_labels.sql new file mode 100644 index 000000000..676beb1a1 --- /dev/null +++ b/dbt/models/exposure/exhaustive/exposure_exhaustive_acteur_labels.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_exhaustive_acteur_labels') }} \ No newline at end of file diff --git a/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice.sql b/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice.sql new file mode 100644 index 000000000..f3115b957 --- /dev/null +++ b/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_exhaustive_propositionservice') }} \ No newline at end of file diff --git a/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice_sous_categories.sql b/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice_sous_categories.sql new file mode 100644 index 000000000..2f1dddbd1 --- /dev/null +++ b/dbt/models/exposure/exhaustive/exposure_exhaustive_propositionservice_sous_categories.sql @@ -0,0 +1 @@ +select * from {{ ref('marts_exhaustive_propositionservice_sous_categories') }} \ No newline at end of file diff --git a/dbt/models/opendata_acteurs/schema.yml b/dbt/models/exposure/exhaustive/schema.yml similarity index 65% rename from dbt/models/opendata_acteurs/schema.yml rename to dbt/models/exposure/exhaustive/schema.yml index 4afe9e817..e615bca31 100644 --- a/dbt/models/opendata_acteurs/schema.yml +++ b/dbt/models/exposure/exhaustive/schema.yml @@ -1,15 +1,23 @@ -# From exhaustive_acteurs, build acteurs tables which will be used to display them in the carte - version: 2 models: - - name: temp_opendata_filteredacteur - description: "Vue sur les acteurs affichés sur la carte" + - name: exposure_exhaustive_acteur + description: "Acteur model" columns: - name: identifiant_unique - description: "L'identifiant unique de l'acteur" + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: uuid + description: "The uuid for this table" + data_tests: + - unique + - not_null - name: nom description: "Le nom de l'acteur" + data_tests: + - not_null - name: description description: "La description de l'acteur" - name: acteur_type_id @@ -62,160 +70,118 @@ models: description: "L'action principale de l'acteur" - name: modifie_le description: "La date de modification de l'acteur" - data_tests: - - not_null - name: parent_id description: "L'identifiant du parent de l'acteur" - name: cree_le description: "La date de création de l'acteur" - data_tests: - - not_null - name: statut description: "Le statut de l'acteur" + - name: revision_existe + description: "Le fait que l'acteur est une révision" data_tests: - not_null - config: - materialized: ephemeral - - name: temp_opendata_parentpropositionservice - description: "Table temporaire pour calculer les parents des propositions de service" - columns: - - name: id - description: "L'identifiant de la proposition de service" - data_tests: - - not_null - - name: parent_id - description: "L'identifiant du parent de la proposition de service" - data_tests: - - not_null - - name: acteur_id - description: "L'identifiant de l'acteur" - data_tests: - - not_null - - name: action_id - description: "L'identifiant de l'action" - data_tests: - - not_null - config: - materialized: ephemeral - - name: temp_opendata_propositionservice - description: "Vue sur les propositions de service affichées sur la carte" - columns: - - name: id - description: "L'identifiant de la proposition de service" - data_tests: - - not_null - - unique - - name: acteur_id - description: "L'identifiant de l'acteur" - data_tests: - - not_null - - name: action_id - description: "L'identifiant de l'action" - data_tests: - - not_null - config: - materialized: ephemeral - - name: opendata_propositionservice - description: "Vue sur les propositions de service affichées sur la carte" - columns: - - name: id - description: "L'identifiant de la proposition de service" - data_tests: - - not_null - - unique - - name: acteur_id - description: "L'identifiant de l'acteur" - data_tests: - - not_null - - name: action_id - description: "L'identifiant de l'action" - data_tests: - - not_null + #TODO: ajouter les déclarations pour chaque champ config: materialized: table indexes: - - columns: ['acteur_id', 'action_id'] + - columns: ['modifie_le', 'identifiant_unique'] + type: btree + - columns: ['identifiant_unique'] + type: btree unique: true - - columns: ['acteur_id'] + - columns: ['code_postal'] + type: btree + - columns: ['nom'] + type: btree + - columns: ['siren'] + type: btree + - columns: ['siret'] + type: btree + - columns: ['source_id'] type: hash - - columns: ['action_id'] + - columns: ['ville'] + type: btree + - columns: ['acteur_type_id'] type: hash - - columns: ['id'] + - columns: ['location'] + type: gist + - columns: ['parent_id'] type: hash constraints: - type: foreign_key - columns: [acteur_id] - ref_columns: [identifiant_unique] - ref_table: opendata_acteur + columns: [acteur_type_id] + ref_columns: [id] + ref_table: qfdmo_acteurtype deferrable: true initially_deferred: true - type: foreign_key - columns: [action_id] + columns: [action_principale_id] ref_columns: [id] ref_table: qfdmo_action deferrable: true initially_deferred: true - tests: - - dbt_utils.unique_combination_of_columns: - combination_of_columns: - - acteur_id - - action_id - - name: opendata_propositionservice_sous_categories - description: "Vue sur les sous-catégories des propositions de service affichées sur la carte" + - type: foreign_key + columns: [source_id] + ref_columns: [id] + ref_table: qfdmo_source + deferrable: true + initially_deferred: true + - name: exposure_exhaustive_acteur_labels + description: "Acteur Labels model" columns: - name: id - description: "L'identifiant de la sous-catégorie" + description: "The primary key for this table" data_tests: + - unique - not_null - - name: propositionservice_id - description: "L'identifiant de la proposition de service" + - name: acteur_id + description: "The acteur_id for this table" data_tests: - not_null - - name: souscategorieobjet_id - description: "L'identifiant de la sous-catégorie" + - name: labelqualite_id + description: "The labelqualite_id for this table" data_tests: - not_null config: materialized: table indexes: - - columns: ['propositionservice_id', 'souscategorieobjet_id'] + - columns: ['acteur_id', 'labelqualite_id'] unique: true - - columns: ['propositionservice_id'] + - columns: ['acteur_id'] type: hash - - columns: ['souscategorieobjet_id'] + - columns: ['labelqualite_id'] type: hash constraints: - type: foreign_key - columns: [propositionservice_id] - ref_columns: [id] - ref_table: opendata_propositionservice + columns: [acteur_id] + ref_columns: [identifiant_unique] + ref_table: exposure_exhaustive_acteur deferrable: true initially_deferred: true - type: foreign_key - columns: [souscategorieobjet_id] + columns: [labelqualite_id] ref_columns: [id] - ref_table: qfdmo_souscategorieobjet + ref_table: qfdmo_labelqualite deferrable: true initially_deferred: true tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: - - propositionservice_id - - souscategorieobjet_id - - - name: opendata_acteur_acteur_services - description: "Lien entre acteur de la carte et acteur_services" + - acteur_id + - labelqualite_id + - name: exposure_exhaustive_acteur_acteur_services + description: "Acteur Acteur Services model" columns: - name: id - description: "L'identifiant du lien entre acteur et acteur_services" + description: "The primary key for this table" data_tests: - not_null - name: acteur_id - description: "L'identifiant de l'acteur" + description: "The acteur_id for this table" data_tests: - not_null - name: acteurservice_id - description: "L'identifiant du service" + description: "The acteurservice_id for this table" data_tests: - not_null config: @@ -231,7 +197,7 @@ models: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: opendata_acteur + ref_table: exposure_exhaustive_acteur deferrable: true initially_deferred: true - type: foreign_key @@ -245,141 +211,96 @@ models: combination_of_columns: - acteur_id - acteurservice_id - - - name: opendata_acteur_labels - description: "Lien entre acteur de la carte et labels" + - name: exposure_exhaustive_propositionservice + description: "Proposition Service model" columns: - name: id - description: "L'identifiant du lien entre acteur et label" + description: "The primary key for this table" data_tests: + - unique - not_null - name: acteur_id - description: "L'identifiant de l'acteur" + description: "The acteur_id for this table" data_tests: - not_null - - name: labelqualite_id - description: "L'identifiant du label" + - name: action_id + description: "The action_id for this table" data_tests: - not_null + - name: ps_id + description: "The ps_id for this table" + - name: rps_id + description: "The rps_id for this table" + - name: revision_existe + description: "The revision_existe for this table" config: materialized: table indexes: - - columns: ['acteur_id', 'labelqualite_id'] + - columns: ['acteur_id', 'action_id'] unique: true - columns: ['acteur_id'] type: hash - - columns: ['labelqualite_id'] + - columns: ['action_id'] + type: hash + - columns: ['id'] type: hash constraints: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: opendata_acteur + ref_table: exposure_exhaustive_acteur deferrable: true initially_deferred: true - type: foreign_key - columns: [labelqualite_id] + columns: [action_id] ref_columns: [id] - ref_table: qfdmo_labelqualite + ref_table: qfdmo_action deferrable: true initially_deferred: true tests: - dbt_utils.unique_combination_of_columns: combination_of_columns: - acteur_id - - labelqualite_id - - - name: opendata_acteur_sources - description: "Lien entre acteur de la carte et sources" + - action_id + - name: exposure_exhaustive_propositionservice_sous_categories + description: "Proposition Service Sous Categories model" columns: - name: id - description: "L'identifiant de la source" - data_tests: - - not_null - - name: acteur_id - description: "L'identifiant de l'acteur" + description: "The primary key for this table" data_tests: - not_null - - name: source_id - description: "L'identifiant de la source" - data_tests: - - not_null - config: - materialized: table - indexes: - - columns: ['acteur_id', 'source_id'] - unique: true - - columns: ['acteur_id'] - type: hash - - columns: ['source_id'] - type: hash - constraints: - - type: foreign_key - columns: [acteur_id] - ref_columns: [identifiant_unique] - ref_table: opendata_acteur - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [source_id] - ref_columns: [id] - ref_table: qfdmo_source - deferrable: true - - name: opendata_acteur - description: "Vue sur les acteurs affichés sur la carte" - columns: - - name: uuid - description: "L'identifiant unique de l'acteur" + - name: propositionservice_id + description: "The propositionservice_id for this table" data_tests: - not_null - - unique - - name: identifiant_unique - description: "L'identifiant unique de l'acteur" + - name: souscategorieobjet_id + description: "The souscategorieobjet_id for this table" data_tests: - not_null - - unique config: materialized: table indexes: - - columns: ['modifie_le', 'identifiant_unique'] - type: btree - - columns: ['identifiant_unique'] - type: btree + - columns: ['propositionservice_id', 'souscategorieobjet_id'] unique: true - - columns: ['code_postal'] - type: btree - - columns: ['nom'] - type: btree - - columns: ['siren'] - type: btree - - columns: ['siret'] - type: btree - - columns: ['source_id'] - type: hash - - columns: ['ville'] - type: btree - - columns: ['acteur_type_id'] + - columns: ['propositionservice_id'] type: hash - - columns: ['location'] - type: gist - - columns: ['parent_id'] + - columns: ['souscategorieobjet_id'] type: hash constraints: - type: foreign_key - columns: [acteur_type_id] - ref_columns: [id] - ref_table: qfdmo_acteurtype - deferrable: true - initially_deferred: true - - type: foreign_key - columns: [action_principale_id] + columns: [propositionservice_id] ref_columns: [id] - ref_table: qfdmo_action + ref_table: exposure_exhaustive_propositionservice deferrable: true initially_deferred: true - type: foreign_key - columns: [source_id] + columns: [souscategorieobjet_id] ref_columns: [id] - ref_table: qfdmo_source + ref_table: qfdmo_souscategorieobjet deferrable: true initially_deferred: true + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - propositionservice_id + - souscategorieobjet_id diff --git a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur.sql b/dbt/models/intermediate/int_acteur.sql similarity index 96% rename from dbt/models/exhaustive_acteurs/qfdmo_vueacteur.sql rename to dbt/models/intermediate/int_acteur.sql index b3b73d07b..3e1a554a3 100644 --- a/dbt/models/exhaustive_acteurs/qfdmo_vueacteur.sql +++ b/dbt/models/intermediate/int_acteur.sql @@ -33,6 +33,6 @@ SELECT COALESCE(a.cree_le, ra.cree_le) AS cree_le, -- avec_revision est true si la table revisionacteur existe ra.identifiant_unique IS NOT NULL AS revision_existe -FROM qfdmo_acteur AS a -FULL JOIN qfdmo_revisionacteur AS ra +FROM {{ ref('base_acteur') }} AS a +FULL JOIN {{ ref('base_revisionacteur') }} AS ra ON a.identifiant_unique = ra.identifiant_unique diff --git a/dbt/models/intermediate/int_acteur_acteur_services.sql b/dbt/models/intermediate/int_acteur_acteur_services.sql new file mode 100644 index 000000000..4d07ef37d --- /dev/null +++ b/dbt/models/intermediate/int_acteur_acteur_services.sql @@ -0,0 +1,23 @@ +WITH norevacteur_acteur_services AS ( + SELECT + aas.acteur_id AS acteur_id, + aas.acteurservice_id AS acteurservice_id + FROM {{ ref('base_acteur_acteur_services') }} AS aas + INNER JOIN {{ ref('int_acteur') }} AS a ON aas.acteur_id = a.identifiant_unique AND a.revision_existe = false + GROUP BY aas.acteur_id, aas.acteurservice_id +), +revisionacteur_acteur_services AS ( + SELECT + raas.revisionacteur_id AS acteur_id, + raas.acteurservice_id AS acteurservice_id + FROM {{ ref('base_revisionacteur_acteur_services') }} AS raas + INNER JOIN {{ ref('int_acteur') }} AS a ON raas.revisionacteur_id = a.identifiant_unique AND a.revision_existe = true + GROUP BY raas.revisionacteur_id, raas.acteurservice_id +), +acteur_acteur_services AS ( + SELECT * FROM norevacteur_acteur_services + UNION ALL + SELECT * FROM revisionacteur_acteur_services +) + +SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, acteurservice_id) AS id, * FROM acteur_acteur_services \ No newline at end of file diff --git a/dbt/models/intermediate/int_acteur_labels.sql b/dbt/models/intermediate/int_acteur_labels.sql new file mode 100644 index 000000000..d2af63a30 --- /dev/null +++ b/dbt/models/intermediate/int_acteur_labels.sql @@ -0,0 +1,24 @@ +WITH norevacteur_labels AS ( + SELECT + al.acteur_id AS acteur_id, + al.labelqualite_id AS labelqualite_id + FROM {{ ref('base_acteur_labels') }} AS al + -- We can't use the base_acteur table because it doesn't have the revision_existe column + INNER JOIN {{ ref('int_acteur') }} AS a ON al.acteur_id = a.identifiant_unique AND a.revision_existe = false +), +revisionacteur_labels AS ( + SELECT + ral.revisionacteur_id AS acteur_id, + ral.labelqualite_id AS labelqualite_id + FROM {{ ref('base_revisionacteur_labels') }} AS ral + -- We can't use the base_acteur table because it doesn't have the revision_existe column + INNER JOIN {{ ref('int_acteur') }} AS a ON ral.revisionacteur_id = a.identifiant_unique AND a.revision_existe = true +), +acteur_labels AS ( + SELECT * FROM norevacteur_labels + UNION ALL + SELECT * FROM revisionacteur_labels +) + +SELECT ROW_NUMBER() OVER (ORDER BY acteur_id, labelqualite_id) AS id, * +FROM acteur_labels diff --git a/dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice.sql b/dbt/models/intermediate/int_propositionservice.sql similarity index 56% rename from dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice.sql rename to dbt/models/intermediate/int_propositionservice.sql index b28c656b2..58132755a 100644 --- a/dbt/models/exhaustive_acteurs/qfdmo_vuepropositionservice.sql +++ b/dbt/models/intermediate/int_propositionservice.sql @@ -6,19 +6,20 @@ WITH propositionservice AS ( ps.id::integer AS ps_id, NULL::integer AS rps_id, false AS revision_existe - FROM qfdmo_propositionservice ps - INNER JOIN {{ ref('qfdmo_vueacteur') }} AS a ON ps.acteur_id = a.identifiant_unique AND a.revision_existe = false + FROM {{ ref('base_propositionservice') }} AS ps + INNER JOIN {{ ref('int_acteur') }} AS a ON ps.acteur_id = a.identifiant_unique AND a.revision_existe = false ), revisionpropositionservice AS ( SELECT CONCAT('RPS_', rps.id::text) AS id, - rps.acteur_id AS vueacteur_id, + rps.acteur_id AS acteur_id, rps.action_id AS action_id, NULL::integer AS ps_id, rps.id::integer AS rps_id, true AS revision_existe - FROM qfdmo_revisionpropositionservice rps - JOIN {{ ref('qfdmo_vueacteur') }} AS a ON rps.acteur_id = a.identifiant_unique AND a.revision_existe = true + FROM {{ ref('base_revisionpropositionservice') }} AS rps + -- FIXME : test the INNER JOIN, is it necessary ? + INNER JOIN {{ ref('int_acteur') }} AS a ON rps.acteur_id = a.identifiant_unique AND a.revision_existe = true ) SELECT * FROM propositionservice diff --git a/dbt/models/intermediate/int_propositionservice_sous_categories.sql b/dbt/models/intermediate/int_propositionservice_sous_categories.sql new file mode 100644 index 000000000..d3f65a75f --- /dev/null +++ b/dbt/models/intermediate/int_propositionservice_sous_categories.sql @@ -0,0 +1,22 @@ + + +WITH propositionservice_sous_categories AS ( + SELECT + pssscat.id AS id, + ps.id AS propositionservice_id, + pssscat.souscategorieobjet_id AS souscategorieobjet_id + FROM {{ ref('base_propositionservice_sous_categories') }} AS pssscat + INNER JOIN {{ ref('int_propositionservice') }} AS ps ON CONCAT('PS_', pssscat.propositionservice_id) = ps.id AND ps.revision_existe = false +), +revisionpropositionservice_sous_categories AS ( + SELECT + rpssscat.id AS id, + ps.id AS propositionservice_id, + rpssscat.souscategorieobjet_id AS souscategorieobjet_id + FROM {{ ref('base_revisionpropositionservice_sous_categories') }} AS rpssscat + INNER JOIN {{ ref('int_propositionservice') }} AS ps ON CONCAT('RPS_', rpssscat.revisionpropositionservice_id) = ps.id AND ps.revision_existe = true +) + +SELECT * FROM propositionservice_sous_categories +UNION ALL +SELECT * FROM revisionpropositionservice_sous_categories diff --git a/dbt/models/intermediate/schema.yml b/dbt/models/intermediate/schema.yml new file mode 100644 index 000000000..e1ebe1e50 --- /dev/null +++ b/dbt/models/intermediate/schema.yml @@ -0,0 +1,170 @@ +version: 2 + +models: + - name: int_acteur + description: "Acteur model" + columns: + - name: identifiant_unique + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: uuid + description: "The uuid for this table" + data_tests: + - unique + - not_null + - name: nom + description: "Le nom de l'acteur" + data_tests: + - not_null + - name: description + description: "La description de l'acteur" + - name: acteur_type_id + description: "Le type d'acteur" + - name: adresse + description: "L'adresse de l'acteur" + - name: adresse_complement + description: "L'adresse complémentaire de l'acteur" + - name: code_postal + description: "Le code postal de l'acteur" + - name: ville + description: "La ville de l'acteur" + - name: url + description: "L'URL de l'acteur" + - name: email + description: "L'email de l'acteur" + - name: location + description: "La localisation de l'acteur" + - name: telephone + description: "Le numéro de téléphone de l'acteur" + - name: nom_commercial + description: "Le nom commercial de l'acteur" + - name: nom_officiel + description: "Le nom officiel de l'acteur" + - name: siren + description: "Le numéro SIREN de l'acteur" + - name: siret + description: "Le numéro SIRET de l'acteur" + - name: source_id + description: "L'identifiant source de l'acteur" + - name: identifiant_externe + description: "L'identifiant externe de l'acteur" + - name: naf_principal + description: "Le code NAF principal de l'acteur" + - name: commentaires + description: "Les commentaires de l'acteur" + - name: horaires_osm + description: "Les horaires OSM de l'acteur" + - name: horaires_description + description: "La description des horaires de l'acteur" + - name: public_accueilli + description: "Le public accueilli par l'acteur" + - name: reprise + description: "La reprise de l'acteur" + - name: exclusivite_de_reprisereparation + description: "L'exclusivité de la réparation de l'acteur" + - name: uniquement_sur_rdv + description: "Le fait que l'acteur soit uniquement sur RDV" + - name: action_principale_id + description: "L'action principale de l'acteur" + - name: modifie_le + description: "La date de modification de l'acteur" + - name: parent_id + description: "L'identifiant du parent de l'acteur" + - name: cree_le + description: "La date de création de l'acteur" + - name: statut + description: "Le statut de l'acteur" + - name: revision_existe + description: "Le fait que l'acteur est une révision" + data_tests: + - not_null + - name: int_acteur_acteur_services + description: "Acteur Acteur Services model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: acteurservice_id + description: "The acteurservice_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - acteurservice_id + - name: int_acteur_labels + description: "Acteur Labels model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: labelqualite_id + description: "The labelqualite_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - labelqualite_id + - name: int_propositionservice + description: "Proposition Service model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: action_id + description: "The action_id for this table" + data_tests: + - not_null + - name: ps_id + description: "The ps_id for this table" + - name: rps_id + description: "The rps_id for this table" + - name: revision_existe + description: "The revision_existe for this table" + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - action_id + - name: int_propositionservice_sous_categories + description: "Proposition Service Sous Categories model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: propositionservice_id + description: "The propositionservice_id for this table" + data_tests: + - not_null + - name: souscategorieobjet_id + description: "The souscategorieobjet_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - propositionservice_id + - souscategorieobjet_id diff --git a/dbt/models/marts/carte/marts_carte_acteur.sql b/dbt/models/marts/carte/marts_carte_acteur.sql new file mode 100644 index 000000000..8f29ca524 --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_acteur.sql @@ -0,0 +1 @@ +{{ acteur('marts_carte_filtered_acteur', 'marts_carte_propositionservice')}} diff --git a/dbt/models/marts/carte/marts_carte_acteur_acteur_services.sql b/dbt/models/marts/carte/marts_carte_acteur_acteur_services.sql new file mode 100644 index 000000000..93bd01603 --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_acteur_acteur_services.sql @@ -0,0 +1,4 @@ +-- depends_on: {{ ref('marts_carte_filtered_acteur') }} +-- depends_on: {{ ref('marts_carte_acteur') }} + +{{ acteur_acteur_services('marts_carte_filtered_acteur', 'marts_carte_acteur')}} diff --git a/dbt/models/marts/carte/marts_carte_acteur_labels.sql b/dbt/models/marts/carte/marts_carte_acteur_labels.sql new file mode 100644 index 000000000..6a01560f7 --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_acteur_labels.sql @@ -0,0 +1 @@ +{{ acteur_labels('marts_carte_filtered_acteur', 'marts_carte_acteur')}} \ No newline at end of file diff --git a/dbt/models/marts/carte/marts_carte_acteur_sources.sql b/dbt/models/marts/carte/marts_carte_acteur_sources.sql new file mode 100644 index 000000000..ba72c7c0e --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_acteur_sources.sql @@ -0,0 +1 @@ +{{ acteur_sources('marts_carte_filtered_acteur', 'marts_carte_acteur')}} diff --git a/dbt/models/carte_acteurs/temp_filteredacteur.sql b/dbt/models/marts/carte/marts_carte_filtered_acteur.sql similarity index 70% rename from dbt/models/carte_acteurs/temp_filteredacteur.sql rename to dbt/models/marts/carte/marts_carte_filtered_acteur.sql index 9b4c2bf9e..52806dcb6 100644 --- a/dbt/models/carte_acteurs/temp_filteredacteur.sql +++ b/dbt/models/marts/carte/marts_carte_filtered_acteur.sql @@ -1,6 +1,6 @@ SELECT tva.* -FROM qfdmo_vueacteur AS tva -LEFT JOIN qfdmo_vueacteur AS tpva +FROM {{ ref('int_acteur') }} AS tva +LEFT JOIN {{ ref('int_acteur') }} AS tpva ON tva.parent_id = tpva.identifiant_unique WHERE tva.statut = 'ACTIF' AND (tpva.statut is null or tpva.statut = 'ACTIF') -- AND va.public_accueilli != 'Professionnels' diff --git a/dbt/models/marts/carte/marts_carte_filtered_parentpropositionservice.sql b/dbt/models/marts/carte/marts_carte_filtered_parentpropositionservice.sql new file mode 100644 index 000000000..989ae6e13 --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_filtered_parentpropositionservice.sql @@ -0,0 +1 @@ +{{ filtered_parentpropositionservice('marts_carte_filtered_acteur')}} diff --git a/dbt/models/marts/carte/marts_carte_filtered_propositionservice.sql b/dbt/models/marts/carte/marts_carte_filtered_propositionservice.sql new file mode 100644 index 000000000..c08503400 --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_filtered_propositionservice.sql @@ -0,0 +1 @@ +{{ filtered_propositionservice('marts_carte_filtered_acteur', 'marts_carte_filtered_parentpropositionservice' )}} diff --git a/dbt/models/marts/carte/marts_carte_propositionservice.sql b/dbt/models/marts/carte/marts_carte_propositionservice.sql new file mode 100644 index 000000000..5d4b6067c --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_propositionservice.sql @@ -0,0 +1 @@ +{{ propositionservice('marts_carte_filtered_propositionservice', 'marts_carte_propositionservice_sous_categories')}} diff --git a/dbt/models/marts/carte/marts_carte_propositionservice_sous_categories.sql b/dbt/models/marts/carte/marts_carte_propositionservice_sous_categories.sql new file mode 100644 index 000000000..ba93806fb --- /dev/null +++ b/dbt/models/marts/carte/marts_carte_propositionservice_sous_categories.sql @@ -0,0 +1 @@ +{{ propositionservice_sous_categories('marts_carte_filtered_acteur', 'marts_carte_filtered_propositionservice', 'marts_carte_filtered_parentpropositionservice')}} diff --git a/dbt/models/carte_acteurs/schema.yml b/dbt/models/marts/carte/schema.yml similarity index 95% rename from dbt/models/carte_acteurs/schema.yml rename to dbt/models/marts/carte/schema.yml index 81b9e6213..5916f7293 100644 --- a/dbt/models/carte_acteurs/schema.yml +++ b/dbt/models/marts/carte/schema.yml @@ -3,7 +3,7 @@ version: 2 models: - - name: temp_filteredacteur + - name: marts_carte_filtered_acteur description: "Vue sur les acteurs affichés sur la carte" columns: - name: identifiant_unique @@ -76,7 +76,7 @@ models: - not_null config: materialized: ephemeral - - name: temp_parentpropositionservice + - name: marts_carte_filtered_parentpropositionservice description: "Table temporaire pour calculer les parents des propositions de service" columns: - name: id @@ -97,7 +97,7 @@ models: - not_null config: materialized: ephemeral - - name: temp_propositionservice + - name: marts_carte_filtered_propositionservice description: "Vue sur les propositions de service affichées sur la carte" columns: - name: id @@ -115,7 +115,7 @@ models: - not_null config: materialized: ephemeral - - name: carte_propositionservice + - name: marts_carte_propositionservice description: "Vue sur les propositions de service affichées sur la carte" columns: - name: id @@ -146,7 +146,7 @@ models: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: carte_acteur + ref_table: marts_carte_acteur deferrable: true initially_deferred: true - type: foreign_key @@ -160,7 +160,7 @@ models: combination_of_columns: - acteur_id - action_id - - name: carte_propositionservice_sous_categories + - name: marts_carte_propositionservice_sous_categories description: "Vue sur les sous-catégories des propositions de service affichées sur la carte" columns: - name: id @@ -188,7 +188,7 @@ models: - type: foreign_key columns: [propositionservice_id] ref_columns: [id] - ref_table: carte_propositionservice + ref_table: marts_carte_propositionservice deferrable: true initially_deferred: true - type: foreign_key @@ -203,7 +203,7 @@ models: - propositionservice_id - souscategorieobjet_id - - name: carte_acteur_acteur_services + - name: marts_carte_acteur_acteur_services description: "Lien entre acteur de la carte et acteur_services" columns: - name: id @@ -231,7 +231,7 @@ models: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: carte_acteur + ref_table: marts_carte_acteur deferrable: true initially_deferred: true - type: foreign_key @@ -246,7 +246,7 @@ models: - acteur_id - acteurservice_id - - name: carte_acteur_labels + - name: marts_carte_acteur_labels description: "Lien entre acteur de la carte et labels" columns: - name: id @@ -274,7 +274,7 @@ models: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: carte_acteur + ref_table: marts_carte_acteur deferrable: true initially_deferred: true - type: foreign_key @@ -289,7 +289,7 @@ models: - acteur_id - labelqualite_id - - name: carte_acteur_sources + - name: marts_carte_acteur_sources description: "Lien entre acteur de la carte et sources" columns: - name: id @@ -317,7 +317,7 @@ models: - type: foreign_key columns: [acteur_id] ref_columns: [identifiant_unique] - ref_table: carte_acteur + ref_table: marts_carte_acteur deferrable: true initially_deferred: true - type: foreign_key @@ -325,7 +325,7 @@ models: ref_columns: [id] ref_table: qfdmo_source deferrable: true - - name: carte_acteur + - name: marts_carte_acteur description: "Vue sur les acteurs affichés sur la carte" columns: - name: uuid diff --git a/dbt/models/marts/exhaustive/marts_exhaustive_acteur.sql b/dbt/models/marts/exhaustive/marts_exhaustive_acteur.sql new file mode 100644 index 000000000..95f301103 --- /dev/null +++ b/dbt/models/marts/exhaustive/marts_exhaustive_acteur.sql @@ -0,0 +1 @@ +select * from {{ ref('int_acteur') }} \ No newline at end of file diff --git a/dbt/models/marts/exhaustive/marts_exhaustive_acteur_acteur_services.sql b/dbt/models/marts/exhaustive/marts_exhaustive_acteur_acteur_services.sql new file mode 100644 index 000000000..34456dd07 --- /dev/null +++ b/dbt/models/marts/exhaustive/marts_exhaustive_acteur_acteur_services.sql @@ -0,0 +1 @@ +select * from {{ ref('int_acteur_acteur_services') }} \ No newline at end of file diff --git a/dbt/models/marts/exhaustive/marts_exhaustive_acteur_labels.sql b/dbt/models/marts/exhaustive/marts_exhaustive_acteur_labels.sql new file mode 100644 index 000000000..16860b6a9 --- /dev/null +++ b/dbt/models/marts/exhaustive/marts_exhaustive_acteur_labels.sql @@ -0,0 +1 @@ +select * from {{ ref('int_acteur_labels') }} \ No newline at end of file diff --git a/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice.sql b/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice.sql new file mode 100644 index 000000000..7060f6cf9 --- /dev/null +++ b/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice.sql @@ -0,0 +1 @@ +select * from {{ ref('int_propositionservice') }} \ No newline at end of file diff --git a/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice_sous_categories.sql b/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice_sous_categories.sql new file mode 100644 index 000000000..08c6f5698 --- /dev/null +++ b/dbt/models/marts/exhaustive/marts_exhaustive_propositionservice_sous_categories.sql @@ -0,0 +1 @@ +select * from {{ ref('int_propositionservice_sous_categories') }} \ No newline at end of file diff --git a/dbt/models/marts/exhaustive/schema.yml b/dbt/models/marts/exhaustive/schema.yml new file mode 100644 index 000000000..40788925b --- /dev/null +++ b/dbt/models/marts/exhaustive/schema.yml @@ -0,0 +1,170 @@ +version: 2 + +models: + - name: marts_exhaustive_acteur + description: "Acteur model" + columns: + - name: identifiant_unique + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: uuid + description: "The uuid for this table" + data_tests: + - unique + - not_null + - name: nom + description: "Le nom de l'acteur" + data_tests: + - not_null + - name: description + description: "La description de l'acteur" + - name: acteur_type_id + description: "Le type d'acteur" + - name: adresse + description: "L'adresse de l'acteur" + - name: adresse_complement + description: "L'adresse complémentaire de l'acteur" + - name: code_postal + description: "Le code postal de l'acteur" + - name: ville + description: "La ville de l'acteur" + - name: url + description: "L'URL de l'acteur" + - name: email + description: "L'email de l'acteur" + - name: location + description: "La localisation de l'acteur" + - name: telephone + description: "Le numéro de téléphone de l'acteur" + - name: nom_commercial + description: "Le nom commercial de l'acteur" + - name: nom_officiel + description: "Le nom officiel de l'acteur" + - name: siren + description: "Le numéro SIREN de l'acteur" + - name: siret + description: "Le numéro SIRET de l'acteur" + - name: source_id + description: "L'identifiant source de l'acteur" + - name: identifiant_externe + description: "L'identifiant externe de l'acteur" + - name: naf_principal + description: "Le code NAF principal de l'acteur" + - name: commentaires + description: "Les commentaires de l'acteur" + - name: horaires_osm + description: "Les horaires OSM de l'acteur" + - name: horaires_description + description: "La description des horaires de l'acteur" + - name: public_accueilli + description: "Le public accueilli par l'acteur" + - name: reprise + description: "La reprise de l'acteur" + - name: exclusivite_de_reprisereparation + description: "L'exclusivité de la réparation de l'acteur" + - name: uniquement_sur_rdv + description: "Le fait que l'acteur soit uniquement sur RDV" + - name: action_principale_id + description: "L'action principale de l'acteur" + - name: modifie_le + description: "La date de modification de l'acteur" + - name: parent_id + description: "L'identifiant du parent de l'acteur" + - name: cree_le + description: "La date de création de l'acteur" + - name: statut + description: "Le statut de l'acteur" + - name: revision_existe + description: "Le fait que l'acteur est une révision" + data_tests: + - not_null + - name: marts_exhaustive_acteur_acteur_services + description: "Acteur Acteur Services model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: acteurservice_id + description: "The acteurservice_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - acteurservice_id + - name: marts_exhaustive_acteur_labels + description: "Acteur Labels model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: labelqualite_id + description: "The labelqualite_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - labelqualite_id + - name: marts_exhaustive_propositionservice + description: "Proposition Service model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - unique + - not_null + - name: acteur_id + description: "The acteur_id for this table" + data_tests: + - not_null + - name: action_id + description: "The action_id for this table" + data_tests: + - not_null + - name: ps_id + description: "The ps_id for this table" + - name: rps_id + description: "The rps_id for this table" + - name: revision_existe + description: "The revision_existe for this table" + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - acteur_id + - action_id + - name: marts_exhaustive_propositionservice_sous_categories + description: "Proposition Service Sous Categories model" + columns: + - name: id + description: "The primary key for this table" + data_tests: + - not_null + - name: propositionservice_id + description: "The propositionservice_id for this table" + data_tests: + - not_null + - name: souscategorieobjet_id + description: "The souscategorieobjet_id for this table" + data_tests: + - not_null + tests: + - dbt_utils.unique_combination_of_columns: + combination_of_columns: + - propositionservice_id + - souscategorieobjet_id diff --git a/dbt/models/opendata_acteurs/opendata_acteur.sql b/dbt/models/opendata_acteurs/opendata_acteur.sql deleted file mode 100644 index 5fb35c278..000000000 --- a/dbt/models/opendata_acteurs/opendata_acteur.sql +++ /dev/null @@ -1,4 +0,0 @@ -SELECT DISTINCT va.* -FROM {{ ref('temp_opendata_filteredacteur') }} AS va -INNER JOIN {{ ref('opendata_propositionservice') }} AS cps - ON va.identifiant_unique = cps.acteur_id diff --git a/dbt/models/opendata_acteurs/opendata_acteur_formatted.sql b/dbt/models/opendata_acteurs/opendata_acteur_formatted.sql deleted file mode 100644 index e05d33034..000000000 --- a/dbt/models/opendata_acteurs/opendata_acteur_formatted.sql +++ /dev/null @@ -1,100 +0,0 @@ -WITH deduplicated_opened_sources AS ( - SELECT - da.uuid, - string_agg(DISTINCT source.libelle, '|' ORDER BY source.libelle) as sources_list - FROM {{ ref('opendata_acteur') }} AS da - LEFT JOIN {{ ref('opendata_acteur_sources') }} AS das - ON da.identifiant_unique = das.acteur_id - LEFT JOIN qfdmo_source AS source - ON das.source_id = source.id - GROUP BY da.uuid -), -proposition_services AS ( - SELECT - da.uuid, - jsonb_agg( - jsonb_build_object( - 'action', a.code, - 'sous_categories', ( - SELECT jsonb_agg(sco.code) - FROM {{ ref('opendata_propositionservice_sous_categories') }} AS pssc - JOIN qfdmo_souscategorieobjet AS sco ON pssc.souscategorieobjet_id = sco.id - WHERE pssc.propositionservice_id = ps.id - ) - ) - ) as services - FROM {{ ref('opendata_acteur') }} AS da - JOIN {{ ref('opendata_propositionservice') }} AS ps ON ps.acteur_id = da.identifiant_unique - JOIN qfdmo_action AS a ON ps.action_id = a.id - GROUP BY da.uuid -), -acteur_labels AS ( - SELECT - da.uuid, - string_agg(DISTINCT lq.code, '|' ORDER BY lq.code) as labels - FROM {{ ref('opendata_acteur') }} AS da - LEFT JOIN {{ ref('opendata_acteur_labels') }} AS dal - ON da.identifiant_unique = dal.acteur_id - LEFT JOIN qfdmo_labelqualite AS lq ON dal.labelqualite_id = lq.id - GROUP BY da.uuid -), -acteur_services AS ( - SELECT - da.uuid, - string_agg(DISTINCT as2.code, '|' ORDER BY as2.code) as services - FROM {{ ref('opendata_acteur') }} AS da - LEFT JOIN {{ ref('opendata_acteur_acteur_services') }} AS daas - ON da.identifiant_unique = daas.acteur_id - LEFT JOIN qfdmo_acteurservice AS as2 ON daas.acteurservice_id = as2.id - GROUP BY da.uuid -) -SELECT - da.uuid as "Identifiant", - CASE - WHEN ds.sources_list IS NOT NULL - THEN 'Longue Vie Aux Objets|ADEME|' || ds.sources_list - ELSE 'Longue Vie Aux Objets|ADEME' - END as "Paternité", - da.nom as "Nom", - da.nom_commercial as "Nom commercial", - da.siren as "SIREN", - da.siret as "SIRET", - da.description as "Description", - at.code as "Type d'acteur", - da.url as "Site web", - CASE - WHEN da.telephone ~ '^0[67]' THEN NULL - WHEN EXISTS ( - SELECT 1 - FROM {{ ref('opendata_acteur_sources') }} das2 - JOIN qfdmo_source s ON das2.source_id = s.id - WHERE das2.acteur_id = da.identifiant_unique - AND s.code = 'carteco' - ) THEN NULL - ELSE da.telephone - END as "Téléphone", - da.adresse as "Adresse", - da.adresse_complement as "Complément d'adresse", - da.code_postal as "Code postal", - da.ville as "Ville", - ST_Y(da.location::geometry) as "latitude", - ST_X(da.location::geometry) as "longitude", - al.labels as "Qualités et labels", - da.public_accueilli as "Public accueilli", - da.reprise as "Reprise", - da.exclusivite_de_reprisereparation as "Exclusivité de reprise/réparation", - da.uniquement_sur_rdv as "Uniquement sur RDV", - acs.services as "Type de services", - ps.services::text as "Propositions de services", - to_char(da.modifie_le, 'YYYY-MM-DD') as "Date de dernière modification" -FROM {{ ref('opendata_acteur') }} AS da -LEFT JOIN qfdmo_acteurtype AS at ON da.acteur_type_id = at.id --- INNER JOIN : Only open lisense -INNER JOIN deduplicated_opened_sources AS ds ON da.uuid = ds.uuid -LEFT JOIN proposition_services AS ps ON da.uuid = ps.uuid -LEFT JOIN acteur_labels AS al ON da.uuid = al.uuid -LEFT JOIN acteur_services AS acs ON da.uuid = acs.uuid -WHERE da.statut = 'ACTIF' -AND da.public_accueilli NOT IN ('AUCUN', 'PROFESSIONNELS') -AND da.identifiant_unique NOT LIKE '%_reparation_%' -ORDER BY da.uuid \ No newline at end of file diff --git a/dbt/models/opendata_acteurs/opendata_propositionservice.sql b/dbt/models/opendata_acteurs/opendata_propositionservice.sql deleted file mode 100644 index ae2759867..000000000 --- a/dbt/models/opendata_acteurs/opendata_propositionservice.sql +++ /dev/null @@ -1,8 +0,0 @@ -SELECT - MIN(ps.id) AS id, - ps.acteur_id, - ps.action_id -FROM {{ ref('temp_opendata_propositionservice') }} AS ps -INNER JOIN {{ ref('opendata_propositionservice_sous_categories') }} AS pssscat - ON ps.id = pssscat.propositionservice_id -GROUP BY acteur_id, action_id diff --git a/dbt/models/opendata_acteurs/opendata_propositionservice_sous_categories.sql b/dbt/models/opendata_acteurs/opendata_propositionservice_sous_categories.sql deleted file mode 100644 index a8f1e9444..000000000 --- a/dbt/models/opendata_acteurs/opendata_propositionservice_sous_categories.sql +++ /dev/null @@ -1,32 +0,0 @@ -with - parent_vuepropositionservice_sous_categories - AS - ( - SELECT - MIN(qfdmo_vuepropositionservice_sous_categories.id) AS id, - CONCAT(temp_opendata_parentpropositionservice.parent_id::text, '_', temp_opendata_parentpropositionservice.action_id::text) AS propositionservice_id, - qfdmo_vuepropositionservice_sous_categories.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_vuepropositionservice_sous_categories - INNER JOIN {{ ref('temp_opendata_parentpropositionservice') }} AS temp_opendata_parentpropositionservice - ON temp_opendata_parentpropositionservice.id = qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id - GROUP BY - propositionservice_id, - souscategorieobjet_id - ), - nochild_vuepropositionservice_sous_categories - AS - ( - SELECT - qfdmo_vuepropositionservice_sous_categories.id AS id, - qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id AS propositionservice_id, - qfdmo_vuepropositionservice_sous_categories.souscategorieobjet_id AS souscategorieobjet_id - FROM qfdmo_vuepropositionservice_sous_categories - INNER JOIN {{ ref('temp_opendata_propositionservice') }} AS ps ON qfdmo_vuepropositionservice_sous_categories.vuepropositionservice_id = ps.id - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS cfa ON ps.acteur_id = cfa.identifiant_unique AND cfa.parent_id is null - ) - -SELECT * - FROM parent_vuepropositionservice_sous_categories -UNION ALL -SELECT * - FROM nochild_vuepropositionservice_sous_categories diff --git a/dbt/models/opendata_acteurs/temp_opendata_filteredacteur.sql b/dbt/models/opendata_acteurs/temp_opendata_filteredacteur.sql deleted file mode 100644 index 01abd4ffd..000000000 --- a/dbt/models/opendata_acteurs/temp_opendata_filteredacteur.sql +++ /dev/null @@ -1,10 +0,0 @@ -SELECT tva.* -FROM qfdmo_vueacteur AS tva -LEFT JOIN qfdmo_vueacteur AS tpva - ON tva.parent_id = tpva.identifiant_unique -LEFT JOIN qfdmo_source AS ts ON tva.source_id = ts.id -WHERE tva.statut = 'ACTIF' - AND (tpva.statut is null or tpva.statut = 'ACTIF') - AND ts.licence = 'OPEN_LICENSE' -- Only open lisense - AND tva.public_accueilli NOT IN ('AUCUN', 'PROFESSIONNELS') -- AND va.public_accueilli != 'Professionnels' ? - AND tva.identifiant_unique NOT LIKE '%_reparation_%' diff --git a/dbt/models/opendata_acteurs/temp_opendata_propositionservice.sql b/dbt/models/opendata_acteurs/temp_opendata_propositionservice.sql deleted file mode 100644 index 76034900e..000000000 --- a/dbt/models/opendata_acteurs/temp_opendata_propositionservice.sql +++ /dev/null @@ -1,21 +0,0 @@ -with parent_propositionservice AS ( - SELECT - concat(pps.parent_id::text, '_', pps.action_id::text) AS id, - pps.parent_id AS acteur_id, - pps.action_id AS action_id - FROM {{ ref('temp_opendata_parentpropositionservice') }} AS pps - group by 2,3 -), -nochild_propositionservice AS ( - SELECT - vps.id AS id, - vps.acteur_id AS acteur_id, - vps.action_id AS action_id - FROM qfdmo_vuepropositionservice AS vps - INNER JOIN {{ ref('temp_opendata_filteredacteur') }} AS cfa - ON vps.acteur_id = cfa.identifiant_unique AND cfa.parent_id is null -) - -SELECT * FROM parent_propositionservice -union all -SELECT * FROM nochild_propositionservice diff --git a/dbt/models/source/source_acteur.yml b/dbt/models/source/source_acteur.yml new file mode 100644 index 000000000..8f8754dc0 --- /dev/null +++ b/dbt/models/source/source_acteur.yml @@ -0,0 +1,18 @@ +version: 2 + +sources: + - name: qfdmo + database: qfdmo + schema: public + tables: + - name : qfdmo_acteur + - name : qfdmo_acteur_acteur_services + - name : qfdmo_acteur_labels + - name : qfdmo_propositionservice + - name : qfdmo_propositionservice_sous_categories + - name : qfdmo_revisionacteur + - name : qfdmo_revisionacteur_acteur_services + - name : qfdmo_revisionacteur_labels + - name : qfdmo_revisionpropositionservice + - name : qfdmo_revisionpropositionservice_sous_categories + - name : qfdmo_source