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ú explicitWITH
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_UTF8
mert 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_UTF8
egyszerű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
ésCord19
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élade
Mé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_UTF8
a .
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élade
Mé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_UTF8
a .
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.float64
amelyeket 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, int64
float64
mind int32
pedig 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 int32
int64
lesz 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:
- A Power BI és a kiszolgáló nélküli SQL-készlet használata az Azure Synapse Link használatával
- Nézetek létrehozása és használata kiszolgáló nélküli SQL-készletben
- Oktatóanyag kiszolgáló nélküli SQL-készletnézetek azure Cosmos DB-hez való létrehozásához és Power BI-modellekhez való csatlakoztatásához a DirectQuery használatával
- Ha hibát tapasztal, vagy teljesítményproblémákat tapasztal, látogasson el az Azure Cosmos DB önsegítő oldalára az Azure Synapse-hivatkozásra.
- Tekintse meg a Learn modult az Azure Cosmos DB és az Azure Synapse Analytics kiszolgáló nélküli SQL-sel való lekérdezéséről.