Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
JSON und Oracle12c 
Die Oracle-Datenbank als JSON Document Store 
Copyright © 2014 Oracle and/or its affiliates. All right...
Oracle12c für Entwickler 
Die Datenbank für alle wichtigen Plattformen 
Copyright © 2014 Oracle and/or its affiliates. All...
JSON: JavaScript Object Notation 
• Sehr einfaches Datenaustauschformat 
• Einfachere Konzepte als XML 
• Basiert auf Java...
Flexible Entwicklung mit JSON 
• Agilität und "Continous Delivery" 
– Änderungen an Datenstrukturen immer häufiger und fle...
Relationale Tabellen bleiben wichtig. 
Auf das Zusammenspiel kommt es an. 
Copyright © 2014 Oracle and/or its affiliates. ...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
JSON and SQL Duality 
JSON 
Datenzugriff per 
REST ...
Native JSON Unterstützung in der Oracle Datenbank 
 JSON Dokumente speichern und verwalten 
• JSON als Text speichern (VA...
SQL Queries auf JSON-Dokumente: JSON Table 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
8
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
SQL Beispiel: JSON_TABLE 
9 
select reference, requ...
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
10 
RE...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
JSON Indizierung 
• Function Based Indizes für … 
–...
JSON Unterstützung in Oracle12c: Interfaces und APIs 
 Neue 'Document-Store' API für Entwickler 
– REST Webservices 
– Do...
REST API für JSON 
• REST Webservice API zur Arbeit mit JSON-Dokumenten: Kein SQL nötig 
• Zwei Deployment-Varianten: 
– O...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Roadmap 
• JSON mit SQL-Funktionen generieren 
• JS...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Weitere Informationen 
• Oracle Dokumentation 
– XM...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Carsten.Czarski@oracle.com 
http://tinyurl.com/apex...
JSON in der Oracle-Datenbank 
Vorgehensweise und Funktionen im Detail 
Copyright © 2014 Oracle and/or its affiliates. All ...
• Für JSON wird kein eigener Datentyp verwendet 
• Alle Typen, die Text aufnehmen können, sind nutzbar 
VARCHAR2, CLOB, BL...
Schritt 2: JSON Dokumente laden 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
19
Schritt 3: Was ist JSON, was ist nicht JSON 
• SQL Operatoren IS JSON und IS NOT JSON 
• Check Constraint stellt sicher, d...
• SQL Funktionen JSON_EXISTS, JSON_VALUE, JSON_QUERY und JSON_TABLE 
• Arbeitsweise immer gleich 
– JSON-Tabellenspalte od...
JSON_QUERY extrahiert JSON "Fragmente" 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
22 
select ...
Im Fehlerfall ... wird NULL zurückgegeben 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
23 
sele...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
... oder eine Fehlermeldung. 
24 
select json_query...
JSON_VALUE extrahiert "skalare Werte" 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
25 
select j...
JSON_EXISTS stellt fest, ob ein JSON-Pfad existiert 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |...
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
27 
se...
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
28 
RE...
JSON_TABLE für geschachtelte Strukturen 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
29 
select...
JSON_TABLE für relationale Sichten auf JSON 
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
30 
RE...
Schritt 5: Volltextindizierung mit Oracle TEXT 
• Erstellung eines Oracle TEXT Index für JSON 
Copyright © 2014 Oracle and...
Schritt 5: Volltextindizierung mit Oracle TEXT 
• Erstellung eines Oracle TEXT Index für JSON 
Copyright © 2014 Oracle and...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Weitere Informationen 
• Oracle Dokumentation 
– XM...
Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 
Carsten.Czarski@oracle.com 
http://tinyurl.com/apex...
Nächste SlideShare
Wird geladen in …5
×

JSON in der Oracle12c Database

784 Aufrufe

Veröffentlicht am

Überblick über die JSON-Unterstützung in der Oracle-Datenbank 12.1.0.2. Enthält Informationen zu JSON-Speicherung, zum Zugriff mit SQL und zur Indizierung.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

JSON in der Oracle12c Database

  1. 1. JSON und Oracle12c Die Oracle-Datenbank als JSON Document Store Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten Czarski Business Unit Database Oracle Deutschland B.V. & Co KG
  2. 2. Oracle12c für Entwickler Die Datenbank für alle wichtigen Plattformen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON Ruby Oracle ADF Oracle APEX Oracle RDS
  3. 3. JSON: JavaScript Object Notation • Sehr einfaches Datenaustauschformat • Einfachere Konzepte als XML • Basiert auf JavaScript-Code • Javascript auch auf Server wichtig: node.js • Breite Unterstützung durch Web-APIs – Google, Twitter, Facebook & Co • Setzt sich mehr und mehr durch { "PONumber" : 1600, "Reference" : "ABULL-20140421“, "Requestor" : "Alexis Bull“, "User" : "ABULL“, "CostCenter" : "A50“, "ShippingInstructions" : { "name" : "Alexis Bull“, "Address" : { ... }, "Phone" : [ ... ] }, "Special Instructions" : null, "AllowPartialShipment" : true, "LineItems" : [{ "ItemNumber" : 1, "Part" : { "Description" : "One Magic Christmas“, "UnitPrice" : 19.95, "UPCCode" : 13131092899 }, "Quantity" : 9 }, {…} ] } Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  4. 4. Flexible Entwicklung mit JSON • Agilität und "Continous Delivery" – Änderungen an Datenstrukturen immer häufiger und flexibler – Lange Zyklen für Schema-Änderungen werden immer weniger akzeptiert Security ...? IT Betrieb ...? Replikation ...? • Ansatz: Ablage als JSON und Parsing zur Query Zeit – Einfache Ablage der JSON-Dokumente in einem 'Document Store' – Parsing zur Abfragezeit – fehlende Attribute "fehlen dann einfach" – NoSQL-Datenbanken, Hadoop Cluster Funktionsbibliothek ...? Relationale Applikationen ...? Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  5. 5. Relationale Tabellen bleiben wichtig. Auf das Zusammenspiel kommt es an. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 5
  6. 6. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON and SQL Duality JSON Datenzugriff per REST oder Native API JSON wird in der Datenbank gespeichert Analysen / Queries per SQL Oracle Database 12c SQL
  7. 7. Native JSON Unterstützung in der Oracle Datenbank  JSON Dokumente speichern und verwalten • JSON als Text speichern (VARCHAR2, CLOB, BLOB)  Ohne Schema - volle Flexibilität • Kein eigener Datentyp: Nutzung der Standard-Datentypen für Zeichenketten bzw. Binärdaten • Indizierung mit einem 'JSON aware' Index Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |  API Zugriff auf JSON • REST Services • Java API (weitere Programmiersprachen in Planung)  SQL Abfragen direkt auf JSON-Dokumente  Reporting, Analyse und relationaler Zugriff direkt auf JSON-Dokumente  'JSON and SQL duality' 7 JSON ermöglicht schemalose Datenhaltung in der Oracle-Datenbank ... ... aber komplett integriert mit der relationalen Welt!
  8. 8. SQL Queries auf JSON-Dokumente: JSON Table Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 8
  9. 9. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | SQL Beispiel: JSON_TABLE 9 select reference, requestor, costcenter from po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference', requestor varchar2(25) path '$.Requestor', costcenter varchar2(4) path '$.CostCenter' ) ) /
  10. 10. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 10 REFERENCE REQUESTOR COST --------------------------- ------------------ ---- FORD-20021009123336872PDT Gerry B. Ford R20 JONES-20011127121050471PST Richard J Jones R20 MARTIN-20011127121050401PST Thomas D. Martin S30 CLARK-20021009123337764PDT Edward K. Clark A10 JONES-20011127121042590PST Richard J Jones R20 MARTIN-20011127121040547PST Thomas D. Martin S30 JONES-20021009123336602PDT Richard J Jones R20 WARD-20011127121050511PST Stephen B. Ward S30 BLAKE-20011127121055689PST David E. Blake S30 MARTIN-20011127121048889PST Thomas D. Martin S30 : : :
  11. 11. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | JSON Indizierung • Function Based Indizes für … – Bekannte Abfragemuster – Attribute kommen im JSON nur einmal vor – keine Arrays – Basiert auf Function Based Indexes • Volltextindizierung von JSON-Dokumenten auf Basis von Oracle TEXT – Unbekannte Abfragemuster – inkl. Volltextrecherche – Beliebige JSON-Attribute – Basiert auf Oracle TEXT
  12. 12. JSON Unterstützung in Oracle12c: Interfaces und APIs  Neue 'Document-Store' API für Entwickler – REST Webservices – Document / Collection APIs für JAVA – Unterstützung für andere Sprachen / Frameworks in Arbeit • SQL Zugriff uneingeschränkt möglich – Treiber wie OCI, JDBC, .NET können sofort mit JSON umgehen – SQL/JSON Operatoren erlauben direktes Arbeiten mit SQL Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  13. 13. REST API für JSON • REST Webservice API zur Arbeit mit JSON-Dokumenten: Kein SQL nötig • Zwei Deployment-Varianten: – Oracle Rest Data Services (aka 'APEX Listener') – Oracle XML DB Protokollserver (XML DB) • Unterstützt die REST Standardoperationen – PUT : Create / Update – GET : Retrieve – DELETE : Delete – POST : JSON Queries, Utility-Funktionen • Konfiguration des REST Service wird komplett in der Datenbank gespeichert Copyright © 2014 Oracle and/or its affiliates. All rights reserved. |
  14. 14. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Roadmap • JSON mit SQL-Funktionen generieren • JSON Support für PL/SQL – Für APEX-Entwickler wird mit APEX 5.0 das Paket APEX_JSON kommen.
  15. 15. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Weitere Informationen • Oracle Dokumentation – XML DB Developers Guide – Kapitel 39: JSON in Oracle Database • Blog des Autors: SQL und PL/SQL in Oracle – http://sql-plsql-de.blogspot.com – Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 15
  16. 16. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten.Czarski@oracle.com http://tinyurl.com/apexcommunity http://sql-plsql-de.blogspot.com http://plsqlexecoscomm.sourceforge.net http://plsqlmailclient.sourceforge.net Twitter: @cczarski @oraclebudb
  17. 17. JSON in der Oracle-Datenbank Vorgehensweise und Funktionen im Detail Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 17
  18. 18. • Für JSON wird kein eigener Datentyp verwendet • Alle Typen, die Text aufnehmen können, sind nutzbar VARCHAR2, CLOB, BLOB • JSON- und Nicht-JSON Inhalte können in einer Tabelle gemischt werden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Schritt 1: Tabelle anlegen 18 create table po_json ( filename varchar2(200), json clob );
  19. 19. Schritt 2: JSON Dokumente laden Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 19
  20. 20. Schritt 3: Was ist JSON, was ist nicht JSON • SQL Operatoren IS JSON und IS NOT JSON • Check Constraint stellt sicher, dass nur noch JSON gespeichert wird Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 20 select count(*) from po_json where json is json; select count(*) from po_json where json is not json; alter table po_json add constraint ck_isjson check (json is json);
  21. 21. • SQL Funktionen JSON_EXISTS, JSON_VALUE, JSON_QUERY und JSON_TABLE • Arbeitsweise immer gleich – JSON-Tabellenspalte oder Literal – JSON Pfadausdruck (JSON Path Expression) – Returning Klausel – Error Handling Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Schritt 4: SQL Abfragen ... 21
  22. 22. JSON_QUERY extrahiert JSON "Fragmente" Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 22 select json_query( json, '$.PurchaseOrder.ShippingInstructions' PRETTY ) from po_json; JSON_QUERY -------------------------------------------------------------------------------- [ { "name" : ["Gerry B. Ford"], "address" : ["100 Oracle ParkwayrnRedwood ShoresrnCArn94065rnUSA"], "telephone" : ["650 506 7100"] } ] 1 Zeile wurde ausgewählt.
  23. 23. Im Fehlerfall ... wird NULL zurückgegeben Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 23 select json_query( json, '$.PurchaseOrder.ShippingInstrs' PRETTY ) from po_json; JSON_QUERY -------------------------------------------------------------------------------- ? 1 Zeile wurde ausgewählt.
  24. 24. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | ... oder eine Fehlermeldung. 24 select json_query( json, '$.PurchaseOrder.ShippingInstrs' PRETTY ERROR ON ERROR ) from po_json; * FEHLER in Zeile 1: ORA-40462: Auswertung von JSON_QUERY hat keinen Wert ergeben
  25. 25. JSON_VALUE extrahiert "skalare Werte" Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 25 select json_value( json, '$.PurchaseOrder.Reference[0]' RETURNING VARCHAR2 ) from po_json where rownum < 10; JSON_VALUE ------------------------------------------------------------------ FORD-20021009123336872PDT JONES-20011127121050471PST MARTIN-20011127121050401PST CLARK-20021009123337764PDT :
  26. 26. JSON_EXISTS stellt fest, ob ein JSON-Pfad existiert Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 26 select filename from po_json where json_exists( json, '$.PurchaseOrder.Reference' ); FILENAME ----------------------------------------------------------------- FORD-20021009123336872PDT.js JONES-20011127121050471PST.js MARTIN-20011127121050401PST.js CLARK-20021009123337764PDT.js :
  27. 27. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 27 select reference, requestor, costcenter from po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference[0]', requestor varchar2(25) path '$.Requestor[0]', costcenter varchar2(4) path '$.CostCenter[0]' ) ) /
  28. 28. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 28 REFERENCE REQUESTOR COST --------------------------- ------------------ ---- FORD-20021009123336872PDT Gerry B. Ford R20 JONES-20011127121050471PST Richard J Jones R20 MARTIN-20011127121050401PST Thomas D. Martin S30 CLARK-20021009123337764PDT Edward K. Clark A10 JONES-20011127121042590PST Richard J Jones R20 MARTIN-20011127121040547PST Thomas D. Martin S30 JONES-20021009123336602PDT Richard J Jones R20 WARD-20011127121050511PST Stephen B. Ward S30 BLAKE-20011127121055689PST David E. Blake S30 MARTIN-20011127121048889PST Thomas D. Martin S30 : : :
  29. 29. JSON_TABLE für geschachtelte Strukturen Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 29 select reference, requestor, num, descr, quantity From po_json, json_table( json, '$.PurchaseOrder' columns ( reference varchar2(30) path '$.Reference[0]', requestor varchar2(25) path '$.Requestor[0]', CostCenter varchar2(4) path '$.CostCenter[0]', nested path '$.LineItems[*].LineItem[*]' columns ( num number path '$."u0024".ItemNumber', descr varchar2(40) path '$.Description[0]', quantity number path '$.Part[0]."u0024"."Quantity"' ) ) )
  30. 30. JSON_TABLE für relationale Sichten auf JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 30 REFERENCE REQUESTOR NUM DESCR QUANTITY --------------------------- ------------------ ---- ---------------------------------------- -------- FORD-20021009123336872PDT Gerry B. Ford 1 Ordet 4 FORD-20021009123336872PDT Gerry B. Ford 2 The Naked Kiss 3 FORD-20021009123336872PDT Gerry B. Ford 3 Charade 2 FORD-20021009123336872PDT Gerry B. Ford 4 Robocop 2 FORD-20021009123336872PDT Gerry B. Ford 5 Cries and Whispers 4 FORD-20021009123336872PDT Gerry B. Ford 6 Autumn Sonata 4 FORD-20021009123336872PDT Gerry B. Ford 7 Getrud 3 FORD-20021009123336872PDT Gerry B. Ford 8 And the Ship Sails on 1 FORD-20021009123336872PDT Gerry B. Ford 9 Flesh for Frankenstein 4 FORD-20021009123336872PDT Gerry B. Ford 10 The Hidden Fortress 2 FORD-20021009123336872PDT Gerry B. Ford 11 The Importance of Being Earnest 3 FORD-20021009123336872PDT Gerry B. Ford 12 The Vanishing 4 FORD-20021009123336872PDT Gerry B. Ford 13 Cries and Whispers 4 FORD-20021009123336872PDT Gerry B. Ford 14 Beauty and the Beast 2 FORD-20021009123336872PDT Gerry B. Ford 15 And God Created Woman 1 : : : : : FORD-20021009123336872PDT Gerry B. Ford 16 The Magic Flute 1 20 Zeilen ausgewählt.
  31. 31. Schritt 5: Volltextindizierung mit Oracle TEXT • Erstellung eines Oracle TEXT Index für JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 31 CREATE INDEX po_search_idx ON po_json (json) INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS ( 'section group CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)' ) / Index wurde erstellt.
  32. 32. Schritt 5: Volltextindizierung mit Oracle TEXT • Erstellung eines Oracle TEXT Index für JSON Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | 32 select filename from po_json WHERE json_textcontains( json, '$.PurchaseOrder.LineItems.LineItem.Description', 'Magic' ); TURNER-20021009123338565PDT.js CLARK-2001112712105223PST.js :
  33. 33. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Weitere Informationen • Oracle Dokumentation – XML DB Developers Guide – Kapitel 39: JSON in Oracle Database • Blog des Autors: SQL und PL/SQL in Oracle – http://sql-plsql-de.blogspot.com – Juli 2014: Oracle 12.1.0.2 ist da: Ein Einblick in die JSON-Unterstützung 33
  34. 34. Copyright © 2014 Oracle and/or its affiliates. All rights reserved. | Carsten.Czarski@oracle.com http://tinyurl.com/apexcommunity http://sql-plsql-de.blogspot.com http://plsqlexecoscomm.sourceforge.net http://plsqlmailclient.sourceforge.net Twitter: @cczarski @oraclebudb

×