4 votos

¿Qué Datawarehouse puede procesar información geoespacial?

Actualmente utilizo una base de datos PostgreSQL con la extensión PostGIS. Mis consultas están creciendo demasiado para mi servidor interno, así que me gustaría portar esto a la nube.

Las consultas calculan principalmente la distancia entre una tabla de geometrías y una tabla de puntos, devolviendo todos los puntos que se encuentran a una determinada distancia de la geometría.

¿Algún DWH en la nube (BigQuery, Redshift, ...) soporta el procesamiento de información geoespacial? Si no es así, ¿tenéis alguna idea de cómo seguir con mi problema?

edit: A petición de @JohnPowellakaBarça pongo la consulta SQL + explicación que hace que se me cuelgue la máquina.

explain
select t1.osm_id as building_osm_id, t2.osm_id as poi_osm_id, 
t1.centroid::geography <-> t2.geom::geography as distance
from germany_buildings_centroid t1, germany_poi_classes_transformed t2
where t1.st_x <= (t2.st_x+0.01) AND t1.st_x >= (t2.st_x-0.01) 
AND t1.st_y <= (t2.st_y+0.01) AND t1.st_y >= (t2.st_y-0.01)
AND ST_DWithin(t1.centroid::geography, t2.geom::geography,1000);

Gather  (cost=1000.00..48193265925353.62 rows=809798 width=24)
   Workers Planned: 2
   ->  Nested Loop  (cost=0.00..48193265722916.41 rows=337416 width=24)
         Join Filter: ((t1.st_x <= (t2.st_x + '0.01'::double precision)) AND (t1.st_x >= (t2.st_x - '0.01'::double precision)) AND (t1.st_y <= (t2.st_y + '0.01'::double precision)) AND (t1.st_y >= (t2.st_y - '0.01'::double precision)) AND ((t1.centroid)::geography && _st_expand((t2.geom)::geography, '1000'::double precision)) AND ((t2.geom)::geography && _st_expand((t1.centroid)::geography, '1000'::double precision)) AND _st_dwithin((t1.centroid)::geography, (t2.geom)::geography, '1000'::double precision, true))
         ->  Parallel Seq Scan on germany_buildings_centroid t1  (cost=0.00..1304445.57 rows=11660458 width=56)
         ->  Seq Scan on germany_poi_classes_transformed t2  (cost=0.00..265650.37 rows=7031637 width=56)

Índices en mis tablas:

           table_name            |               index_name               | column_name
---------------------------------+----------------------------------------+-------------
 germany_buildings_centroid      | idx_german_building_centroid_centroid | centroid
 germany_buildings_centroid      | idx_german_building_centroid_geom     | geom
 germany_poi_classes_transformed | idx_germany_poi_classes_transformed    | geom         

Después de cambiar la consulta:

  select t1.osm_id as building_osm_id, t2.osm_id as poi_osm_id
from germany_buildings_centroid t1, germany_poi_classes_transformed t2
where ST_DWithin(t1.centroid::geography, t2.geom::geography,1000);
                                                                                                                                                  QUERY PLAN                                                                                    
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 Gather  (cost=1000.00..46609808612882.03 rows=65674991 width=16)
   Workers Planned: 2
   ->  Nested Loop  (cost=0.00..46609802044382.93 rows=27364580 width=16)
         Join Filter: (((t1.centroid)::geography && _st_expand((t2.geom)::geography, '1000'::double precision)) AND ((t2.geom)::geography && _st_expand((t1.centroid)::geography, '1000'::double precision)) AND _st_dwithin((t1.centroid)::geography, (t2.geom)::geography, '1000'::double precision, true))
         ->  Parallel Seq Scan on germany_buildings_centroid t1  (cost=0.00..1304522.12 rows=11668112 width=40)
         ->  Seq Scan on germany_poi_classes_transformed t2  (cost=0.00..265691.35 rows=7035735 width=40)

2voto

2015135 Puntos 6

AWS Athena soporta algunas funcionalidades GIS: https://docs.aws.amazon.com/athena/latest/ug/querying-geospatial-data.html

BigQuery acaba de anunciar Alpha de su funcionalidad GIS en GCP Next '18. El anuncio y el enlace al formulario de inscripción a Alpha están aquí: https://cloud.google.com/blog/products/gcp/bridging-the-gap-between-data-and-insights También publicaron en el blog una tarea resuelta utilizando una unión ST_DWithin similar: https://towardsdatascience.com/using-bigquerys-new-geospatial-functions-to-interpolate-temperatures-d9363ff19446

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X