Nieuwe en verbeterde JSON-functies

Voltooid 200 ervaringspunten

De toevoeging van drie nieuwe functies en de verbetering van ISJSON in SQL Server 2022 helpt ontwikkelaars efficiënter en eenvoudiger met JSON-objecten te werken. Deze functies helpen te voldoen aan de toenemende behoefte aan betere verwerking van populaire gegevensindelingen in toepassingen en API's.

JSON_OBJECT

De functie JSON_OBJECT maakt een JSON-object door sleutel-waardeparen op te geven. Het vereenvoudigt het proces van het maken van JSON-objecten op basis van queryresultaten.

ISJSON

De functie ISJSON controleert of de invoertekenreeks geldige JSON bevat en retourneert 1 indien waar en 0 als deze onwaar is. In SQL Server 2022 is de functie uitgebreid ter ondersteuning van json_type_constraint, zodat u kunt controleren op de JSON-typen VALUE, ARRAY, OBJECT of SCALAR.

JSON_PATH_EXISTS

De functie JSON_PATH_EXISTS controleert of er een specifiek JSON-pad bestaat in een JSON-tekenreeks en retourneert 1 indien waar en 0 indien onwaar. Deze functie is handig voor het controleren van de aanwezigheid van eigenschappen in JSON-gegevens.

JSON_ARRAY

Met de functie JSON_ARRAY wordt een JSON-matrix samengesteld door elementen op te geven. Het vereenvoudigt het proces van het converteren van gegevens naar JSON-matrices, wat handig is bij het werken met API's of apps waarvoor JSON-matrices zijn vereist.

JSON-verwerking vereenvoudigen met JSON_OBJECT en JSON_PATH_EXISTS

Stel dat u een DBA bent voor een grote financiële instelling. Uw IT-afdeling heeft een bewakingssoftware voor het hele netwerk geïnstalleerd. De software heeft een database gemaakt met de naam CollectionDB. Als u de querystatistieken van uw SQL-servers wilt bewaken, bevat deze database een tabel met de naam QueryRequestStats met de kolommen CollectionTime, ServerName, session_id en QueryStats. De kolom QueryStats moet de JSON-indeling hebben. U moet het verzamelingsscript maken waarmee deze tabel elke 5 minuten wordt gevuld met de querytekst, het plan en de algemene statistieken. Als u de overhead wilt minimaliseren, besluit u alleen niet-slaapstand en niet-achtergrond te verzamelen. Daarnaast vraagt uw team om een query uit te voeren op deze tabel waarmee de top 10 aanvragen worden geretourneerd, gesorteerd op CPU-gebruik, waarbij de querytekst is ingevuld voor de verzamelingsdatum en tijdstip van 2023-03-29 12:54:00.000. Voer de volgende query's uit in SQL Server Management Studio (SSMS) om deze gegevens op te slaan en op te halen.

SQL
-- Query to collect data, run it every 5 minutes
INSERT INTO CollectionDB.dbo.QueryRequestStats
SELECT  GETDATE() AS CollectionTime
    , @@ServerName AS ServerName
    , er.session_id
    , JSON_OBJECT ('session_id':er.session_id
            , 'status':er.status
            , 'command':er.command
            , 'performanceCounters':JSON_OBJECT(
                    'cpu':er.cpu_time
                    , 'duration':er.total_elapsed_time
                    , 'reads':er.logical_reads
                )
            , 'sql_text':JSON_OBJECT (
                    'text': est.text
                    , 'starting_offset':er.statement_start_offset
                    , 'ending_offset':er.statement_end_offset
                )
            , 'query_plan':eqp.query_plan
        ) AS QueryStats
FROM sys.dm_exec_requests  er
    OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) est
    OUTER APPLY sys.dm_exec_query_plan(er.plan_handle) eqp
WHERE er.status NOT IN  ('sleeping', 'background')
    AND session_id > 50
    AND session_id != @@SPID

-- Query to return the top 10 requests by CPU usage that have a query text for the collection time `2023-03-29 12:54:00.000`
SELECT  *
FROM CollectionDB.dbo.QueryRequestStats
WHERE JSON_PATH_EXISTS(QueryStats, '$.sql_text.text') = 1
    AND JSON_VALUE(QueryStats, '$.sql_text.text') IS NOT NULL
    AND CollectionTime = '2023-03-29 12:54:00.000'
ORDER BY CAST(JSON_VALUE(QueryStats, '$.performanceCounters.cpu') AS INT) DESC

Als u de gegevens wilt verzamelen, ziet u hoe we de querystatistieken verzamelen in de kolom QueryStats als JSON met behulp van de functie JSON_OBJECT functie. Bovendien maken we ook twee JSON-eigenschappen in de verzameling, performanceCounters en sql_text, ook met behulp van de functie JSON_OBJECT.

Om de gegevens weer te geven, gebruiken we JSON_PATH_EXISTS en JSON_VALUE om ervoor te zorgen dat als de eigenschap bestaat, die sql_text.text niet leeg is.

Het verzamelen van prestatiegegevens en het converteren ervan naar JSON is slechts een van de talloze scenario's die grotendeels kunnen profiteren van deze functies. Dankzij de toevoeging en verbetering van JSON-functies in SQL Server 2022 kunnen gebruikers eenvoudiger met JSON-objecten werken, zodat ze beter kunnen omgaan met populaire gegevensindelingen die vaak worden gebruikt in de huidige toepassingen en API's.

Kennistoets

1.

Wat is het doel van de JSON_OBJECT functie in SQL Server 2022?

2.

Welke verbeteringen zijn aangebracht in de FUNCTIE ISJSON in SQL Server 2022?


Volgende eenheid: Nieuwe aggregatiefuncties

Vorige Volgende