Adatok lekérdezése kiszolgáló nélküli SQL-készlet használatával Azure Cosmos DB

Tip

Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik adattárházzal, kezdje a Fabric Data Warehouse. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.

Fontos

A Synapse Link a Cosmos DB-hez már nem támogatott új projektekhez. Ne használja ezt a funkciót.

Az Azure Cosmos DB tükrözés használata a Microsoft Fabric számára, amely most általános elérhetőségű. A mirroring ugyanazokat a nulla ETL előnyöket biztosítja, és teljesen integrálva van a Microsoft Fabricbe. További információ a Cosmos DB tükrözési áttekintéséről.

A kiszolgáló nélküli SQL-készlet lehetővé teszi a Azure Cosmos DB tárolókban lévő adatok elemzését, amelyek Azure Synapse Link közel valós időben vannak engedélyezve anélkül, hogy befolyásolnák a tranzakciós számítási feladatok teljesítményét. Kínál egy ismerős Transact-SQL (T-SQL) szintaxist az adatok lekérdezésére az analytical store-ból, valamint integrált kapcsolódást biztosít az üzleti intelligencia (BI) és az ad-hoc lekérdezési eszközök széles köréhez a T-SQL-felületen keresztül.

A Azure Cosmos DB lekérdezéséhez a teljes SELECT felület a OPENROWSET függvényen keresztül támogatott, amely tartalmazza a legtöbb SQL-függvényt és operátort. Az Azure Cosmos DB adatait beolvasó lekérdezés eredményeit az Azure Blob Storage vagy Azure Data Lake Storage segítségével is tárolhatja azzal, hogy külső táblát hoz létre az alábbi módon (CETAS). Jelenleg nem tárolhatja a kiszolgáló nélküli SQL-készlet lekérdezési eredményeit a CETAS használatával Azure Cosmos DB.

Ez a cikk azt ismerteti, hogyan írhat lekérdezést kiszolgáló nélküli SQL-készlettel, amely adatokat kérdez le Azure Cosmos DB Azure-Synapse Link engedélyezett tárolókból. További információkat találhat arról, hogyan hozhat létre kiszolgáló nélküli SQL-készlet nézeteket az Azure Cosmos DB tárolókon és hogyan kapcsolhatja őket Power BI modellekhez, ebben az oktatóanyagban. Ez az oktatóanyag egy Azure Cosmos DB jól definiált sémával rendelkező tárolót használ. Tekintse meg a tanulási modulunkat arról, hogyan lekérdezheti az Azure Cosmos DB-t az Azure Synapse Analytics SQL Serverless használatával.

Előfeltételek

  • Győződjön meg arról, hogy előkészíti az elemzési tárat:
    • Az elemzési tár engedélyezése a tárolókon Azure Cosmos DB.
    • Szerezze be a kapcsolati karakterláncet egy írásvédett kulccsal, amellyel lekérdezheti az analitikus tárolót.
    • Szerezze be a Azure Cosmos DB tároló eléréséhez használt írásvédett kulcsot.
  • 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 a 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ű adatot ad vissza (több mint 80 GB), é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 szöveges oszlopok alapján szűr adatokat, győződjön meg arról, hogy a OPENROWSET függvényt az explicit WITH záradékkal használja, amelynél a lehető legkisebb típusokat alkalmazza. Ne használja VARCHAR(1000) például, ha tudja, hogy a tulajdonság legfeljebb öt karakterből áll.

Áttekintés

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

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

A Azure Cosmos DB SQL-kapcsolati karakterlánc a következő összetevőket tartalmazza:

  • account – A megcélzott Azure Cosmos DB fiók neve.
  • database – A tároló neve, idézőjelek nélkül megadva az OPENROWSET szintaxisban. Ha a tároló neve speciális karaktereket tartalmaz (például kötőjelet -), akkor szögletes zárójelek ([]) közé kell tenni.
  • region (nem kötelező) – A Cosmos DB elemzési tároló régiója. Ha nincs megadva, a tároló elsődleges régiója lesz használva.
  • végpont (nem kötelező) – A Cosmos DB végpont URI-ja (például https://<account name>.documents.azure.us), amely akkor szükséges, ha a Cosmos DB-fiók nem követi a szabványos *.documents.azure.com formátumot.

Fontos

A endpoint paraméterre olyan fiókokhoz van szükség, amelyek nem felelnek meg a szabványos *.documents.azure.com formátumnak. Ha például Azure Cosmos DB fiókja .documents.azure.us végződik, győződjön meg arról, hogy endpoint=https://<account name>.documents.azure.us ad hozzá a kapcsolati karakterlánc. Győződjön meg arról, hogy tartalmazza a https:// előtagot.

Ezek a tulajdonságok a standard Cosmos DB-kapcsolati karakterlánc azonosíthatók, például:

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

Az SQL kapcsolati karakterlánc a következőképpen formázhatók:

account=<database account name>;database=<database name>;region=<region name>

Ez a kapcsolati karakterlánc nem tartalmazza a Cosmos DB elemzési tárolóhoz való csatlakozáshoz szükséges hitelesítési adatokat. Az alkalmazott hitelesítés típusától függően további információkra van szükség:

  • Ha OPENROWSET munkaterület felügyelt identitását használja az elemzési tároló eléréséhez, hozzá kell adnia a tulajdonságot AuthType .
  • Ha OPENROWSET beágyazott fiókkulcsot használ, hozzá kell adnia a tulajdonságot key . Ez lehetővé teszi Azure Cosmos DB gyűjtemények lekérdezését anélkül, hogy hitelesítő adatokat kellene előkészítenie.
  • Ahelyett, hogy a hitelesítési adatokat a kapcsolati karakterlánc tartalmazza, OPENROWSET hivatkozhat egy hitelesítő adatra, amely tartalmazza a Azure Cosmos DB fiókkulcsot. Ezzel a módszerrel nézetek hozhatók létre Azure Cosmos DB gyűjteményeken.

Ezeket a lehetőségeket az alábbiakban ismertetjük.

A kiszolgáló nélküli SQL-készlet lehetővé teszi a Cosmos DB elemzési tároló lekérdezését és az eredeti Cosmos DB-fiókkulccsal való hitelesítést, vagy a Synapse által felügyelt identitás számára a Cosmos DB elemzési tároló elérését. Ebben a forgatókönyvben a következő szintaxist használhatja:

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

Az SQL-kapcsolati karakterlánc fent leírt gyakori tulajdonságain kívül (account, database, region és endpoint) one a következő lehetőségek közül kell megadnia:

  • AuthType – állítsa ezt a beállítást a következőre ManagedIdentity , ha Cosmos DB a Synapse-munkaterület felügyelt identitásával fér hozzá.
  • kulcs – A Cosmos DB adatok eléréséhez szükséges főkulcs, amely akkor használatos, ha nem használja a Synapse-munkaterület felügyelt identitását.

A kapcsolati sztringek példái az alábbi táblázatban láthatók:

Hitelesítési típus Csatlakozási karakterlánc
Felügyelt identitású Synapse-munkaterület account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity
Cosmos DB fiók főkulcsa account=<account name>;database=<db name>;region=<region name>;key=<account master key>

Fontos

Győződjön meg arról, hogy valamilyen UTF-8 adatbázis-rendezést használ, például Latin1_General_100_CI_AS_SC_UTF8, mert egy Azure Cosmos DB elemzési tár sztringértékei 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.

Megjegyzés:

A kiszolgáló nélküli SQL-készlet nem támogatja Azure Cosmos DB tranzakciós tároló 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 eseteinek és a COVID-19 nyílt kutatási adatkészletének (CORD-19) adatain alapulnak.

Ha követni szeretné ezt a cikket, amely bemutatja, hogyan kérdezhet le Azure Cosmos DB adatokat 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 Azure Synapse Link engedélyezve van
  • Egy covid nevű Azure Cosmos DB-adatbázis
  • Két Azure Cosmos DB Ecdc és Cord19 nevű tároló, amely az előző mintaadatkészletekkel van betöltve

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

Fontos

A szkriptben cserélje le ezeket az értékeket a saját értékeire:

  • your-cosmosdb – a Cosmos DB-fiók neve
  • yourcosmosdbkey – a Cosmos DB-fiók kulcsa
SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       Ecdc) as documents

Az előző példában arra utasítottuk a kiszolgáló nélküli SQL-készletet, hogy csatlakozzon a Azure Cosmos DB fiókban lévő covid adatbázishoz, MyCosmosDbAccount hitelesítve az Azure Cosmos DB kulccsal (az előző példában szereplő próbabábuval). 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 OPENROWSET függvény az Azure Cosmos DB elemek összes tulajdonságát visszaadja.

Feltételezve, hogy a Azure Cosmos DB tároló elemei date_rep, cases és geo_id tulajdonsággal rendelkeznek, a lekérdezés eredményei a következő táblázatban jelennek meg:

date_rep esetek geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

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

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

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

Bár az OPENROWSET automatikus sémakövető képessége egyszerű, könnyen használható felületet biztosít, az üzleti forgatókönyvek esetében előfordulhat, hogy explicit módon meg kell adnia a sémát, hogy csak olvasható tulajdonságokat adjon meg a Azure Cosmos DB adatokból.

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

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

{"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"}

Ezek az egysíkú JSON-dokumentumok Azure Cosmos DB a Synapse SQL-ben sorok és oszlopok halmazaként jeleníthetők meg. 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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 esetek geo_id
2020-08-13 254 RS
2020-08-12 235 RS
2020-08-11 163 RS

Az Azure Cosmos DB értékekhez ajánlott SQL-típusokról a cikk végén található Azure Cosmos DB SQL-típus leképezések című részben olvashat.

Nézet létrehozása

A nézetek létrehozása az alapértelmezett vagy a master 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 a Azure Cosmos DB adataira. Helyezze a Azure Cosmos DB fiókkulcsát egy külön hitelesítő adatba, és hivatkozzon erre a hitelesítő adatra a OPENROWSET függvényből. Ne őrizze meg a fiókkulcsot a nézetdefinícióban.

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

Ne használja OPENROWSET explicit módon definiált séma nélkül, mert ez befolyásolhatja a teljesítményt. 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). Azt javasoljuk, hogy valamilyen UTF-8 rendezést használjon alapértelmezett adatbázis-rendezésként, vagy állítsa be explicit oszloprendezésként a UTF-8 konverziós probléma elkerülése érdekében. A rendezés Latin1_General_100_BIN2_UTF8 a legjobb teljesítményt nyújtja, amikor adatszűrés során bizonyos karakterlánc oszlopokat használ.

A nézet lekérdezése során hibák vagy váratlan eredmények jelenhetnek meg. A nézethivatkozások oszlopai vagy objektumai valószínűleg módosultak, vagy már nem léteznek. 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 előfordulhat, 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

A Azure Cosmos DB összetettebb adatmodelleket jeleníthet meg beágyazott objektumokként vagy tömbökként való megírásával. Az Azure Synapse Link Azure Cosmos DB automatikus szinkronizálási 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
        ...
     }
     ...
}

A 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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:

dokumentum_azonosító cím metaadat Szerzők
bb11206963e831f... Kiegészítő információk Egy öko-epidemi... {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1... A lábadozók szérumának használata az im... {"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óért tekintse meg az Azure Synapse Analytics összetett adattípusainak elemzése vagy a Parquet- és JSON-fájlok beágyazott típusainak lekérdezése kiszolgáló nélküli SQL-készlet használatával.

Fontos

Ha a szövegben nem várt karakterek jelennek meg, például MÃÂ&copy;lade ahelyett Mélade, akkor az adatbázis illesztése nincs UTF-8 ilesztésre állítva. Az adatbázis-rendezést UTF-8 rendezésre módosíthatja

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

Azure Cosmos DB adatok beágyazott alárendelt tömböket tartalmazhatnak, mint például a szerzők 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ágait össze kell illesztenie 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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… Béza 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 a szövegben nem várt karakterek jelennek meg, például MÃÂ&copy;lade ahelyett Mélade, akkor az adatbázis illesztése nincs UTF-8 ilesztésre állítva. Az adatbázis-rendezést UTF-8 rendezésre módosíthatja

Azure Cosmos DB és SQL-típusképezések

Bár Azure Cosmos DB tranzakciós tároló sémafüggetlen, az elemzési tár sémaalapú, hogy optimalizálja az elemzési lekérdezés teljesítményét. Az Azure Synapse Link autoszinkron funkciójával Azure Cosmos DB kezeli a sémaábrázolást az elemzési tárban, 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 Azure Cosmos DB bemeneti adattípusokat SQL-adattípusokra.

Azure Cosmos DB SQL (Core) API-fiókok támogatják a number, string JSON-tulajdonságtípusokat, Boolean, null, nemesített objektum vagy array. A JSON-típusoknak megfelelő SQL-típusokat kell választania, ha a WITH záradékot használja a OPENROWSET-ben. Az alábbi táblázat azokat az SQL-oszloptípusokat mutatja be, amelyeket a Azure Cosmos DB különböző tulajdonságtípusaihoz kell használni.

Azure Cosmos DB tulajdonságtípus SQL-oszlop típusa
logikai egy kicsit
Egész szám bigint
Decimális float
Lánc varchar (UTF-8 adatbázis-rendezés)
Dátum-idő (ISO formátumú karakterlánc) varchar(30)
Dátum idő (UNIX időbélyeg) bigint
Nulla 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

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 esetek 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 a Azure Cosmos DB tárolóelemben azonosított típust. A date_rep tulajdonság legtöbb értéke date értékeket tartalmaz, de némelyikük helytelenül van tárolva sztringként Azure Cosmos DB. 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 van tárolva, 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 . A Azure Cosmos DB tárolóban helytelen típusokat tartalmazó értékeket törölnie kell a teljes megbízhatósági elemzési tárolóban történő javítások alkalmazásához.

A MongoDB-fiókok Azure Cosmos DB keretrendszerben történő lekérdezéséhez többet megtudhat az analitikai tár teljes hűségű sémareprezentációjáról és az alkalmazandó kiterjesztett tulajdonságnevekről a következő cikkben: Mi az az Azure Cosmos DB analitikai tár?

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árt 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

A geo_id és cases értékek, amelyek más típusokkal rendelkeznek, NULL értékként visszaadva lesznek. Ez a lekérdezés csak a cases megadott típusra hivatkozik a kifejezésben (cases.int32).

Ha más típusú (cases.int64, cases.float64) értékekkel rendelkezik, amelyeket nem lehet Azure Cosmos DB tárolóban törölni, akkor 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 a int32, int64 és float64 elemeket, amelyeket a cases oszlopban tárolnak:

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 int32, vagy int64, vagy float64 értékként lesz tárolva. Az országonkénti vagy 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 a self-help oldalt az ismert problémák vagy hibaelhárítási lépések megkereséséhez, amelyek segíthetnek a Azure Cosmos DB lekérdezésekkel kapcsolatos lehetséges problémák megoldásában.