Implementer typekontrol i forespørgsler
En af Fordelene ved Azure Cosmos DB til NoSQL som datalager er fleksibiliteten til at gemme data med forskellige strukturer og figurer. Da udvikleren opretter forespørgsler til disse data, er ansvaret for typekontrol ofte dine forespørgsler. SQL-forespørgselssproget for NoSQL-API'en indeholder en pakke med indbyggede funktioner, der gør det muligt for dig at kontrollere typerne af egenskaber eller udtryk, når de er variable eller ukendte.
Indtil nu er eksempeldatastrukturen enkel og let at forstå. Men lad os overveje nogle mulige undtagelser.
Hvert produkt element i objektbeholderen har en egenskab med navnet mærker. Egenskaben Tags er en matrix af objekter med id- og navn egenskaber. Antagelsen er indtil nu, at tagsmatrixen altid findes for hvert produkt i objektbeholderen. Men hvis vi fjerner den oprindelige antagelse, kan vi have en situation, hvor et nyt produktelement indsættes i objektbeholderen uden en kodeegenskab som f.eks.:
{
"id": "6374995F-9A78-43CD-AE0D-5F6041078140",
"categoryid": "3E4CEACD-D007-46EB-82D7-31F6141752B2",
"sku": "FR-R38R-60",
"name": "LL Road Frame - Red, 60",
"price": 337.22
}
Først kan vi bruge den indbyggede IS_DEFINED funktion til at kontrollere, om egenskaben -koder findes i dette element:
SELECT
IS_DEFINED(p.tags) AS tags_exist
FROM
products p
[
{
"tags_exist": false
}
]
Lad os sige, at egenskaben Tags findes, men det er ikke en matrix. det er en anden type egenskab:
{
"id": "6374995F-9A78-43CD-AE0D-5F6041078140",
"categoryid": "3E4CEACD-D007-46EB-82D7-31F6141752B2",
"sku": "FR-R38R-60",
"name": "LL Road Frame - Red, 60",
"price": 337.22,
"tags": "fun, sporty, rad"
}
Vi kan bruge den indbyggede IS_ARRAY funktion til at kontrollere, om egenskaben Tags er en matrix:
SELECT
IS_ARRAY(p.tags) AS tags_is_array
FROM
products p
Vi kan også kontrollere, om egenskaben Tags er null- eller ikke bruger den indbyggede funktion IS_NULL:
SELECT
IS_NULL(p.tags) AS tags_is_null
FROM
products p
Der er endnu flere indbyggede funktioner til forskellige scenarier, der involverer andre datatyper.
Overvej f.eks. en situation, hvor forskellige datalagre fastholder prisoplysninger inkonsekvent. Nogle vedholdende prisoplysninger ved hjælp af strengdata, mens andre kan gemme prisoplysninger ved hjælp af tal. Den indbyggede IS_NUMBER funktion kan bruges i et WHERE-udtryk for vores forespørgsler:
SELECT
p.id,
p.price,
(p.price * 1.25) AS priceWithTax
FROM
products p
WHERE
IS_NUMBER(p.price)
Vi kan også bruge den indbyggede IS_STRING funktion til at se, om vores pris er en streng og ikke anvender nogen formatering:
SELECT
p.id,
p.price
FROM
products p
WHERE
IS_STRING(p.price)
Der er andre indbyggede typekontrolfunktioner, herunder IS_OBJECT og IS_BOOLEAN.