61 Commits

Author SHA1 Message Date
Frédéric Rodrigo
97216c5c19
Replace materialized view of water by tables with diff update (#853)
Replacing materialized view by a tables with update from trigger on change only.

Start with the most simple cases.

Just replicate the change on:
* `osm_water_polygon` to `osm_water_lakeline`,
* `osm_water_polygon` to `osm_water_point`.

Use a view to factorize the `osm_water_lakeline` and `osm_water_point_view` definition and reuse it in the trigger.

The update of `osm_important_waterway_linestring` is more complex, as it is a merge of `osm_waterway_linestring`. It not done in the same way. At the end of the transaction we remove impacted and recompute them.

The goal is to update more quickly the content of derivated table by just updating the changing content. It replaces the update of materialized view because their need a full recompute (with lock issue).

Note, an advanced version of differential update over materialized view as already implemented in the building cluster PR #725.

It addresses #814 and a part of #809.
2020-05-20 13:14:22 -04:00
Yuri Astrakhan
0683185717
Add requires to 2 layer definitions (#797)
Mark waterway and transoprtation_name as having a dependency on another layer.
This is currently an unused parameter, but tools will use it later for faster
sql code generation.

Closes #796
2020-04-21 12:36:44 -04:00
Jorge Sanz
ace759590e
Parallel capability to layer functions (#728)
This PR allows queries to be parallelized on recent versions of Postgres. The `PARALLEL SAFE` modifier has been added to the layer functions and a PLPGSQL function to convert strings into number has been replaced.

`PARALLEL SAFE` is a modifier for `CREATE FUNCTION` available since Postgres 9.6, so this change does not break current OpenMapTiles supported database version. More details about this topic [here](https://www.postgresql.org/docs/current/parallel-safety.html) and at the reference documentation for [`CREATE FUNCTION`](https://www.postgresql.org/docs/current/sql-createfunction.html).

### Testing procedure

The procedure to test this was:

* Imported `spain.pbf` in a clean environment
* Dumped the OpenMapTiles database from the Postgres Docker image
* Created a clean Postgres 12 database using the default Docker image
* Installed `postgis` 3 from the default Debian package and `osml10n` 2.5.8 from the repository (`make`, etc.)
* Restored the dump
* Lowered the postgres planner parameters for triggering parallel plans:
```sql
set parallel_setup_cost = 5;
set parallel_tuple_cost = 0.005;
```
* Manually added the `PARALLEL SAFE` modifier to each function involved in layer queries (not on updates or inserting functions).
* For each layer, run a testing query to confirm parallel workers were created, something like this:
```sql
explain analyze 
select * from layer_aerodrome_label(tilebbox(8,128,95),10,null)
union all
select * from layer_aerodrome_label(tilebbox(8,128,97),10,null);
```
* After all the layers were processed and confirmed to start parallel executions, a more complete example was run. This example just retrieves the geometries for all the layers from the same tile but without using any MVT related function.

<details><summary>Testing query</summary>

```sql
-- Using the function layer_landuse
explain analyze 
select geometry from layer_water(tilebbox(14,8020,6178),14)
union all
select geometry from layer_waterway(tilebbox(14,8020,6178),14)
union all
select geometry from layer_landcover(tilebbox(14,8020,6178),14)
union all
select geometry from layer_landuse(tilebbox(14,8020,6178),14)
union all
select geometry from layer_mountain_peak(tilebbox(14,8020,6178),14)
union all
select geometry from layer_park(tilebbox(14,8020,6178),14)
union all
select geometry from layer_boundary(tilebbox(14,8020,6178),14)
union all
select geometry from layer_aeroway(tilebbox(14,8020,6178),14)
union all
select geometry from layer_transportation(tilebbox(14,8020,6178),14)
union all
select geometry from layer_building(tilebbox(14,8020,6178),14)
union all
select geometry from layer_water_name(tilebbox(14,8020,6178),14)
union all
select geometry from layer_transportation_name(tilebbox(14,8020,6178),14)
union all
select geometry from layer_place(tilebbox(14,8020,6178),14)
union all
select geometry from layer_housenumber(tilebbox(14,8020,6178),14)
union all
select geometry from layer_poi(tilebbox(14,8020,6178),14)
union all
select geometry from layer_aerodrome_label(tilebbox(14,8020,6178),14);
```
</details>

You can inspect the execution plan and results on [this page](https://explain.dalibo.com/plan/3z). Also [attaching](https://github.com/openmaptiles/openmaptiles/files/3951822/explain-tile-simple.tar.gz) the query and JSON output for future reference. The website gives a ton of details, but you may want to search for nodes mentioning `workers` or `parallel` like in this area referring to `osm_border` or `osm_aeroway_linestring` entities

![image](https://user-images.githubusercontent.com/188264/70647153-9cac9300-1c48-11ea-96ea-ac7a1e2f4a79.png)

### Next steps

Since the execution plan is not showing a parallel append at the top level, meaning it's not running each layer individually, I want to continue experimenting with parameters and queries to see if it's possible to even parallelize more the request.

I will post my finding here, even no change in the code should happen.


cc. @nyurik

Co-authored-by: Yuri Astrakhan <yuriastrakhan@gmail.com>
2020-01-31 19:36:02 -05:00
Yuri Astrakhan
9d6dbfc64f
Use one pass docs image generation (#751)
quicker and cleaner diagram image generation.
Remove etl-graph and mapping-graph targets - redundant

Also, the obsolete "fields" is still in Imposm's code and both names are accepted,
but "fields" is not documented anywhere (PR submitted), and could be removed at any moment.

Our docs were not supporting it until this PR, so renaming it at the same time.

Several images have been updated due to a more inclusive mapping scan
Requires https://github.com/openmaptiles/openmaptiles-tools/pull/147 (merged)
2020-01-22 21:55:22 -05:00
Yuri Astrakhan
c9e7ad90c6
Remove unneeded "else null" in conditions (#732)
Minor code cleanup:
SQL already returns NULL in the "WHEN" condition
if it is not matched by any of the cases.

Co-authored-by: Eva Jelinkova <evka.jelinkova@gmail.com>
2020-01-22 17:24:28 -05:00
Yuri Astrakhan
1d91b9ef6e
Noop: tag sql MAT VIEWS with a special comment (#733)
Tag all SQL materialized views with a machine-readable comment
to indicate that this materialized view can be created without
data:

   /* DELAY_MATERIALIZED_VIEW_CREATION */

In the next version of tools this comment can be optionally
replaced with the "WITH NO DATA" parameter, thus allowing
a much faster execution of the SQL script. All materialized
viewes will be populated with data in parallel afterwards
using the `refresh-views` tools script.
2020-01-20 12:02:49 -05:00
Eva J
11c07bfbed waterway - edit docs 2019-11-06 16:40:37 +01:00
Yuri Astrakhan
eca13f9bed
Refreshed all diagrams, fixed automation & 2 broken graphs (#692)
Seems like etl and mapping diagrams have been neglected
for a long time. Now it regenerates the files and places
them in the source dir.

This PR also fixes two broken files:
* layers/aerodrome_label/mapping_diagram.png
* layers/housenumber/mapping_diagram.png

They were generated using the newest tools version with the fix
https://github.com/openmaptiles/openmaptiles-tools/pull/65
2019-10-26 21:28:43 -04:00
zstadler
7a3ac079ae Add intermittent field to water* layers (#430 PR #585) 2019-05-24 13:21:43 +02:00
jirik
5c67f2769e Add st_isvalid check to imposm3 generalized tables
Fix #386
2018-01-31 17:24:05 +01:00
Frédéric Rodrigo
89ee0de23b Waterway: Rename function to waterway_brunnel, Remove ford. 2018-01-16 11:45:49 +01:00
Bob Wallis
c246b3c4df Add brunnel to waterway layer 2018-01-16 11:45:49 +01:00
jirik
3cee3c7f80 Update diagrams 2017-12-04 12:06:28 +01:00
jirik
3925c1b194 Group important waterways by language tags only 2017-11-16 11:43:36 +01:00
jirik
741be6d921 Import additional names from Wikidata 2017-11-16 09:03:41 +01:00
jirik
d3a5985343 Remove waterway's name.sql because of duplicity 2017-11-16 09:03:41 +01:00
Jiri Kozel
1a324aaf22
Do not load all tags, use later imposm3 (#356)
Fix #266 #267
2017-11-10 15:25:23 +01:00
jirik
893918761c Fix SQL update logic (patch from 3.6.2) 2017-08-01 09:12:15 +02:00
Jiri Kozel
51bc8fad35 Multilinguality (#279)
Improve multilinguality: names in 57 languages, name:latin, name:nonlatin, name_int. Fixes #211 #252 #80.

See #279 for more info.
2017-06-12 17:53:47 +02:00
stirringhalo
90690d2a39 Switch to ZRes (#214) 2017-04-25 18:03:29 -04:00
MartinMikita
a322851274 Added partial index to speed up creating materialized view in waterway merge_waterway SQL. 2017-03-31 13:48:57 +02:00
jirik
038d4d5224 Add name_de to documentation 2017-03-17 13:15:40 +01:00
jirik
4c6d30066d Add German names (name_de), unify English names (name_en) 2017-03-17 12:56:54 +01:00
Lukas Martinelli
5dbcc027df Group by name_en for important waterway 2017-01-18 16:18:50 +01:00
Lukas Martinelli
8e5caed2d8 Add name_en to waterway #88 2017-01-18 15:58:14 +01:00
Lukas Martinelli
2d586bb47a Merge pull request #131 from openmaptiles/trigger_tables_sql
Daily updates
2017-01-16 09:38:47 +01:00
stirringhalo
31e0466b67 Disable concurrent refresh as its problematic. 2017-01-11 16:31:47 -05:00
stirringhalo
f6c3b932c7 Fix raise log for waterway 2017-01-10 14:50:35 -05:00
stirringhalo
4c1ea3e4b1 Refresh concurrently and create materialized views with data. 2017-01-07 22:26:09 -05:00
stirringhalo
cda3af9215 Change SELECT to PERFORM in function and drop triggers first 2017-01-06 20:33:43 -05:00
stirringhalo
9437a1b8d6 Make the sql rerunnable without error 2017-01-05 12:47:10 -05:00
Lukas Martinelli
f361d3d9fd Add better title to layer READMEs 2017-01-05 17:31:21 +01:00
Lukas Martinelli
8a9b1246d3 Link to openmaptiles.org for layer doc 2017-01-05 17:29:18 +01:00
Lukas Martinelli
98be074850 Improve waterway docs 2017-01-05 16:26:40 +01:00
stirringhalo
c5d4c1ea80 Fix the name of triggers, cannot be schema-qualified 2017-01-04 17:56:51 -05:00
stirringhalo
2fd3be1403 Use schemas to update on commit, untested 2017-01-04 16:59:42 -05:00
stirringhalo
3c4205055b Refresh concurrently 2017-01-04 11:49:14 -05:00
stirringhalo
2ef6a19149 when create materialized do so without data, better logging 2017-01-04 01:03:00 -05:00
stirringhalo
0c1da27294 Fix pile of syntax issues 2017-01-03 23:35:39 -05:00
stirringhalo
53c29f65cd fix semicolon 2017-01-03 23:21:52 -05:00
stirringhalo
c64170d9be Initial materialized views and triggers 2017-01-02 18:31:24 -05:00
stirringhalo
8b30e5ddc2 Add cascade to drops 2016-12-28 18:19:54 -05:00
stirringhalo
f98ade427e Drop tables to force redo on update
Reorder
2016-12-28 18:17:18 -05:00
stirringhalo
bab5c3d4b6 Switch from geom to geometry 2016-12-20 22:32:34 -05:00
ImreSamu
087b2f204e fix SQL warning 2016-12-04 12:51:52 +01:00
ImreSamu
f5ac3def5e etldoc fixes 2016-12-04 02:52:52 +01:00
Lukas Martinelli
a93c066fec Add missing etldocs slots to waterway layer 2016-11-30 16:25:12 +00:00
Lukas Martinelli
f9def56e0b Leave names empty for NE data due to different names 2016-11-29 15:08:23 +00:00
Lukas Martinelli
cb550a7e1a Merge branch 'master' into waterway
Conflicts:
	layers/waterway/README.md
2016-11-29 14:58:46 +00:00
Lukas Martinelli
6f68ab999d Ensure empty name is NULL in waterway 2016-11-29 13:33:33 +00:00