mysql 5.7 json und gis - fromdual... 1 / 21 mysql 5.7 json und gis froscon 2016 cédric bruderer...
TRANSCRIPT
![Page 1: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/1.jpg)
www.fromdual.com
1 / 21
MySQL 5.7JSON und GIS
FrOSCon 2016
Cédric BrudererMySQL Support Engineer, FromDual GmbH
![Page 2: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/2.jpg)
www.fromdual.com
2 / 21
Über FromDual GmbH
Support
remote-DBA
Schulung
Beratung
![Page 3: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/3.jpg)
www.fromdual.com
3 / 21
Über mich
● Cédric Bruderer● Ausbildung
2010 – 2014: Lehre zum Informatiker
Teilnahme an den SchweizerBerufsmeisterschaften
● Junior Engineer
In einem international tätigen Unternehmen.
● MySQL Support Engineer bei FromDual
seit Oktober 2015
![Page 4: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/4.jpg)
www.fromdual.com
4 / 21
Inhalt
● JSON● Was ist JSON?● Wie bringe ich es in die DB?● Wie krieg ich es wieder raus?
● GIS● Einsatzorte von GIS● Wie wird es in der DB abgelegt?
● Beispiele wie JSON und GIS kombiniertwerden.
![Page 5: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/5.jpg)
www.fromdual.com
5 / 21
Was ist JSON?
● JavaScript Object Notation● Kann mit XML verglichen werden● Unabhängig von einer Sprache
● PHP, Perl, Python, C, …
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"}]}
![Page 6: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/6.jpg)
www.fromdual.com
6 / 21
JSON vs XML
{"employees":[ {"firstName":"John", "lastName":"Doe"}, {"firstName":"Anna", "lastName":"Smith"}, {"firstName":"Peter", "lastName":"Jones"}]}
<employees> <employee> <firstName>John</firstName> <lastName>Doe</lastName> </employee> <employee> <firstName>Anna</firstName> <lastName>Smith</lastName> </employee> <employee> <firstName>Peter</firstName> <lastName>Jones</lastName> </employee></employees>
Quelle: http://www.w3schools.com/json/
![Page 7: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/7.jpg)
www.fromdual.com
7 / 21
JSON in MySQL
mysql> CREATE TABLE json_test (jdoc JSON);
mysql> INSERT INTO json_testVALUES ('{"key1": "value1", "key2": "value2"}');
mysql> SELECT * FROM json_test;+--------------------------------------+| jdoc |+--------------------------------------+| {"key1": "value1", "key2": "value2"} |+--------------------------------------+
mysql> SELECT JSON_EXTRACT(jdoc, "$.key1") FROM json_test;+------------------------------+| JSON_EXTRACT(jdoc, "$.key1") |+------------------------------+| "value1" |+------------------------------+
![Page 8: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/8.jpg)
www.fromdual.com
8 / 21
JSON in MySQL
mysql> SELECT address_details->"$.service_type" FROM address_list;+-----------------------------------+| address_details->"$.service_type" |+-----------------------------------+| "fire brigade" || "police station" |+-----------------------------------+
![Page 9: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/9.jpg)
www.fromdual.com
9 / 21
Einsatzorte von GIS
● Geographic Information System● Findet Verwendung in Karten
● Wo geht eine Strasse entlang?● Position einer bestimmten Adresse
![Page 10: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/10.jpg)
www.fromdual.com
10 / 21
GIS in MySQL
● MySQL 5.7● Spatial Index
![Page 11: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/11.jpg)
www.fromdual.com
11 / 21
GIS in MySQL
● Datentypen● GEOMETRY
● POINT (Koordinate)
mysql> CREATE TABLE point_values (location POINT);
mysql> INSERT INTO point_values (location) VALUES (ST_GeomFromText('POINT(10 1)'));
mysql> SELECT X(location), Y(location) FROM values;+----------------+----------------+| X(location) | Y(location) |+----------------+----------------+| 10 | 1 |+----------------+----------------+
![Page 12: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/12.jpg)
www.fromdual.com
12 / 21
GIS in MySQL
● Datentypen● LINESTRING (Linie, Eckpunkte als „POINT“)
root@localhost [test]> SET @ls = 'LineString(1 1,2 2,3 3)';Query OK, 0 rows affected (0.00 sec)
root@localhost [test]> SELECT ST_AsText(ST_EndPoint(ST_GeomFromText(@ls)));+----------------------------------------------+| ST_AsText(ST_EndPoint(ST_GeomFromText(@ls))) |+----------------------------------------------+| POINT(3 3) |+----------------------------------------------+1 row in set (0.00 sec)
root@localhost [test]> SELECT ST_Length(ST_GeomFromText(@ls));+---------------------------------+| ST_Length(ST_GeomFromText(@ls)) |+---------------------------------+| 2.8284271247461903 |+---------------------------------+1 row in set (0.00 sec)
![Page 13: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/13.jpg)
www.fromdual.com
13 / 21
GIS in MySQL
● Datentypen● Polygon (Mehrere „LINESTING“)
mysql> INSERT INTO gis_test (polygon_value)VALUES (ST_GeomFromText('POLYGON(( 9 8.5,
12.897 6.25,12.897 1.75,9 -0.5,5.103 1.75,5.103 6.25,9 8.5)
)'));
![Page 14: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/14.jpg)
www.fromdual.com
14 / 21
GIS in MySQL
● UPDATE Statement
● ST_Contains(geom1, geom2) zumAuslesen von Punkten in einem Polygon
mysql> UPDATE address_listSET address_position = POINT(47.6950373, 8.6351328)WHERE street_name='Beckenstube' and street_number=1;
mysql> UPDATE gis_testSET line_value = ST_GeomFromText(‘LineString(1 1,2 2,3 3)’);
![Page 15: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/15.jpg)
www.fromdual.com
15 / 21
GIS in MySQL
● ST_Distance(pt1, pt2)mysql> SET @g1 = POINT(1,1), @g2 = POINT(2,2);mysql> SELECT ST_Distance(@g1, @g2);+-----------------------+| ST_Distance(@g1, @g2) |+-----------------------+| 1.4142135623730951 |+-----------------------+
![Page 16: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/16.jpg)
www.fromdual.com
16 / 21
JSON und GIS
● Stadtkarte● Ort wird über GIS identifiziert● Informationen zu diesem Ort werden in JSON
abgelegtFeuwehrzentrum Schaffhausen mit
Informationen zum öffentlichen
Verkehr, den Strassen und dem
Gebäude.
https://www.openstreetmap.org/#map=18/47.70111/8.63591
![Page 17: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/17.jpg)
www.fromdual.com
17 / 21
JSON und GIS
mysql> CREATE TABLE address_list (address_id INT AUTO_INCREMENT NOT NULL,address_position POINT DEFAULT NULL,street_name VARCHAR(50) DEFAULT NULL,street_number SMALLINT UNSIGNED DEFAULT NULL,address_details JSON DEFAULT NULL,PRIMARY KEY(`address_id`),SPATIAL INDEX(address_position)
);
mysql> INSERT INTO address_list (address_position, street_name,street_number, address_details) VALUES (ST_GeomFromText('POINT(10 1)')“Bachstrasse”,70,‘{“public_service”:”true”,”service_type”:”fire brigade”}’);
![Page 18: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/18.jpg)
www.fromdual.com
18 / 21
JSON und GIS
mysql> ALTER TABLE address_listADD COLUMN service_type VARCHAR(50)AS (JSON_UNQUOTE(JSON_EXTRACT(address_details, "$.service_type")));
root@localhost [test]> SELECT address_details, service_type FROM address_list;+-----------------------------------------------------------------+---------------------+| address_details | service_type |+-----------------------------------------------------------------+---------------------+| {"service_type": "fire brigade", "public_service": "true"} | "fire brigade" || {"service_type": "police department", "public_service": "true"} | "police department" |+-----------------------------------------------------------------+---------------------+2 rows in set (0.00 sec)
● Datentyp JSON kann nich indexiert werden.● Generierte Spalten können.
![Page 19: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/19.jpg)
www.fromdual.com
19 / 21
JSON und GIS
● GeoJSON
root@localhost [test]> SELECT ST_AsGeoJson(address_position) FROM address_list;+-----------------------------------------------------------+| ST_AsGeoJson(address_position) |+-----------------------------------------------------------+| {"type": "Point", "coordinates": [47.7005591, 8.6370402]} || {"type": "Point", "coordinates": [47.6950373, 8.6351328]} |+-----------------------------------------------------------+2 rows in set (0.00 sec)
![Page 20: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/20.jpg)
www.fromdual.com
20 / 21
ACHTUNG !
● Vorsicht beim Auslesen SELECT:
● Die Welt ist (noch) flach.
root@localhost [test]> SELECT address_id, address_position FROM address_list;+------------+---------------------------+| address_id | address_position |+------------+---------------------------+| 1 | $@ ?? || 2 | ?? "@ |+------------+---------------------------+2 rows in set (0.00 sec)
![Page 21: MySQL 5.7 JSON und GIS - FromDual... 1 / 21 MySQL 5.7 JSON und GIS FrOSCon 2016 Cédric Bruderer MySQL Support Engineer, FromDual GmbH cedric.bruderer@fromdual.com 3 / 21 Über mich](https://reader033.vdocuments.net/reader033/viewer/2022050418/5f8deb77c2698e30205b808d/html5/thumbnails/21.jpg)
www.fromdual.com
21 / 21
Q & A
Fragen ?
Diskussion?
Wir haben Zeit für ein persönliches Gespräch...
● FromDual bietet neutral und unabhängig:● Beratung
● Remote-DBA
● Support für MySQL, Galera, Percona Server und MariaDB
● Schulung
www.fromdual.com/presentations