To zadanie zostało wykonane przez - Marek Białousz. Przedstawiono: --- Zadania geodezyjne w bazach danych postgreSQL oraz elasticsearch. --- Czas wykonania oraz ilość zużytych zasobów. --- Opis danych oraz instrukcja.
Plik zawiera najnowsze dane (luty 2017) Krajowych Statystyk wyszukiwania kodu pocztowego dla Wielkiej Brytanii. National Statistics Postcode Lookup (Latest) Centroids Rozmiar: > 902 MB Ilość: 2593613
Baza, na której odbywały się badania - postgreSQL. Link do pobrania - TUTAJ.
Do badań na bazie elasticsearch potrzebny jest jdk. Link do pobrania - TUTAJ. Konfiguracja zmiennych środowiskowych:
W pracy konieczne będzie przekształcenie danych . Konieczna jest instalacja frameworka Chocolatey oraz narzędzia jq. Polecenia w cdm (tryb administratora):
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
chocolatey install jq
Python będzie potrzebny do uruchomienia skryptów. Link do pobrania - TUTAJ.
Aby uruchomić serwer, trzeba przejść do pliku binarnego postgreSQL'a, polecenie w konsoli cmd:
cd [ścieżka gdzie jest zainstalowany postgreSQL]\PostgreSQL\9.6\bin
psql -U postgres
1. Pobrać dane 2. Pobrać skrypt Skrypt trzeba umieścić w folderze z danymi. Jest on potrzebny, ponieważ usunie znaki, które nie są kodowane w windows-1250 w cmd.
py s1.py
pgfutter --pass "[hasło]" --table "test" csv map.csv
1. Należy uruchamić serwer
cd [ścieżka gdzie jest zainstalowany postgreSQL]\PostgreSQL\9.6\bin
psql -U postgres
3. Polecenie aby wyświetlić przykładowe dane:
select * from import.test limit 1;
Aby korzystać z zapytań geodezyjnych należy pobrać PostGis - LINK Należy zmienić nazwy kolumn - x na longitude
alter table import.test rename x to longitude;
alter table import.test rename y to latitude;
select * from import.test where ST_MakeEnvelope(-2.1, 57.15, -2.19, 57.25, -2.20, 57.35);
Pobierz plik z danymi (.geojson) - LINK Plik z danymi, wymaga zmiany nazwy gdyż nie może zawierać znaków takich jak: _. Można zamienić nazwę na map.geojson. Polecenie, aby przekształcić pole features z pobranego pliku:
jq ".features[] | (.geometry.coordinates | map( .*1000|floor|./1000)) as $l | .properties |= .+ {location: $l} | .properties" map.geojson > mapPom.geojson
< mapPom.geojson jq --compact-output "{ \"index\": { \"_type\": \"test\" } }, ." > mapPom.bulk
1. Teraz trzeba pobrać ElasticSearch - LINK 2. Uruchom serwer w konsoli cmd
[ścieżka gdzie znajduje się pobrany elasticsearch]\elasticsearch-5.3.0\bin\elasticsearch.bat
curl -XPUT http://localhost:9200/test -d "{\"mappings\": {\"place\": {\"properties\": {\"objectid\": {\"type\": \"integer\"},\"pcd2\": {\"type\": \"string\"},\"pcds\": {\"type\": \"string\"},\"dointr\": {\"type\": \"string\"},\"oseast100m\": {\"type\": \"string\"},\"osnrth100m\": {\"type\": \"string\"},\"oscty\": {\"type\": \"string\"},\"odslaua\": {\"type\": \"string\"},\"oslaua\": {\"type\": \"string\"},\"osward\": {\"type\": \"string\"},\"usertype\": {\"type\": \"string\"},\"osgrdind\": {\"type\": \"string\"},\"ctry\": {\"type\": \"string\"},\"oshlthau\": {\"type\": \"string\"},\"gor\": {\"type\": \"string\"},\"oldha\": {\"type\": \"string\"},\"nhscr\": {\"type\": \"string\"},\"ccg\": {\"type\": \"string\"},\"psed\": {\"type\": \"string\"},\"cened\": {\"type\": \"string\"},\"edind\": {\"type\": \"string\"},\"ward98\": {\"type\": \"string\"},\"oa01\": {\"type\": \"string\"},\"nhsrg\": {\"type\": \"string\"},\"hro\": {\"type\": \"string\"},\"lsoa01\": {\"type\": \"string\"},\"ur01ind\": {\"type\": \"string\"},\"msoa01\": {\"type\": \"string\"},\"cannet\": {\"type\": \"string\"},\"scn\": {\"type\": \"string\"},\"oshaprev\": {\"type\": \"string\"},\"oldpct\": {\"type\": \"string\"},\"oldhro\": {\"type\": \"string\"},\"pcon\": {\"type\": \"string\"},\"canreg\": {\"type\": \"string\"},\"pct\": {\"type\": \"string\"},\"oseast1m\": {\"type\": \"string\"},\"osnrth1m\": {\"type\": \"string\"},\"oa11\": {\"type\": \"string\"},\"lsoa11\": {\"type\": \"string\"},\"msoa11\": {\"type\": \"string\"},\"location\": {\"type\": \"geo_point\" }}}}}"
curl -XPOST localhost:9200/test/_bulk --data-binary @mapPom.bulk
curl -XGET localhost:9200/test/_count
{"count":2593613,"_shards":{"total":5,"successful":5,"failed":0}}
Po zaimportowaniu danych:
curl -s "http://localhost:9200/test/_search?size=1&pretty=1" | jq .hits.hits[].\"_source\"
objectid
pcd2
pcds
dointr
doterm
oseast1m
usertype
ctry
ccg
hro
pct
osnrth1m
oa11
lsoa11
msoa11