SlideShare a Scribd company logo
1 of 38
1
Ulrike Schwinn (Ulrike.Schwinn@oracle.com, @uschwinn)
BU Core & Cloud Technologies
Oracle Deutschland B.V. & Co KG
JSON Daten in Oracle Datenbank
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
„All Your Data“
Volltextrecherche, Klassifizierung und Clustering,
Katalogabfragen, Sentiment Analyse, Abfragen von Geodaten,
Reguläre Ausdrücke,
XML Pfad, XML Generierung,
Geocoding, Abfragen im RDF Modell,
RSS Feeds, Auslesen mit Uritypes, XQuery-Anwendungen,
Objekt-relationale Zugriffe, relationale Sichten auf XML Daten,
… und jetzt auch noch Abfragen über JSON
Speichern, Zugreifen, Verarbeiten
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Warum überhaupt JSON in der Oracle Datenbank?
• JSON Verarbeitung gibt es doch in sogenannten NoSQL Umgebungen
oder spezialisierten Datenbanken
• Warum soll man für JSON Daten die Oracle Datenbank verwenden?
 Ein einziges zentrales Repository => einheitliches Management
 Backup/Recovery
 Sicherheit
 Performance (Indizierung, Partitionierung, Parallelisierung etc.)
 Vorgefertigte Funktionen=> wenig Code erforderlich
 Immer verwenden wenn SQL Zugriff auf bestehende (relationale)
Stammdaten und JSON Daten gefragt ist
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Die Oracle Datenbank für “all your data”
select p.id, p.name, sl.json_doc.quantity anzahl
from
product p, customer c, store s, sales sl
where sl.json_value(json_doc,'$.product_id')=p.id
and
contains(p.notes,fuzzy('Lieferkosten'), 1) > 0
and
sl.json_value(json_doc,'$.CUSTNumber' returning
number) = c.cust_ids
and
s.store_id = 1234
and
sdo_within_distance(c.location,
s.location,'distance=20')='TRUE'
Alle Arten von Daten mit
Advanced Analytics, OLAP, R, PHP, .NET,
SQL ...
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON in der Datenbank – ein Kurzprofil
• Bestandteil der Datenbank seit 12c Release 1 (12.1.0.2)
– Ohne Installation/Konfiguration
– In allen Datenbank- und Cloud- Editionen
– Mit allen (Standard) Funktionen der Datenbank verwendbar
• Zugriff über SQL und PL/SQL
• Es gibt
 SQL/JSON Funktionen/Operatoren für relationale Sichtweisen oder
für JSON Daten Generierung
– Indizes wie function based, linguistic
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Funktionalität im Überblick
• Speicherung in Tabelle mit CREATE TABLE – KEIN spezieller Datentyp
• Abfragen von JSON mit
– Dot Notation
– JSON_EXISTS
– JSON_VALUE
– JSON_QUERY
– JSON_TABLE
– JSON_TEXTCONTAINS
• Laden/Nutzen über External Tables
• DML
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Anforderung an einem Beispiel
1. Bestellungen (JSON Dokumente)
– JSON Daten Export erzeugt von üblichen NoSQL Datenbanken
2. Suche nach einer bestimmten Bestellung
– Name des Auftraggebers ist nicht eindeutig
Herausforderungen
– Einfache übersichtliche Codierung
– Größe des(der) Dokument(e)
– Große Anzahl an Dokumenten
– Ungenauigkeit der Anfrage
– Hohe Performance Anforderungen
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON Dokument
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON Daten und die Datenbank
• Ausgangssituation
– JSON Daten außerhalb der Datenbank
– Oracle Beispiel: https://github.com/oracle/db-sample-schemas/blob/master/order_entry/PurchaseOrders.dmp
• Vorgehensweise
– Zugriff über logisches Directory
– External Table mit Spalte für die JSON Daten in der Datenbank
create table json_contents (json_document CLOB)
organization external
(type oracle_loader default directory json_dir
access parameters
(records delimited by 0x'0A'
fields (json_document CHAR(5000)))
location ('PurchaseOrders.dmp')) reject limit unlimited;
create directory json_dir as '/home/oracle/db-sample-schemas-12.2.0.1/order_entry';
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
• JSON_EXISTS, JSON_VALUE, JSON_QUERY …
Zugriffe: Dokumente, skalare Werte, Fragmente ...
SQL> select min(json_value (json_document, '$.PONumber' Returning number)) min_po,
max(json_value (json_document, '$.PONumber' Returning number)) max_po
from json_contents;
SQL> select json_query(json_document,'$.ShippingInstructions')
from json_contents
where json_value(json_document,'$.PONumber' returning number) = 1000;
SQL> select count(*) from json_contents
where json_exists(json_document, '$.ShippingInstructions.Address.zipCode');
SQL> select * from json_contents where rownum = 1;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON Struktur mit JSON_DATAGUIDE – „on the fly“
SQL> select json_dataguide(json_document, dbms_json.format_hierarchical, dbms_json.pretty)
from json_contents;
JSON_DATAGUIDE(JSON_DOCUMENT,DBMS_JSON.FORMAT_HIERARCHICAL,DBMS_JSON.PRETTY)
--------------------------------------------------------------------------------
{
"type" : "object",
"properties" :
{
"User" :
{
"type" : "string",
"o:length" : 8,
"o:preferred_column_name" : "User“ …
select json_dataguide(
httpuritype('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson').getclob())
from dual;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
• IS JSON Bedingung prüft auf Gültigkeit
• Function Based Index für Tuning
Tabelle Laden und Indizieren
create table json_tab
(id number generated as identity,
json_document clob constraint ensure_json CHECK (json_document IS JSON));
insert into json_tab (json_document)
select json_document from json_contents;
commit;
create index ponumber_idx on json_tab (json_value(json_document, '$.PONumber'
returning number error on error));
Demo
select x.json_document.PONumber from json_tab x where rownum=1;
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Index Nutzung
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON in Tabellenform: Relationale Projektionen
DBSAT_RESULT
Doc_name Severity Title Remarks
collect1.json 5 Directory Objects Directory objects allow
access to the server's
file system from PL/SQL
code within the database.
collect1.json 5 Users with
Default Passwords
Default account passwords
for predefined Oracle
accounts are well known.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Anwendungsbeispiel: DBSAT Ausgabe im JSON Format
• Spezielle User Reports innerhalb der Datenbank programmieren
• Vorgehen
– Tabelle für JSON Dateien
create table dbsat_result
(docname varchar2(32), doc clob check (doc is json));
– Laden der JSON Datei(en)
insert into dbsat_result values ('collect1_report.json',
bfilename('DBSAT_DIR','collect1_report.json'))
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Eigene Ausgabe
select severity , title, remarks
from dbsat_result
,JSON_TABLE(doc, '$[*].items[*]'
columns
TYPE VARCHAR2(32) PATH '$.type',
SEVERITY NUMBER PATH '$.severity',
TITLE VARCHAR2(128) PATH '$.title',
REMARKS VARCHAR2(4000)PATH '$.remarks' )
where TYPE = 'finding' order by docname, severity
Report in der Datenbank
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON Format - Ausgabe
SEVERITY TITLE REMARKS
---------- -------------------------------------------------- ------------------------------------------------------------
5 Directory Objects Directory objects allow access to the server's file system f
rom PL/SQL code within the database. Access to files that ar
e used by the database kernel itself should not be permitted,
as this may alter the operation of the database and bypass
its access controls.
5 Users with Default Passwords Default account passwords for predefined Oracle accounts are
well known. Open accounts with default passwords provide a
trivial means of entry for attackers, but well-known passwor
ds should be changed for locked accounts as well.
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON Generieren aus relationalen Daten
CUSTOMERS
{
"custid":25451,
"name":“Everett",
"City":“Heilbronn“
}
CUST_ID CUST_LAST_NAME CUST_CITY
25451 Everett Heilbronn
25452 Odenwalld Heilbronn
... ... ...
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
• JSON_OBJECT macht aus Key Value Paaren JSON Objekte
• JSON_OBJECTAGG ist eine Aggregatsfunktion
JSON Code generieren - ganz einfach mit SQL
select json_object('custid' is CUST_ID,
'name' is CUST_LAST_NAME,
'City' is CUST_CITY) ausgabe
from customers;
select cust_city,
json_objectagg('name' is cust_last_name) cust_per_city
from customers
where cust_city like 'Co%'
group by cust_city
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Ergebnis
CUST_CITY
------------------------------
CUST_PER_CITY
--------------------------------------------------------------------------------
Coburg
{"name":"Rice","name":"Tillman","name":"Barnett","name":"Zimmer","name":"Klesser
","name":"Ingersoll","name":"Bane","name":"Vankirk","name":"Lefevre","name":"Tri
mmer","name":"Smeed","name":"Lipp","name":"Klemm","name":"Obrien","name":"Kelley
","name":"Titus","name":"Felt","name":"Joseph","name":"Colven","name":"Snodgrass
","name":"Rosenblum","name":"Burgess","name":"Kraft","name":"Krebs","name":"Zhao
","name":"Carr","name":"Kish","name":"Dwyer","name":"Eastwood","name":"Haole","n
ame":"Lamar","name":"Lengel","name":"Knox","name":"Mannings","name":"Curr","name
":"Jeffreys","name":"Lickey","name":"Ingold","name":"Goode","name":"Kelleher","n
ame":"Ladd","name":"Greenley","name":"Rush","name":"Gilmour","name":"Baley"}
Cochem
{"name":"Eden","name":"Pack","name":"Hale","name":"Newsome","name":"Calahan","na
me":"Lucy","name":"Newkirk","name":"Jewell","name":"Parks","name":"Rust","name":
"Sampler","name":"Stone","name":"Poindexter","name":"Geralt","name":"Wiser","nam
e":"Valentino","name":"Bakker"}
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
• JSON_ARRAYAGG ist eine Aggregatsfunktion und gibt ein JSON Array aus
JSON Code generieren - ganz einfach mit SQL
select json_object('country_name' is c.country_name,
'ctinfo' is
(select json_arrayagg(
json_object('name' is cust_last_name,
'status' is cust_marital_status,
'city' is cust_city,
'street' is cust_street_address absent on null)
absent on null)
from customers co
where co.country_id=c.country_id and cust_year_of_birth>1988)
absent on null) as ct1
from countries c;
Demo
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Das Ergebnis - ein Ausschnitt
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Und jetzt zu unserem Beispiel
• Suche nach einer bestimmten Bestellung
– Name des Auftraggebers ist nicht eindeutig
• Lösung: Persistenter Data Guide mit speziellem Context Index
• Weitere Anwendungen
– Einfache Erzeugung von Views
– Erzeugung von virtuellen Spalten
create search index JSON_TAB_GUIDE
on JSON_TAB (JSON_DOCUMENT)
for json PARAMETERS ('DATAGUIDE ON SYNC (ON COMMIT)')
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Data Guide und JSON Strukturen
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Data Guide und relationale View Erzeugung
• Ausführung von DBMS_JSON.CREATE_VIEW_ON_PATH
execute dbms_json.create_view_on_path
(viewName => 'JSON_PO_VIEW',
tableName => 'JSON_TAB',
jcolname => 'JSON_DOCUMENT',
path => '$')
execute dbms_json.create_view_on_path
(viewName => 'JSON_PO_VIEW_PART',
tableName => 'JSON_TAB',
jcolname => 'JSON_DOCUMENT',
path => '$.ShippingInstructions.Address')
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Relationale View
(*) Spalten lassen sich umbenennen
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Data Guide und Virtuelle Spalten
• Nutzung von DBMS_JSON.ADD_VIRTUAL_COLUMNS für Projektionen
Auch automatisch bei Änderung über Change Trigger mit Context Index
execute dbms_json.add_virtual_columns (tableName => 'JSON_TAB',
jcolname => 'JSON_DOCUMENT',
frequency => 100)
SQL> desc json_tab
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER
JSON_DOCUMENT CLOB
JSON_DOCUMENT$User VARCHAR2(8)
JSON_DOCUMENT$PONumber NUMBER
JSON_DOCUMENT$Reference VARCHAR2(32)
JSON_DOCUMENT$Requestor VARCHAR2(32)
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Die (linguistischen) Abfragen
• Operatoren wie JSON_TEXTCONTAINS oder JSON_EXISTS verwenden
json_textcontains(json_document, '$.CostCenter', 'A40')
json_textcontains(json_document,'$.ShippingInstructions','fuzzy(fransesco)')
json_exists(json_document,'$.ShippingInstructions.Address.zipCode')
json_textcontains(json_document, '$','near((United, America), 3)')
json_textcontains(json_document,'$','Sporting near green')
json_textcontains(json_document, '$.LineItems', '$tie')
json_textcontains(json_document, '$.Requestor', 'fuzzy(Sarat)')
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Das Ergebnis
Demo
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
XML vs JSON Daten in der Datenbank
Eigenschaft XML JSON
Integraler Bestandteil >= 9i Release 2 >= 12.1.0.2
Datentyp XMLTYPE kein spezieller Datentyp
DB und CloudEditionen alle alle
Generierung XMLELEMENT,
XMLATTRIBUTES ...
JSON_ARRAY,
JSON_OBJECTAGG ...
Relationale Sichten XML_TABLE, XMLEXISTS,
XMLQUERY, XQUERY
JSON_VALUE, JSON_TABLE
oder DataGuide (ab 12.2)
Änderbarkeit SQL/XML Funktionen Mit PL/SQL
Indizierung Function Based Index
XML Index
Function Based Index
DataGuide
Repository Zugriffe HTTP, WEBDAV und FTP keine
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Neuigkeiten in 18c
• Neue Funktion TREAT AS JSON
• Neue Bedingung JSON_EQUAL
• LOB Resultat für JSON_VALUE, JSON_QUERY und JSON_TABLE
• Neue Funktion TO_UTC_TIMESTAMP_TZ
• SQL/JSON Generate Funktionen mit weiteren Eingabe Datentypen
• Materialisierte Views mit JSON_TABLE jetzt auch mit ON STATEMENT
• Sharding Support
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
TREAT AS JSON
create table treat_bsp
as select cust_id,
json_object('gender' is CUST_GENDER,
'name' is CUST_LAST_NAME,
'City' is CUST_CITY) as json_data
from customers where rownum<10;
SQL> select j.cust_id, j.json_data.name from treat_bsp;
Select j.cust_id, j.json_data.name from treat_bsp
*
ERROR at line 1:
ORA-00904: "J"."JSON_DATA"."NAME": invalid identifier
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
TREAT Beispiel
SQL> with json_doc as
(select cust_id, treat (json_data as json) as jsontreat
from treat_bsp)
select j.cust_id, j.jsontreat.gender, j.jsontreat.name
from json_doc j;
CUST_ID GENDER NAME
---------- ---------- ----------
49671 M Ruddy
3228 M Ruddy
6783 M Ruddy
10338 M Ruddy
13894 M Ruddy
17449 M Ruddy
21005 M Ruddy
24561 M Ruddy
28116 M Ruddy
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON_EQUAL
create table equal_test (id number,j_doc1 clob, j_doc2 clob);
insert into equal_test
select id, json_document, json_document from json_tab where id=1;
insert into equal_test
select id, json_document, ' '|| json_document from json_tab where id=2;
select id from equal_test where dbms_lob.compare(data1,data2)=0;
ID
----------
1
select id from equal_test where json_equal(data1,data2);
ID
----------
1
2
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
LiveSQL.oracle.com
18c Tutorials
• http://livesql.oracle.com
• SQL Scratch Pad in der Oracle Cloud
• Browser und OTN Account nötig
• Kostenlos
• “Save und Share” von SQL Beispielen
• Tutorials
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
Weitere Informationen
• Handbücher: Database JSON Developer's Guide
• Blogs
– https://blogs.oracle.com/coretec
– https://blogs.oracle.com/author/beda-hammerschmidt
– http://oracle-text-de.blogspot.co.uk/
• Kontakt: Ulrike.Schwinn@oracle.com @uschwinn
Copyright © 2018, Oracle and/or its affiliates. All rights reserved.
JSON in der Oracle Datenbank

More Related Content

What's hot

Miracle Open World 2011 - XML Index Strategies
Miracle Open World 2011  -  XML Index StrategiesMiracle Open World 2011  -  XML Index Strategies
Miracle Open World 2011 - XML Index StrategiesMarco Gralike
 
RESTful Web Services with Jersey
RESTful Web Services with JerseyRESTful Web Services with Jersey
RESTful Web Services with JerseyScott Leberknight
 
XML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataXML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataMarco Gralike
 
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...Marco Gralike
 
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010Introduction to JAX-RS @ SIlicon Valley Code Camp 2010
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010Arun Gupta
 
XFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereXFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereMarco Gralike
 
BGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performBGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performMarco Gralike
 
ODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLMarco Gralike
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 
Information Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampInformation Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampKais Hassan, PhD
 
Oracle 12.2 sharding learning more
Oracle 12.2 sharding learning moreOracle 12.2 sharding learning more
Oracle 12.2 sharding learning moreLeyi (Kamus) Zhang
 
MySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. RyengMySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. Ryeng郁萍 王
 
Find Anything In Your APEX App - Fuzzy Search with Oracle Text
Find Anything In Your APEX App - Fuzzy Search with Oracle TextFind Anything In Your APEX App - Fuzzy Search with Oracle Text
Find Anything In Your APEX App - Fuzzy Search with Oracle TextCarsten Czarski
 
IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" DataArt
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generatorPayal Jain
 
Tutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component pluginTutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component pluginsearchbox-com
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature PreviewYonik Seeley
 

What's hot (20)

Miracle Open World 2011 - XML Index Strategies
Miracle Open World 2011  -  XML Index StrategiesMiracle Open World 2011  -  XML Index Strategies
Miracle Open World 2011 - XML Index Strategies
 
RESTful Web Services with Jersey
RESTful Web Services with JerseyRESTful Web Services with Jersey
RESTful Web Services with Jersey
 
XML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured dataXML Amsterdam - Creating structure in unstructured data
XML Amsterdam - Creating structure in unstructured data
 
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...
UKOUG 2010 (Birmingham) - XML Indexing strategies - Choosing the Right Index ...
 
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010Introduction to JAX-RS @ SIlicon Valley Code Camp 2010
Introduction to JAX-RS @ SIlicon Valley Code Camp 2010
 
XFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in thereXFILES, The APEX 4 version - The truth is in there
XFILES, The APEX 4 version - The truth is in there
 
BGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will performBGOUG 2012 - Design concepts for xml applications that will perform
BGOUG 2012 - Design concepts for xml applications that will perform
 
ODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XMLODTUG Webcast - Thinking Clearly about XML
ODTUG Webcast - Thinking Clearly about XML
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
Information Retrieval - Data Science Bootcamp
Information Retrieval - Data Science BootcampInformation Retrieval - Data Science Bootcamp
Information Retrieval - Data Science Bootcamp
 
Oak Lucene Indexes
Oak Lucene IndexesOak Lucene Indexes
Oak Lucene Indexes
 
Solr5
Solr5Solr5
Solr5
 
Oracle 12.2 sharding learning more
Oracle 12.2 sharding learning moreOracle 12.2 sharding learning more
Oracle 12.2 sharding learning more
 
MySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. RyengMySQL EXPLAIN Explained-Norvald H. Ryeng
MySQL EXPLAIN Explained-Norvald H. Ryeng
 
Find Anything In Your APEX App - Fuzzy Search with Oracle Text
Find Anything In Your APEX App - Fuzzy Search with Oracle TextFind Anything In Your APEX App - Fuzzy Search with Oracle Text
Find Anything In Your APEX App - Fuzzy Search with Oracle Text
 
Apache Solr Workshop
Apache Solr WorkshopApache Solr Workshop
Apache Solr Workshop
 
IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys" IT talk SPb "Full text search for lazy guys"
IT talk SPb "Full text search for lazy guys"
 
Json to hive_schema_generator
Json to hive_schema_generatorJson to hive_schema_generator
Json to hive_schema_generator
 
Tutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component pluginTutorial on developing a Solr search component plugin
Tutorial on developing a Solr search component plugin
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature Preview
 

Similar to JSON in der Oracle Datenbank

Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...
Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...
Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...Marco Gralike
 
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...Tammy Bednar
 
MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...Olivier DASINI
 
Expertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesExpertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesMarco Gralike
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle DatabaseMaria Colgan
 
JAX-RS Creating RESTFul services
JAX-RS Creating RESTFul servicesJAX-RS Creating RESTFul services
JAX-RS Creating RESTFul servicesLudovic Champenois
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development TutorialErik Hatcher
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQLLuca Garulli
 
RESTful web service with JBoss Fuse
RESTful web service with JBoss FuseRESTful web service with JBoss Fuse
RESTful web service with JBoss Fuseejlp12
 
New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1Stefan Schmidt
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to SolrJayesh Bhoyar
 
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...InSync2011
 
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael Hausenblas
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael HausenblasBerlin Buzz Words - Apache Drill by Ted Dunning & Michael Hausenblas
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael HausenblasMapR Technologies
 
Iasi code camp 12 october 2013 jax-rs-jee-ecosystem - catalin mihalache
Iasi code camp 12 october 2013   jax-rs-jee-ecosystem - catalin mihalacheIasi code camp 12 october 2013   jax-rs-jee-ecosystem - catalin mihalache
Iasi code camp 12 october 2013 jax-rs-jee-ecosystem - catalin mihalacheCodecamp Romania
 
04 data accesstechnologies
04 data accesstechnologies04 data accesstechnologies
04 data accesstechnologiesBat Programmer
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Kai Chan
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript MySQL 8 loves JavaScript
MySQL 8 loves JavaScript Sanjay Manwani
 
07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.docMaqsood Joyo
 

Similar to JSON in der Oracle Datenbank (20)

Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...
Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...
Real World Experience With Oracle Xml Database 11g An Oracle Ace’s Perspectiv...
 
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...
Database@Home - Data Driven : Loading, Indexing, and Searching with Text and ...
 
MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...MySQL Document Store - A Document Store with all the benefts of a Transactona...
MySQL Document Store - A Document Store with all the benefts of a Transactona...
 
Expertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use CasesExpertezed 2012 Webcast - XML DB Use Cases
Expertezed 2012 Webcast - XML DB Use Cases
 
JSON and the Oracle Database
JSON and the Oracle DatabaseJSON and the Oracle Database
JSON and the Oracle Database
 
JAX-RS Creating RESTFul services
JAX-RS Creating RESTFul servicesJAX-RS Creating RESTFul services
JAX-RS Creating RESTFul services
 
Solr Application Development Tutorial
Solr Application Development TutorialSolr Application Development Tutorial
Solr Application Development Tutorial
 
ORACLE 9i
ORACLE 9iORACLE 9i
ORACLE 9i
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
RESTful web service with JBoss Fuse
RESTful web service with JBoss FuseRESTful web service with JBoss Fuse
RESTful web service with JBoss Fuse
 
New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1New Persistence Features in Spring Roo 1.1
New Persistence Features in Spring Roo 1.1
 
Introduction to Solr
Introduction to SolrIntroduction to Solr
Introduction to Solr
 
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...
Developer & Fusion Middleware 1 | Mark Drake | An introduction to Oracle XML ...
 
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael Hausenblas
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael HausenblasBerlin Buzz Words - Apache Drill by Ted Dunning & Michael Hausenblas
Berlin Buzz Words - Apache Drill by Ted Dunning & Michael Hausenblas
 
Iasi code camp 12 october 2013 jax-rs-jee-ecosystem - catalin mihalache
Iasi code camp 12 october 2013   jax-rs-jee-ecosystem - catalin mihalacheIasi code camp 12 october 2013   jax-rs-jee-ecosystem - catalin mihalache
Iasi code camp 12 october 2013 jax-rs-jee-ecosystem - catalin mihalache
 
04 data accesstechnologies
04 data accesstechnologies04 data accesstechnologies
04 data accesstechnologies
 
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
Search Engine Building with Lucene and Solr (So Code Camp San Diego 2014)
 
MySQL 8 loves JavaScript
MySQL 8 loves JavaScript MySQL 8 loves JavaScript
MySQL 8 loves JavaScript
 
07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc07 Advanced RTF Template Techniques.doc
07 Advanced RTF Template Techniques.doc
 
PHP Oracle
PHP OraclePHP Oracle
PHP Oracle
 

More from Ulrike Schwinn

Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cUlrike Schwinn
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Ulrike Schwinn
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankUlrike Schwinn
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tablesUlrike Schwinn
 
What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2Ulrike Schwinn
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankUlrike Schwinn
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Ulrike Schwinn
 
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios Ulrike Schwinn
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New FeaturesUlrike Schwinn
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Ulrike Schwinn
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ulrike Schwinn
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ulrike Schwinn
 
Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ulrike Schwinn
 

More from Ulrike Schwinn (13)

Hybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19cHybrid Partitioned Tables in Oracle Database 19c
Hybrid Partitioned Tables in Oracle Database 19c
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
Sensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle DatenbankSensitive Daten in der Oracle Datenbank
Sensitive Daten in der Oracle Datenbank
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
 
What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2What's new in SQL und PL/SQL in 12.2
What's new in SQL und PL/SQL in 12.2
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
 
Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2Überblick zu Oracle Database 12c Release 2
Überblick zu Oracle Database 12c Release 2
 
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)
 
Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)Ausgewählte PL/SQL Packages (2)
Ausgewählte PL/SQL Packages (2)
 
Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)Ausgewählte PL/SQL Packages (1)
Ausgewählte PL/SQL Packages (1)
 

Recently uploaded

Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 

Recently uploaded (20)

Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

JSON in der Oracle Datenbank

  • 1. 1 Ulrike Schwinn (Ulrike.Schwinn@oracle.com, @uschwinn) BU Core & Cloud Technologies Oracle Deutschland B.V. & Co KG JSON Daten in Oracle Datenbank
  • 2. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. „All Your Data“ Volltextrecherche, Klassifizierung und Clustering, Katalogabfragen, Sentiment Analyse, Abfragen von Geodaten, Reguläre Ausdrücke, XML Pfad, XML Generierung, Geocoding, Abfragen im RDF Modell, RSS Feeds, Auslesen mit Uritypes, XQuery-Anwendungen, Objekt-relationale Zugriffe, relationale Sichten auf XML Daten, … und jetzt auch noch Abfragen über JSON Speichern, Zugreifen, Verarbeiten
  • 3. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Warum überhaupt JSON in der Oracle Datenbank? • JSON Verarbeitung gibt es doch in sogenannten NoSQL Umgebungen oder spezialisierten Datenbanken • Warum soll man für JSON Daten die Oracle Datenbank verwenden?  Ein einziges zentrales Repository => einheitliches Management  Backup/Recovery  Sicherheit  Performance (Indizierung, Partitionierung, Parallelisierung etc.)  Vorgefertigte Funktionen=> wenig Code erforderlich  Immer verwenden wenn SQL Zugriff auf bestehende (relationale) Stammdaten und JSON Daten gefragt ist
  • 4. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Die Oracle Datenbank für “all your data” select p.id, p.name, sl.json_doc.quantity anzahl from product p, customer c, store s, sales sl where sl.json_value(json_doc,'$.product_id')=p.id and contains(p.notes,fuzzy('Lieferkosten'), 1) > 0 and sl.json_value(json_doc,'$.CUSTNumber' returning number) = c.cust_ids and s.store_id = 1234 and sdo_within_distance(c.location, s.location,'distance=20')='TRUE' Alle Arten von Daten mit Advanced Analytics, OLAP, R, PHP, .NET, SQL ...
  • 5. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON in der Datenbank – ein Kurzprofil • Bestandteil der Datenbank seit 12c Release 1 (12.1.0.2) – Ohne Installation/Konfiguration – In allen Datenbank- und Cloud- Editionen – Mit allen (Standard) Funktionen der Datenbank verwendbar • Zugriff über SQL und PL/SQL • Es gibt  SQL/JSON Funktionen/Operatoren für relationale Sichtweisen oder für JSON Daten Generierung – Indizes wie function based, linguistic
  • 6. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Funktionalität im Überblick • Speicherung in Tabelle mit CREATE TABLE – KEIN spezieller Datentyp • Abfragen von JSON mit – Dot Notation – JSON_EXISTS – JSON_VALUE – JSON_QUERY – JSON_TABLE – JSON_TEXTCONTAINS • Laden/Nutzen über External Tables • DML
  • 7. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Anforderung an einem Beispiel 1. Bestellungen (JSON Dokumente) – JSON Daten Export erzeugt von üblichen NoSQL Datenbanken 2. Suche nach einer bestimmten Bestellung – Name des Auftraggebers ist nicht eindeutig Herausforderungen – Einfache übersichtliche Codierung – Größe des(der) Dokument(e) – Große Anzahl an Dokumenten – Ungenauigkeit der Anfrage – Hohe Performance Anforderungen
  • 8. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON Dokument
  • 9. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON Daten und die Datenbank • Ausgangssituation – JSON Daten außerhalb der Datenbank – Oracle Beispiel: https://github.com/oracle/db-sample-schemas/blob/master/order_entry/PurchaseOrders.dmp • Vorgehensweise – Zugriff über logisches Directory – External Table mit Spalte für die JSON Daten in der Datenbank create table json_contents (json_document CLOB) organization external (type oracle_loader default directory json_dir access parameters (records delimited by 0x'0A' fields (json_document CHAR(5000))) location ('PurchaseOrders.dmp')) reject limit unlimited; create directory json_dir as '/home/oracle/db-sample-schemas-12.2.0.1/order_entry';
  • 10. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. • JSON_EXISTS, JSON_VALUE, JSON_QUERY … Zugriffe: Dokumente, skalare Werte, Fragmente ... SQL> select min(json_value (json_document, '$.PONumber' Returning number)) min_po, max(json_value (json_document, '$.PONumber' Returning number)) max_po from json_contents; SQL> select json_query(json_document,'$.ShippingInstructions') from json_contents where json_value(json_document,'$.PONumber' returning number) = 1000; SQL> select count(*) from json_contents where json_exists(json_document, '$.ShippingInstructions.Address.zipCode'); SQL> select * from json_contents where rownum = 1;
  • 11. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON Struktur mit JSON_DATAGUIDE – „on the fly“ SQL> select json_dataguide(json_document, dbms_json.format_hierarchical, dbms_json.pretty) from json_contents; JSON_DATAGUIDE(JSON_DOCUMENT,DBMS_JSON.FORMAT_HIERARCHICAL,DBMS_JSON.PRETTY) -------------------------------------------------------------------------------- { "type" : "object", "properties" : { "User" : { "type" : "string", "o:length" : 8, "o:preferred_column_name" : "User“ … select json_dataguide( httpuritype('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson').getclob()) from dual;
  • 12. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. • IS JSON Bedingung prüft auf Gültigkeit • Function Based Index für Tuning Tabelle Laden und Indizieren create table json_tab (id number generated as identity, json_document clob constraint ensure_json CHECK (json_document IS JSON)); insert into json_tab (json_document) select json_document from json_contents; commit; create index ponumber_idx on json_tab (json_value(json_document, '$.PONumber' returning number error on error)); Demo select x.json_document.PONumber from json_tab x where rownum=1;
  • 13. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Index Nutzung
  • 14. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON in Tabellenform: Relationale Projektionen DBSAT_RESULT Doc_name Severity Title Remarks collect1.json 5 Directory Objects Directory objects allow access to the server's file system from PL/SQL code within the database. collect1.json 5 Users with Default Passwords Default account passwords for predefined Oracle accounts are well known.
  • 15. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Anwendungsbeispiel: DBSAT Ausgabe im JSON Format • Spezielle User Reports innerhalb der Datenbank programmieren • Vorgehen – Tabelle für JSON Dateien create table dbsat_result (docname varchar2(32), doc clob check (doc is json)); – Laden der JSON Datei(en) insert into dbsat_result values ('collect1_report.json', bfilename('DBSAT_DIR','collect1_report.json'))
  • 16. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Eigene Ausgabe select severity , title, remarks from dbsat_result ,JSON_TABLE(doc, '$[*].items[*]' columns TYPE VARCHAR2(32) PATH '$.type', SEVERITY NUMBER PATH '$.severity', TITLE VARCHAR2(128) PATH '$.title', REMARKS VARCHAR2(4000)PATH '$.remarks' ) where TYPE = 'finding' order by docname, severity Report in der Datenbank
  • 17. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON Format - Ausgabe SEVERITY TITLE REMARKS ---------- -------------------------------------------------- ------------------------------------------------------------ 5 Directory Objects Directory objects allow access to the server's file system f rom PL/SQL code within the database. Access to files that ar e used by the database kernel itself should not be permitted, as this may alter the operation of the database and bypass its access controls. 5 Users with Default Passwords Default account passwords for predefined Oracle accounts are well known. Open accounts with default passwords provide a trivial means of entry for attackers, but well-known passwor ds should be changed for locked accounts as well.
  • 18. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON Generieren aus relationalen Daten CUSTOMERS { "custid":25451, "name":“Everett", "City":“Heilbronn“ } CUST_ID CUST_LAST_NAME CUST_CITY 25451 Everett Heilbronn 25452 Odenwalld Heilbronn ... ... ...
  • 19. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. • JSON_OBJECT macht aus Key Value Paaren JSON Objekte • JSON_OBJECTAGG ist eine Aggregatsfunktion JSON Code generieren - ganz einfach mit SQL select json_object('custid' is CUST_ID, 'name' is CUST_LAST_NAME, 'City' is CUST_CITY) ausgabe from customers; select cust_city, json_objectagg('name' is cust_last_name) cust_per_city from customers where cust_city like 'Co%' group by cust_city
  • 20. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Ergebnis CUST_CITY ------------------------------ CUST_PER_CITY -------------------------------------------------------------------------------- Coburg {"name":"Rice","name":"Tillman","name":"Barnett","name":"Zimmer","name":"Klesser ","name":"Ingersoll","name":"Bane","name":"Vankirk","name":"Lefevre","name":"Tri mmer","name":"Smeed","name":"Lipp","name":"Klemm","name":"Obrien","name":"Kelley ","name":"Titus","name":"Felt","name":"Joseph","name":"Colven","name":"Snodgrass ","name":"Rosenblum","name":"Burgess","name":"Kraft","name":"Krebs","name":"Zhao ","name":"Carr","name":"Kish","name":"Dwyer","name":"Eastwood","name":"Haole","n ame":"Lamar","name":"Lengel","name":"Knox","name":"Mannings","name":"Curr","name ":"Jeffreys","name":"Lickey","name":"Ingold","name":"Goode","name":"Kelleher","n ame":"Ladd","name":"Greenley","name":"Rush","name":"Gilmour","name":"Baley"} Cochem {"name":"Eden","name":"Pack","name":"Hale","name":"Newsome","name":"Calahan","na me":"Lucy","name":"Newkirk","name":"Jewell","name":"Parks","name":"Rust","name": "Sampler","name":"Stone","name":"Poindexter","name":"Geralt","name":"Wiser","nam e":"Valentino","name":"Bakker"}
  • 21. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. • JSON_ARRAYAGG ist eine Aggregatsfunktion und gibt ein JSON Array aus JSON Code generieren - ganz einfach mit SQL select json_object('country_name' is c.country_name, 'ctinfo' is (select json_arrayagg( json_object('name' is cust_last_name, 'status' is cust_marital_status, 'city' is cust_city, 'street' is cust_street_address absent on null) absent on null) from customers co where co.country_id=c.country_id and cust_year_of_birth>1988) absent on null) as ct1 from countries c; Demo
  • 22. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Das Ergebnis - ein Ausschnitt
  • 23. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Und jetzt zu unserem Beispiel • Suche nach einer bestimmten Bestellung – Name des Auftraggebers ist nicht eindeutig • Lösung: Persistenter Data Guide mit speziellem Context Index • Weitere Anwendungen – Einfache Erzeugung von Views – Erzeugung von virtuellen Spalten create search index JSON_TAB_GUIDE on JSON_TAB (JSON_DOCUMENT) for json PARAMETERS ('DATAGUIDE ON SYNC (ON COMMIT)')
  • 24. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Data Guide und JSON Strukturen
  • 25. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Data Guide und relationale View Erzeugung • Ausführung von DBMS_JSON.CREATE_VIEW_ON_PATH execute dbms_json.create_view_on_path (viewName => 'JSON_PO_VIEW', tableName => 'JSON_TAB', jcolname => 'JSON_DOCUMENT', path => '$') execute dbms_json.create_view_on_path (viewName => 'JSON_PO_VIEW_PART', tableName => 'JSON_TAB', jcolname => 'JSON_DOCUMENT', path => '$.ShippingInstructions.Address')
  • 26. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Relationale View (*) Spalten lassen sich umbenennen
  • 27. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Data Guide und Virtuelle Spalten • Nutzung von DBMS_JSON.ADD_VIRTUAL_COLUMNS für Projektionen Auch automatisch bei Änderung über Change Trigger mit Context Index execute dbms_json.add_virtual_columns (tableName => 'JSON_TAB', jcolname => 'JSON_DOCUMENT', frequency => 100) SQL> desc json_tab Name Null? Type ----------------------------------------- -------- ---------------------------- ID NOT NULL NUMBER JSON_DOCUMENT CLOB JSON_DOCUMENT$User VARCHAR2(8) JSON_DOCUMENT$PONumber NUMBER JSON_DOCUMENT$Reference VARCHAR2(32) JSON_DOCUMENT$Requestor VARCHAR2(32)
  • 28. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Die (linguistischen) Abfragen • Operatoren wie JSON_TEXTCONTAINS oder JSON_EXISTS verwenden json_textcontains(json_document, '$.CostCenter', 'A40') json_textcontains(json_document,'$.ShippingInstructions','fuzzy(fransesco)') json_exists(json_document,'$.ShippingInstructions.Address.zipCode') json_textcontains(json_document, '$','near((United, America), 3)') json_textcontains(json_document,'$','Sporting near green') json_textcontains(json_document, '$.LineItems', '$tie') json_textcontains(json_document, '$.Requestor', 'fuzzy(Sarat)')
  • 29. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Das Ergebnis Demo
  • 30. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. XML vs JSON Daten in der Datenbank Eigenschaft XML JSON Integraler Bestandteil >= 9i Release 2 >= 12.1.0.2 Datentyp XMLTYPE kein spezieller Datentyp DB und CloudEditionen alle alle Generierung XMLELEMENT, XMLATTRIBUTES ... JSON_ARRAY, JSON_OBJECTAGG ... Relationale Sichten XML_TABLE, XMLEXISTS, XMLQUERY, XQUERY JSON_VALUE, JSON_TABLE oder DataGuide (ab 12.2) Änderbarkeit SQL/XML Funktionen Mit PL/SQL Indizierung Function Based Index XML Index Function Based Index DataGuide Repository Zugriffe HTTP, WEBDAV und FTP keine
  • 31. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Neuigkeiten in 18c • Neue Funktion TREAT AS JSON • Neue Bedingung JSON_EQUAL • LOB Resultat für JSON_VALUE, JSON_QUERY und JSON_TABLE • Neue Funktion TO_UTC_TIMESTAMP_TZ • SQL/JSON Generate Funktionen mit weiteren Eingabe Datentypen • Materialisierte Views mit JSON_TABLE jetzt auch mit ON STATEMENT • Sharding Support
  • 32. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. TREAT AS JSON create table treat_bsp as select cust_id, json_object('gender' is CUST_GENDER, 'name' is CUST_LAST_NAME, 'City' is CUST_CITY) as json_data from customers where rownum<10; SQL> select j.cust_id, j.json_data.name from treat_bsp; Select j.cust_id, j.json_data.name from treat_bsp * ERROR at line 1: ORA-00904: "J"."JSON_DATA"."NAME": invalid identifier
  • 33. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. TREAT Beispiel SQL> with json_doc as (select cust_id, treat (json_data as json) as jsontreat from treat_bsp) select j.cust_id, j.jsontreat.gender, j.jsontreat.name from json_doc j; CUST_ID GENDER NAME ---------- ---------- ---------- 49671 M Ruddy 3228 M Ruddy 6783 M Ruddy 10338 M Ruddy 13894 M Ruddy 17449 M Ruddy 21005 M Ruddy 24561 M Ruddy 28116 M Ruddy
  • 34. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. JSON_EQUAL create table equal_test (id number,j_doc1 clob, j_doc2 clob); insert into equal_test select id, json_document, json_document from json_tab where id=1; insert into equal_test select id, json_document, ' '|| json_document from json_tab where id=2; select id from equal_test where dbms_lob.compare(data1,data2)=0; ID ---------- 1 select id from equal_test where json_equal(data1,data2); ID ---------- 1 2
  • 35. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. LiveSQL.oracle.com 18c Tutorials • http://livesql.oracle.com • SQL Scratch Pad in der Oracle Cloud • Browser und OTN Account nötig • Kostenlos • “Save und Share” von SQL Beispielen • Tutorials
  • 36. Copyright © 2018, Oracle and/or its affiliates. All rights reserved. Weitere Informationen • Handbücher: Database JSON Developer's Guide • Blogs – https://blogs.oracle.com/coretec – https://blogs.oracle.com/author/beda-hammerschmidt – http://oracle-text-de.blogspot.co.uk/ • Kontakt: Ulrike.Schwinn@oracle.com @uschwinn
  • 37. Copyright © 2018, Oracle and/or its affiliates. All rights reserved.