Azure Cosmos DB-adatok lekérdezése kiszolgáló nélküli SQL-készlettel az Azure Synapse Linkben

A kiszolgáló nélküli SQL-készlet lehetővé teszi az Azure Cosmos DB-tárolókban lévő olyan adatok elemzését, amelyek közel valós időben engedélyezve vannak az Azure Synapse Link használatával anélkül, hogy befolyásolnák a tranzakciós számítási feladatok teljesítményét. Ismerős T-SQL-szintaxist kínál az elemzési tárból származó adatok lekérdezéséhez, valamint az üzleti intelligencia (BI) és az alkalmi lekérdezési eszközök széles köréhez való integrált kapcsolódáshoz a T-SQL-felületen keresztül.

Az Azure Cosmos DB lekérdezéséhez a teljes Standard kiadás LECT felület az OPENROW Standard kiadás T függvényen keresztül támogatott, amely az SQL-függvények és -operátorok többségéttartalmazza. Az Azure Cosmos DB-ből adatokat beolvasó lekérdezés eredményeit az Azure Blob Storage-ban vagy az Azure Data Lake Storage-ban is tárolhatja, ha külső táblát hoz létre kiválasztva (CETAS). Jelenleg nem tárolhat kiszolgáló nélküli SQL-készlet lekérdezési eredményeit az Azure Cosmos DB-ben a CETAS használatával.

Ebben a cikkben megtudhatja, hogyan írhat lekérdezést kiszolgáló nélküli SQL-készlettel, amely adatokat kérdez le az Azure Synapse Linkkel engedélyezett Azure Cosmos DB-tárolókból. Ebből az oktatóanyagból többet is megtudhat arról, hogyan hozhat létre kiszolgáló nélküli SQL-készletnézeteket az Azure Cosmos DB-tárolókon, és hogyan csatlakoztathatja őket Power BI-modellekhez. Ez az oktatóanyag egy jól definiált Azure Cosmos DB-sémával rendelkező tárolót használ. Az Azure Cosmos DB-nek az Azure Synapse Analyticshez készült SQL Serverless használatával történő lekérdezéséről szóló Learn modult is megtekintheti

Előfeltételek

  • Győződjön meg arról, hogy előkészítette az elemzési tárat:
    • Az elemzési tár engedélyezése az Azure Cosmos DB-tárolókban.
    • Kérje le a kapcsolati sztring egy írásvédett kulccsal, amellyel lekérdezheti az elemzési tárat.
    • Az Azure Cosmos DB-tároló eléréséhez használt írásvédett kulcs lekérése
  • Győződjön meg arról, hogy az összes ajánlott eljárást alkalmazta, például:
    • Győződjön meg arról, hogy az Azure Cosmos DB elemzési tárterülete ugyanabban a régióban található, mint a kiszolgáló nélküli SQL-készlet.
    • Győződjön meg arról, hogy az ügyfélalkalmazás (Power BI, Analysis service) ugyanabban a régióban található, mint a kiszolgáló nélküli SQL-készlet.
    • Ha nagy mennyiségű (80 GB-nál nagyobb) adatot ad vissza, érdemes lehet gyorsítótárazási réteget használni, például az Analysis Servicest, és betölteni a 80 GB-nál kisebb partíciókat az Analysis Services-modellben.
    • Ha sztringoszlopok használatával szűr adatokat, győződjön meg arról, hogy a OPENROWSET függvényt a lehető legkisebb típusú explicit WITH záradékkal használja (például ne használja a VARCHAR(1000) függvényt, ha tudja, hogy a tulajdonság legfeljebb 5 karakterből áll.

Áttekintés

A kiszolgáló nélküli SQL-készlet lehetővé teszi az Azure Cosmos DB elemzési tárolójának lekérdezését függvény használatával OPENROWSET .

  • OPENROWSET beágyazott kulccsal. Ez a szintaxis az Azure Cosmos DB-gyűjtemények lekérdezésére használható hitelesítő adatok előkészítése nélkül.
  • OPENROWSET amely az Azure Cosmos DB-fiókkulcsot tartalmazó hitelesítő adatokra hivatkozott. Ez a szintaxis az Azure Cosmos DB-gyűjtemények nézeteinek létrehozására használható.

Az Azure Cosmos DB elemzési tárában lévő adatok lekérdezésének és elemzésének támogatásához kiszolgáló nélküli SQL-készletet használunk. A kiszolgáló nélküli SQL-készlet az OPENROWSET SQL szintaxisát használja, ezért először az Azure Cosmos DB-kapcsolati sztring kell konvertálnia erre a formátumra:

OPENROWSET( 
       'CosmosDB',
       '<SQL connection string for Azure Cosmos DB>',
       <Container name>
    )  [ < with clause > ] AS alias

Az Azure Cosmos DB SQL-kapcsolati sztring az Azure Cosmos DB-fiók nevét, az adatbázis nevét, az adatbázisfiók főkulcsát és egy választható régiónevet adja meg a OPENROWSET függvénynek. Ezen információk némelyike a szabványos Azure Cosmos DB-kapcsolati sztring származhat.

Konvertálás standard Azure Cosmos DB-kapcsolati sztring formátumból:

AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;

Az SQL kapcsolati sztring formátuma a következő:

'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'

A régió nem kötelező. Ha nincs megadva, a tároló elsődleges régiója lesz használva.

Fontos

A kapcsolati sztring egy másik opcionális paramétert is megadhatendpoint. A endpoint param olyan fiókokhoz szükséges, amelyek nem felelnek meg a szabványos *.documents.azure.com formátumnak. Ha például az Azure CosmosDB-fiókja végződik.documents.azure.us, győződjön meg arról, hogy hozzáadja endpoint=<account name>.documents.azure.us a kapcsolati sztring.

Az Azure Cosmos DB-tároló neve idézőjelek nélkül van megadva a OPENROWSET szintaxisban. Ha a tárolónévnek vannak speciális karakterei, például egy kötőjel (-), akkor a nevet szögletes zárójelek közé[] kell burkolni a OPENROWSET szintaxisban.

Fontos

Győződjön meg arról, hogy valamilyen UTF-8 adatbázis-rendezést használ, például azért, Latin1_General_100_CI_AS_SC_UTF8mert az Azure Cosmos DB elemzési tárában lévő sztringértékek UTF-8 szövegként vannak kódolva. A fájl szövegkódolása és a rendezés közötti eltérés váratlan szövegkonvertálási hibákat okozhat. A T-SQL utasítással alter database current collate Latin1_General_100_CI_AI_SC_UTF8egyszerűen módosíthatja az aktuális adatbázis alapértelmezett rendezést.

Feljegyzés

A kiszolgáló nélküli SQL-készlet nem támogatja az Azure Cosmos DB tranzakciós tárolójának lekérdezését.

Mintaadatkészlet

A cikkben szereplő példák az Európai Betegségmegelőzési és Járványvédelmi Központ (ECDC) COVID-19-esetek és COVID-19 nyílt kutatási adatkészlet (CORD-19), doi:10.5281/zenodo.3715505 adatain alapulnak.

Ezen az oldalon láthatja az adatok licencét és szerkezetét. Az ECDC és a CORD-19 adatkészletek mintaadatait is letöltheti.

Ha követni szeretné ezt a cikket, amely bemutatja, hogyan kérdezheti le az Azure Cosmos DB-adatokat egy kiszolgáló nélküli SQL-készlettel, győződjön meg arról, hogy a következő erőforrásokat hozza létre:

  • Egy Azure Cosmos DB-adatbázisfiók, amely engedélyezve van az Azure Synapse Linkben.
  • Egy Azure Cosmos DB-adatbázis neve covid.
  • Két Azure Cosmos DB-tároló neve Ecdc és Cord19 betöltése az előző mintaadatkészletekkel.

A teszteléshez a következő kapcsolati sztring használhatja: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==. Vegye figyelembe, hogy ez a kapcsolat nem garantálja a teljesítményt, mert ez a fiók távoli régióban található a Synapse SQL-végponthoz képest.

Azure Cosmos DB-adatok feltárása automatikus sémakövetkeztetéssel

Az Azure Cosmos DB-ben az adatok megismerésének legegyszerűbb módja az automatikus sémakövető képesség használata. Ha kihagyja a WITH záradékot az OPENROWSET utasításból, utasíthatja a kiszolgáló nélküli SQL-készletet, hogy automatikusan észlelje (következtesse) az Azure Cosmos DB-tároló elemzési tárolójának sémáját.

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc) as documents

Az előző példában arra utasítottuk a kiszolgáló nélküli SQL-készletet, hogy csatlakozzon az covid Azure Cosmos DB-fiók MyCosmosDbAccount adatbázisához az Azure Cosmos DB-kulcs (az előző példában szereplő próbabábu) használatával hitelesítve. Ezután elértük a Ecdc tároló elemzési tárolóját a West US 2 régióban. Mivel nincs konkrét tulajdonságok kivetítése, a függvény az OPENROWSET Azure Cosmos DB-elemek összes tulajdonságát visszaadja.

Feltételezve, hogy az Azure Cosmos DB-tároló elemei rendelkeznek date_rep, casesés geo_id tulajdonságok, a lekérdezés eredményei az alábbi táblázatban jelennek meg:

date_rep elemzése geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

Ha ugyanabban az Azure Cosmos DB-adatbázisban lévő másik tárolóból származó adatokat kell megvizsgálnia, ugyanazt a kapcsolati sztring használhatja, és hivatkozhat a szükséges tárolóra, mint a harmadik paraméter:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19) as cord19

Explicit módon adja meg a sémát

Bár az automatikus sémakövető képesség OPENROWSET egyszerű, könnyen használható lekérdezést biztosít, az üzleti forgatókönyvek megkövetelik, hogy explicit módon adja meg a sémát az Azure Cosmos DB-adatokból csak olvasható tulajdonságokhoz.

A OPENROWSET függvény segítségével explicit módon megadhatja, hogy milyen tulajdonságokat szeretne olvasni a tárolóban lévő adatokból, és megadhatja azok adattípusait.

Tegyük fel, hogy importáltunk néhány adatot az ECDC COVID-adatkészletből az alábbi struktúrával az Azure Cosmos DB-be:

{"date_rep":"2020-08-13","cases":254,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-12","cases":235,"countries_and_territories":"Serbia","geo_id":"RS"}
{"date_rep":"2020-08-11","cases":163,"countries_and_territories":"Serbia","geo_id":"RS"}

Az Azure Cosmos DB-ben ezek a lapos JSON-dokumentumok sorok és oszlopok halmazaként jelenhetnek meg a Synapse SQL-ben. A OPENROWSET függvény lehetővé teszi az elolvasni kívánt tulajdonságok részhalmazának és a záradék pontos WITH oszloptípusainak megadását:

SELECT TOP 10 *
FROM OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Ecdc
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

A lekérdezés eredménye a következő táblázathoz hasonlóan nézhet ki:

date_rep elemzése geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

Az Azure Cosmos DB-értékekhez használandó SQL-típusokkal kapcsolatos további információkért tekintse meg az SQL-típusleképezések szabályait a cikk végén.

Nézet létrehozása

A nézetek létrehozása az alapértelmezett vagy az master alapértelmezett adatbázisokban nem ajánlott és nem támogatott. Ezért létre kell hoznia egy felhasználói adatbázist a nézetekhez.

Miután azonosította a sémát, előkészíthet egy nézetet az Azure Cosmos DB-adatokra. Az Azure Cosmos DB-fiókkulcsot külön hitelesítő adatokba kell helyeznie, és hivatkoznia kell erre a hitelesítő adatra a függvénytől OPENROWSET . Ne tartsa meg a fiókkulcsot a nézetdefinícióban.

CREATE CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;Database=covid',
      OBJECT = 'Ecdc',
      SERVER_CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

Ne használjon OPENROWSET explicit módon definiált séma nélkül, mert az hatással lehet a teljesítményére. Győződjön meg arról, hogy a lehető legkisebb méreteket használja az oszlopokhoz (például VARCHAR(100) az alapértelmezett VARCHAR(8000) helyett). Az UTF-8-as rendezést érdemes alapértelmezett adatbázis-rendezésként használni, vagy explicit oszlopbe rendezésként beállítani az UTF-8 konverziós probléma elkerülése érdekében. A rendezés Latin1_General_100_BIN2_UTF8 akkor nyújt a legjobb teljesítményt, ha bizonyos sztringoszlopok használatával szűr adatokat.

A nézet lekérdezése során hibák vagy váratlan eredmények léphetnek fel. Ez valószínűleg azt jelenti, hogy a nézet a módosított vagy már nem létező oszlopokra vagy objektumokra hivatkozik. Manuálisan kell módosítania a nézetdefiníciót, hogy igazodjon az alapul szolgáló sémamódosításokhoz. Ne feledje, hogy ez akkor is megtörténhet, ha automatikus sémakövető következtetést használ a nézetben, és ha explicit módon adja meg a sémát.

Beágyazott objektumok lekérdezése

Az Azure Cosmos DB-vel összetettebb adatmodelleket jeleníthet meg beágyazott objektumokként vagy tömbökként való megírásával. Az Azure Cosmos DB-hez készült Azure Synapse Link autoszinkron képessége a dobozon kívül kezeli az elemzési tár sémamegjelenítését, amely magában foglalja a beágyazott adattípusok kezelését, amelyek lehetővé teszik a kiszolgáló nélküli SQL-készletből történő részletes lekérdezést.

A CORD-19-adatkészlet például az alábbi struktúrát követő JSON-dokumentumokkal rendelkezik:

{
    "paper_id": <str>,                   # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": <array of objects>    # list of author dicts, in order
        ...
     }
     ...
}

Az Azure Cosmos DB beágyazott objektumai és tömbjei JSON-sztringekként jelennek meg a lekérdezés eredményében, amikor a OPENROWSET függvény felolvassa őket. A záradék használatakor megadhatja a beágyazott értékek elérési útját az WITH objektumokban:

SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19)
WITH (  paper_id    varchar(8000),
        title        varchar(1000) '$.metadata.title',
        metadata     varchar(max),
        authors      varchar(max) '$.metadata.authors'
) AS docs;

A lekérdezés eredménye a következő táblázathoz hasonlóan nézhet ki:

paper_id Cím metaadatok Szerzők
bb11206963e831f... Kiegészítő információk Egy öko-epidemi... {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1... A Convalescent Sera használata Immun-E... {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
bb378eca9aac649... Tylosema esculentum (Marama) Gumó és B... {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

További információ az olyan összetett adattípusok elemzéséről , mint a Parquet-fájlok és -tárolók az Azure Cosmos DB-hez készült Azure Synapse Linkben vagy beágyazott struktúrák egy kiszolgáló nélküli SQL-készletben.

Fontos

Ha nem várt karaktereket lát a szövegben, mint ahelyett MÃÂ&copy;ladeMélade, akkor az adatbázis rendezése nem UTF-8 rendezésre van beállítva. Módosítsa az adatbázis rendezést UTF-8 rendezésre egy SQL-utasítás, például ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8a .

Beágyazott tömbök simítása

Az Azure Cosmos DB-adatok beágyazott alarrái lehetnek, például a szerző tömbje egy CORD-19-adatkészletből :

{
    "paper_id": <str>,                      # 40-character sha1 of the PDF
    "metadata": {
        "title": <str>,
        "authors": [                        # list of author dicts, in order
            {
                "first": <str>,
                "middle": <list of str>,
                "last": <str>,
                "suffix": <str>,
                "affiliation": <dict>,
                "email": <str>
            },
            ...
        ],
        ...
}

Bizonyos esetekben előfordulhat, hogy a legfelső elem (metaadatok) tulajdonságainak "összekapcsolása" szükséges a tömb (szerzők) összes elemével. A kiszolgáló nélküli SQL-készlet lehetővé teszi a beágyazott struktúrák simítását a OPENJSON beágyazott tömb függvényének alkalmazásával:

SELECT
    *
FROM
    OPENROWSET(
      'CosmosDB',
      'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
       Cord19
    ) WITH ( title varchar(1000) '$.metadata.title',
             authors varchar(max) '$.metadata.authors' ) AS docs
      CROSS APPLY OPENJSON ( authors )
                  WITH (
                       first varchar(50),
                       last varchar(50),
                       affiliation nvarchar(max) as json
                  ) AS a

A lekérdezés eredménye a következő táblázathoz hasonlóan nézhet ki:

Cím Szerzők első utolsó Hovatartozás
Kiegészítő információk Egy öko-epidemi... [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… Julien Mélade {"laboratory":"Centre de Recher…
Kiegészítő információk Egy öko-epidemi... [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… Nicolas #4 {"laboratory":"","institution":"U…
Kiegészítő információk Egy öko-epidemi... [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… Beza Ramazindrazana {"laboratory":"Centre de Recher…
Kiegészítő információk Egy öko-epidemi... [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … Olivier Flores {"laboratory":"UMR C53 CIRAD, …

Fontos

Ha nem várt karaktereket lát a szövegben, mint ahelyett MÃÂ&copy;ladeMélade, akkor az adatbázis rendezése nem UTF-8 rendezésre van beállítva. Módosítsa az adatbázis rendezést UTF-8 rendezésre egy SQL-utasítás, például ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8a .

Azure Cosmos DB–SQL-típusleképezések

Bár az Azure Cosmos DB tranzakciós tárolója sémafüggetlen, az elemzési tár séma szerint van kialakítva az elemzési lekérdezési teljesítmény optimalizálása érdekében. Az Azure Synapse Link automatikus szinkronizálási funkciójával az Azure Cosmos DB a dobozon kívül kezeli az elemzési tár sémamegjelenítését, amely magában foglalja a beágyazott adattípusok kezelését is. Mivel egy kiszolgáló nélküli SQL-készlet lekérdezi az elemzési tárat, fontos megérteni, hogyan képezheti le az Azure Cosmos DB bemeneti adattípusait SQL-adattípusokra.

Az SQL (Core) API Azure Cosmos DB-fiókjai támogatják a szám, sztring, logikai, null, beágyazott objektum vagy tömb JSON-tulajdonságtípusait. A JSON-típusoknak megfelelő SQL-típusokat kell választania, ha a záradékot használja a WITH következőben OPENROWSET: . Az alábbi táblázat azOkat az SQL-oszloptípusokat mutatja be, amelyeket az Azure Cosmos DB különböző tulajdonságtípusaihoz kell használni.

Az Azure Cosmos DB tulajdonságtípusa SQL-oszlop típusa
Logikai Kicsit
Egész bigint
Decimális float
Sztring varchar (UTF-8 adatbázis-rendezés)
Dátum idő (ISO formátumú sztring) varchar(30)
Dátum idő (UNIX időbélyeg) bigint
Null any SQL type
Beágyazott objektum vagy tömb varchar(max) (UTF-8 adatbázis-rendezés), szerializálva JSON-szövegként

Teljes hűségséma

Az Azure Cosmos DB teljes hűségséma mind az értékeket, mind a legjobb egyezéstípusokat rögzíti egy tároló minden tulajdonságához. A OPENROWSET teljes megbízhatósági sémával rendelkező tároló függvénye az egyes cellák típusát és tényleges értékét is biztosítja. Tegyük fel, hogy a következő lekérdezés beolvassa az elemeket egy teljes hűségsémával rendelkező tárolóból:

SELECT *
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) as rows

A lekérdezés eredménye JSON-szövegként formázott típusokat és értékeket ad vissza:

date_rep elemzése geo_id
{"date":"2020-08-13"} {"int32":"254"} {"string":"RS"}
{"date":"2020-08-12"} {"int32":"235"} {"string":"RS"}
{"date":"2020-08-11"} {"int32":"316"} {"string":"RS"}
{"date":"2020-08-10"} {"int32":"281"} {"string":"RS"}
{"date":"2020-08-09"} {"int32":"295"} {"string":"RS"}
{"string":"2020/08/08"} {"int32":"312"} {"string":"RS"}
{"date":"2020-08-07"} {"float64":"339.0"} {"string":"RS"}

Minden értéknél láthatja az Azure Cosmos DB-tárolóelemben azonosított típust. A tulajdonság legtöbb értéke date_rep tartalmaz date értékeket, de néhányat helytelenül tárol sztringekként az Azure Cosmos DB-ben. A teljes hűségséma helyesen beírt date és helytelenül formázott string értékeket is visszaad. Az esetek száma értékként int32 tárolt információ, de van egy érték, amely tizedes törtként van beírva. Ez az érték a típussal rendelkezik float64 . Ha vannak olyan értékek, amelyek túllépik a legnagyobb int32 számot, a rendszer típusként tárolja őket int64 . A példában szereplő összes geo_id érték típusként string van tárolva.

Fontos

A OPENROWSET záradék nélküli WITH függvény a várt és a helytelenül megadott típusok értékeit is elérhetővé teszi. Ez a függvény adatfeltárásra és nem jelentéskészítésre lett tervezve. Ne elemezd az ebből a függvényből visszaadott JSON-értékeket a jelentések létrehozásához. A jelentések létrehozásához használjon explicit WITH záradékot . Az Azure Cosmos DB-tárolóban helytelen típusokkal rendelkező értékeket törölnie kell, hogy javításokat alkalmazzon a teljes megbízhatósági elemzési tárolóban.

A MongoDB-fiókokhoz készült Azure Cosmos DB-fiókok lekérdezéséhez többet is megtudhat az elemzési tár teljes hűségséma-ábrázolásáról, valamint az Azure Cosmos DB Elemzési tárban használandó kiterjesztett tulajdonságnevekről.

Teljes hűségsémával rendelkező elemek lekérdezése

A teljes hűségséma lekérdezése során explicit módon meg kell adnia az SQL-típust és a várható Azure Cosmos DB-tulajdonságtípust a WITH záradékban.

Az alábbi példában feltételezzük, hogy string ez a tulajdonság megfelelő típusa geo_id , és int32 a tulajdonság megfelelő típusa cases :

SELECT geo_id, cases = SUM(cases)
FROM OPENROWSET(
      'CosmosDB'
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string',
             cases INT '$.cases.int32'
    ) as rows
GROUP BY geo_id

geo_id Az egyéb típusú értékek cases értékként NULL lesznek visszaadva. Ez a lekérdezés csak a cases megadott típusra hivatkozik a kifejezésben (cases.int32).

Ha más típusú (cases.int64, ) értékekkel rendelkezik, cases.float64amelyeket nem lehet megtisztítani egy Azure Cosmos DB-tárolóban, explicit módon hivatkoznia kell rájuk egy WITH záradékban, és össze kell egyesítenie az eredményeket. A következő lekérdezés összesíti mind az oszlopban, int64float64 mind int32pedig az oszlopban tárolt adatokatcases:

SELECT geo_id, cases = SUM(cases_int) + SUM(cases_bigint) + SUM(cases_float)
FROM OPENROWSET(
      'CosmosDB',
      'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
       Ecdc
    ) WITH ( geo_id VARCHAR(50) '$.geo_id.string', 
             cases_int INT '$.cases.int32',
             cases_bigint BIGINT '$.cases.int64',
             cases_float FLOAT '$.cases.float64'
    ) as rows
GROUP BY geo_id

Ebben a példában az esetek száma , vagy float64 értékként int32int64lesz tárolva. Az országonként/régiónkénti esetek számának kiszámításához minden értéket ki kell nyerni.

Hibaelhárítás

Tekintse át az önsegítő lapot , és keresse meg azokat az ismert problémákat vagy hibaelhárítási lépéseket, amelyek segíthetnek az Azure Cosmos DB-lekérdezésekkel kapcsolatos lehetséges problémák megoldásában.

Következő lépések

További információért tekintse át az alábbi cikkeket: