24.11 Querying a Data Guide
A data guide is information about a set of JSON documents. You can query
it from a flat data guide that you obtain using either Oracle SQL function
json_dataguide
or PL/SQL function
DBMS_JSON.get_index_dataguide
. In the latter case, a data guide-enabled JSON
search index must be defined on the JSON data.
See Also:
-
Oracle Database SQL Language Reference for information about SQL function
json_dataguide
-
Oracle Database SQL Language Reference for information about SQL/JSON function
json_table
-
Oracle Database PL/SQL Packages and Types Reference for information about
DBMS_JSON.get_index_dataguide
-
Oracle Database SQL Language Reference for information about PL/SQL constant
DBMS_JSON.FORMAT_FLAT
Example 24-20 Querying a Data Guide Obtained Using JSON_DATAGUIDE
This example uses SQL/JSON function
json_dataguide
to obtain a flat data guide. It then queries the
relational columns projected on the fly by SQL/JSON function json_table
from fields o:path
, type
, and o:length
.
It returns the projected columns ordered lexicographically by the path column created,
jpath
.
If DBMS_JSON.GATHER_STATS
were included in a third argument
to json_dataguide
then the data guide returned would also include
statistical fields.
WITH dg_t AS (SELECT json_dataguide(data) dg_doc
FROM j_purchaseorder)
SELECT jt.*
FROM dg_t,
json_table(dg_doc, '$[*]'
COLUMNS
jpath VARCHAR2(40) PATH '$."o:path"',
type VARCHAR2(10) PATH '$."type"',
tlength NUMBER PATH '$."o:length"') jt
ORDER BY jt.jpath;
JPATH TYPE TLENGTH
---------------------------------------- ------------- -------
$."Special Instructions" string 8
$.AllowPartialShipment boolean 4
$.CostCenter string 4
$.LineItems array 512
$.LineItems.ItemNumber number 1
$.LineItems.Part object 128
$.LineItems.Part.Description string 32
$.LineItems.Part.UPCCode number 16
$.LineItems.Part.UnitPrice number 8
$.LineItems.Quantity number 4
$.PONumber number 4
$.PO_LineItems array 64
$.Reference string 16
$.Requestor string 16
$.ShippingInstructions object 256
$.ShippingInstructions.Address object 128
$.ShippingInstructions.Address.city string 32
$.ShippingInstructions.Address.country string 32
$.ShippingInstructions.Address.state string 2
$.ShippingInstructions.Address.street string 32
$.ShippingInstructions.Address.zipCode number 8
$.ShippingInstructions.Phone array 128
$.ShippingInstructions.Phone string 16
$.ShippingInstructions.Phone.number string 16
$.ShippingInstructions.Phone.type string 8
$.ShippingInstructions.name string 16
$.User string 8
Example 24-21 Querying a Data Guide With Index Data For Paths With Frequency at Least 80%
This example uses PL/SQL function DBMS_JSON.get_index_dataguide
with format value DBMS_JSON.FORMAT_FLAT
to obtain a flat data guide from
the data-guide information stored in a data guide-enabled JSON search index. It then queries
the relational columns projected on the fly from fields o:path
,
type
, o:length
, and o:frequency
by
SQL/JSON function json_table
.
The value of field
o:frequency
is a statistic that records the frequency of occurrence,
across the document set, of each field in a document. It is available only if you have
gathered statistics on the document set. The frequency of a given field is the number
of documents containing that field divided by the total number of documents in the JSON
column, expressed as a
percentage.
WITH dg_t AS
(SELECT DBMS_JSON.get_index_dataguide('J_PURCHASEORDER',
'DATA',
DBMS_JSON.FORMAT_FLAT) dg_doc
FROM DUAL)
SELECT jt.*
FROM dg_t,
json_table(dg_doc, '$[*]'
COLUMNS
jpath VARCHAR2(40) PATH '$."o:path"',
type VARCHAR2(10) PATH '$."type"',
tlength NUMBER PATH '$."o:length"',
frequency NUMBER PATH '$."o:frequency"') jt
WHERE jt.frequency > 80;
JPATH TYPE TLENGTH FREQUENCY
---------------------------------------- ------------- -------- ---------
$.User string 8 100
$.PONumber number 4 100
$.LineItems array 512 100
$.LineItems.Part object 128 100
$.LineItems.Part.UPCCode number 16 100
$.LineItems.Part.UnitPrice number 8 100
$.LineItems.Part.Description string 32 100
$.LineItems.Quantity number 4 100
$.LineItems.ItemNumber number 1 100
$.Reference string 16 100
$.Requestor string 16 100
$.CostCenter string 4 100
$.ShippingInstructions object 256 100
$.ShippingInstructions.name string 16 100
$.ShippingInstructions.Address object 128 100
$.ShippingInstructions.Address.city string 32 100
$.ShippingInstructions.Address.state string 2 100
$.ShippingInstructions.Address.street string 32 100
$.ShippingInstructions.Address.country string 32 100
$.ShippingInstructions.Address.zipCode number 8 100
$."Special Instructions" string 8 100
Related Topics
Parent topic: JSON Data Guide