Query's uitvoeren op Azure Cosmos DB-gegevens met een serverloze SQL-pool in Azure Synapse Link
Met een serverloze SQL-pool kunt u gegevens in uw Azure Cosmos DB-containers analyseren die in bijna realtime zijn ingeschakeld met Azure Synapse Link , zonder dat dit van invloed is op de prestaties van uw transactionele workloads. Het biedt een vertrouwde T-SQL-syntaxis voor het opvragen van gegevens uit de analytische opslag en geïntegreerde connectiviteit met een breed scala aan business intelligence (BI) en ad-hoc queryprogramma's via de T-SQL-interface.
Voor het uitvoeren van query's op Azure Cosmos DB wordt het volledige GEBIED SELECT ondersteund via de functie OPENROWSET , waaronder het merendeel van de SQL-functies en -operators. U kunt ook resultaten opslaan van de query waarmee gegevens uit Azure Cosmos DB worden gelezen, samen met gegevens in Azure Blob Storage of Azure Data Lake Storage door een externe tabel te maken als select (CETAS). U kunt momenteel geen queryresultaten voor serverloze SQL-pools opslaan in Azure Cosmos DB met behulp van CETAS.
In dit artikel leert u hoe u een query schrijft met een serverloze SQL-pool waarmee query's worden uitgevoerd op gegevens uit Azure Cosmos DB-containers die zijn ingeschakeld met Azure Synapse Link. Vervolgens vindt u meer informatie over het bouwen van serverloze SQL-poolweergaven via Azure Cosmos DB-containers en het verbinden met Power BI-modellen in deze zelfstudie. In deze zelfstudie wordt een container met een goed gedefinieerd Azure Cosmos DB-schema gebruikt. U kunt ook de Learn-module bekijken over het uitvoeren van query's op Azure Cosmos DB met SQL Serverless voor Azure Synapse Analytics.
Notitie
U kunt beheerde identiteit niet gebruiken voor toegang tot een Azure Cosmos DB-container vanuit een serverloze SQL-pool.
Vereisten
- Zorg ervoor dat u analytische opslag hebt voorbereid:
- Schakel analytische opslag in voor uw Azure Cosmos DB-containers.
- Haal de verbindingsreeks op met een alleen-lezen sleutel die u gebruikt om een query uit te voeren op analytische opslag.
- De alleen-lezen sleutel ophalen die wordt gebruikt voor toegang tot de Azure Cosmos DB-container
- Zorg ervoor dat u alle aanbevolen procedures hebt toegepast, zoals:
- Zorg ervoor dat uw analytische opslag van Azure Cosmos DB zich in dezelfde regio bevindt als een serverloze SQL-pool.
- Zorg ervoor dat de clienttoepassing (Power BI, Analysis Service) zich in dezelfde regio bevindt als de serverloze SQL-pool.
- Als u een grote hoeveelheid gegevens retourneert (groter dan 80 GB), kunt u overwegen de cachelaag zoals Analysis Services te gebruiken en de partities kleiner dan 80 GB in het Analysis Services-model te laden.
- Als u gegevens filtert met behulp van tekenreekskolommen, moet u ervoor zorgen dat u de
OPENROWSET
functie gebruikt met de explicieteWITH
component met de kleinste mogelijke typen (gebruik bijvoorbeeld niet VARCHAR(1000) als u weet dat de eigenschap maximaal 5 tekens heeft.
Overzicht
Met een serverloze SQL-pool kunt u query's uitvoeren op analytische opslag van Azure Cosmos DB met behulp van OPENROWSET
een functie.
OPENROWSET
met inlinesleutel. Deze syntaxis kan worden gebruikt om query's uit te voeren op Azure Cosmos DB-verzamelingen zonder referenties voor te bereiden.OPENROWSET
die verwijst naar de referentie die de Azure Cosmos DB-accountsleutel bevat. Deze syntaxis kan worden gebruikt om weergaven te maken in Azure Cosmos DB-verzamelingen.
Ter ondersteuning van het uitvoeren van query's en het analyseren van gegevens in een analytische opslag van Azure Cosmos DB wordt een serverloze SQL-pool gebruikt. De serverloze SQL-pool maakt gebruik van de OPENROWSET
SQL-syntaxis, dus u moet eerst uw Azure Cosmos DB-verbindingsreeks converteren naar deze indeling:
OPENROWSET(
'CosmosDB',
'<SQL connection string for Azure Cosmos DB>',
<Container name>
) [ < with clause > ] AS alias
De SQL-verbindingsreeks voor Azure Cosmos DB specificeert de naam van het Azure Cosmos DB-account, de databasenaam, de hoofdsleutel van het databaseaccount en een optionele regionaam voor de OPENROWSET
functie. Sommige van deze informatie kunnen worden opgehaald uit de standaard Azure Cosmos DB-verbindingsreeks.
Converteren vanuit de standaardindeling van Azure Cosmos DB verbindingsreeks:
AccountEndpoint=https://<database account name>.documents.azure.com:443/;AccountKey=<database account master key>;
De SQL-verbindingsreeks heeft de volgende indeling:
'account=<database account name>;database=<database name>;region=<region name>;key=<database account master key>'
De regio is optioneel. Als u dit weglaat, wordt de primaire regio van de container gebruikt.
Belangrijk
Er is nog een optionele parameter in verbindingsreeks aangeroepenendpoint
. De endpoint
parameter is nodig voor accounts die niet overeenkomen met de standaardindeling *.documents.azure.com
. Als uw Azure CosmosDB-account bijvoorbeeld eindigt.documents.azure.us
, moet u ervoor zorgen dat u de verbindingsreeks toevoegtendpoint=<account name>.documents.azure.us
.
De naam van de Azure Cosmos DB-container wordt opgegeven zonder aanhalingstekens in de OPENROWSET
syntaxis. Als de containernaam speciale tekens bevat, bijvoorbeeld een streepje (-), moet de naam tussen vierkante haken ([]
) in de OPENROWSET
syntaxis worden geplaatst.
Belangrijk
Zorg ervoor dat u een UTF-8-databasesortering gebruikt, Latin1_General_100_CI_AS_SC_UTF8
bijvoorbeeld omdat tekenreekswaarden in een analytische opslag van Azure Cosmos DB zijn gecodeerd als UTF-8-tekst.
Een onjuiste overeenkomst tussen tekstcodering in het bestand en sortering kan onverwachte fouten veroorzaken bij het converteren van tekst.
U kunt eenvoudig de standaardsortering van de huidige database wijzigen met behulp van de T-SQL-instructie alter database current collate Latin1_General_100_CI_AI_SC_UTF8
.
Notitie
Een serverloze SQL-pool biedt geen ondersteuning voor het uitvoeren van query's op een transactioneel archief van Azure Cosmos DB.
Voorbeeldgegevensset
De voorbeelden in dit artikel zijn gebaseerd op gegevens van het European Centre for Disease Prevention and Control (ECDC) COVID-19 Cases and COVID-19 Open Research Dataset (CORD-19), doi:10.5281/zenodo.3715505.
U kunt de licentie en de structuur van gegevens op deze pagina's bekijken. U kunt ook voorbeeldgegevens downloaden voor de ECDC - en CORD-19-gegevenssets.
Als u samen met dit artikel wilt zien hoe u query's uitvoert op Azure Cosmos DB-gegevens met een serverloze SQL-pool, moet u ervoor zorgen dat u de volgende resources maakt:
- Een Azure Cosmos DB-databaseaccount waarvoor Azure Synapse Link is ingeschakeld.
- Een Azure Cosmos DB-database met de naam
covid
. - Twee Azure Cosmos DB-containers met de naam
Ecdc
enCord19
geladen met de voorgaande voorbeeldgegevenssets.
U kunt de volgende verbindingsreeks gebruiken voor testdoeleinden: Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==
. Houd er rekening mee dat deze verbinding geen prestaties garandeert omdat dit account zich mogelijk in een externe regio bevindt in vergelijking met uw Synapse SQL-eindpunt.
Azure Cosmos DB-gegevens verkennen met automatische schemadeductie
De eenvoudigste manier om gegevens in Azure Cosmos DB te verkennen, is door gebruik te maken van de functie voor automatische schemadeductie. Door de component uit de WITH
OPENROWSET
instructie weg te laten, kunt u de serverloze SQL-pool opdracht geven om het schema van de analytische opslag van de Azure Cosmos DB-container automatisch te detecteren (afleiden).
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Ecdc) as documents
In het voorgaande voorbeeld hebben we de serverloze SQL-pool geïnstrueerd om verbinding te maken met de covid
database in het Azure Cosmos DB-account MyCosmosDbAccount
dat is geverifieerd met behulp van de Azure Cosmos DB-sleutel (de dummy in het voorgaande voorbeeld). Vervolgens hebben we toegang tot de analytische opslag van de Ecdc
container in de West US 2
regio. Omdat er geen projectie van specifieke eigenschappen is, retourneert de OPENROWSET
functie alle eigenschappen uit de Azure Cosmos DB-items.
Ervan uitgaande dat de items in de Azure Cosmos DB-container date_rep
, cases
en geo_id
eigenschappen, de resultaten van deze query worden weergegeven in de volgende tabel:
date_rep | cases | geo_id |
---|---|---|
2020-08-13 | 254 | RS |
2020-08-12 | 235 | RS |
2020-08-11 | 163 | RS |
Als u gegevens uit de andere container in dezelfde Azure Cosmos DB-database wilt verkennen, kunt u dezelfde verbindingsreeks gebruiken en verwijzen naar de vereiste container als de derde parameter:
SELECT TOP 10 *
FROM OPENROWSET(
'CosmosDB',
'Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==',
Cord19) as cord19
Schema expliciet opgeven
Hoewel de mogelijkheid OPENROWSET
voor automatische schemadeductie een eenvoudige, gebruiksvriendelijke query's biedt, moet u in uw bedrijfsscenario's mogelijk expliciet het schema opgeven om alleen-lezen relevante eigenschappen van de Azure Cosmos DB-gegevens op te geven.
OPENROWSET
Met de functie kunt u expliciet opgeven welke eigenschappen u wilt lezen uit de gegevens in de container en de bijbehorende gegevenstypen opgeven.
Stel dat we enkele gegevens uit de ECDC COVID-gegevensset hebben geïmporteerd met de volgende structuur in 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"}
Deze platte JSON-documenten in Azure Cosmos DB kunnen worden weergegeven als een set rijen en kolommen in Synapse SQL. Met OPENROWSET
de functie kunt u een subset van eigenschappen opgeven die u wilt lezen en de exacte kolomtypen in de WITH
component:
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
Het resultaat van deze query kan er als volgt uitzien:
date_rep | cases | geo_id |
---|---|---|
2020-08-13 | 254 | RS |
2020-08-12 | 235 | RS |
2020-08-11 | 163 | RS |
Zie de regels voor SQL-typetoewijzingen aan het einde van het artikel voor meer informatie over de SQL-typen die moeten worden gebruikt voor Azure Cosmos DB-waarden.
Weergave maken
Het maken van weergaven in de master
of standaarddatabases wordt niet aanbevolen of ondersteund. U moet dus een gebruikersdatabase maken voor uw weergaven.
Zodra u het schema hebt geïdentificeerd, kunt u een weergave voorbereiden op uw Azure Cosmos DB-gegevens. U moet uw Azure Cosmos DB-accountsleutel in een afzonderlijke referentie plaatsen en naar deze referentie verwijzen vanuit OPENROWSET
de functie. Bewaar uw accountsleutel niet in de weergavedefinitie.
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
Gebruik niet OPENROWSET
zonder expliciet gedefinieerd schema, omdat dit van invloed kan zijn op uw prestaties. Zorg ervoor dat u de kleinste mogelijke grootten gebruikt voor uw kolommen (bijvoorbeeld VARCHAR(100) in plaats van standaard VARCHAR(8000)). Gebruik een aantal UTF-8-sortering als standaarddatabasesortering of stel deze in als expliciete kolomsortering om UTF-8-conversieproblemen te voorkomen. Sortering Latin1_General_100_BIN2_UTF8
biedt de beste prestaties wanneer u gegevens filtert met behulp van een aantal tekenreekskolommen.
Wanneer u een query op de weergave uitvoert, kunnen er fouten of onverwachte resultaten optreden. Dit betekent waarschijnlijk dat de weergave verwijst naar kolommen of objecten die zijn gewijzigd of die niet meer bestaan. U moet de weergavedefinitie handmatig aanpassen om af te stemmen op de onderliggende schemawijzigingen. Houd er rekening mee dat dit kan gebeuren bij het gebruik van automatische schemadeductie in de weergave en bij het expliciet opgeven van het schema.
Geneste objecten opvragen
Met Azure Cosmos DB kunt u complexere gegevensmodellen vertegenwoordigen door ze op te stellen als geneste objecten of matrices. De functie voor automatisch synchroniseren van Azure Synapse Link voor Azure Cosmos DB beheert de schemaweergave in de analytische opslag, waaronder het verwerken van geneste gegevenstypen die uitgebreide query's vanuit de serverloze SQL-pool mogelijk maken.
De gegevensset CORD-19 bevat bijvoorbeeld JSON-documenten die deze structuur volgen:
{
"paper_id": <str>, # 40-character sha1 of the PDF
"metadata": {
"title": <str>,
"authors": <array of objects> # list of author dicts, in order
...
}
...
}
De geneste objecten en matrices in Azure Cosmos DB worden weergegeven als JSON-tekenreeksen in het queryresultaat wanneer de OPENROWSET
functie ze leest. U kunt de paden naar geneste waarden in de objecten opgeven wanneer u de WITH
component gebruikt:
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;
Het resultaat van deze query kan er als volgt uitzien:
paper_id | title | metagegevens | authors |
---|---|---|---|
bb11206963e831f... | Aanvullende informatie Een eco-epidemi... | {"title":"Supplementary Informati… |
[{"first":"Julien","last":"Mélade","suffix":"","af… |
bb1206963e831f1... | Het gebruik van convalescent Serine in Immuun-E... | {"title":"The Use of Convalescent… |
[{"first":"Antonio","last":"Lavazza","suffix":"", … |
bb378eca9aac649... | Tylosema esculentum (Marama) Tuber en B... | {"title":"Tylosema esculentum (Ma… |
[{"first":"Walter","last":"Chingwaru","suffix":"",… |
Meer informatie over het analyseren van complexe gegevenstypen, zoals Parquet-bestanden en -containers in Azure Synapse Link voor Azure Cosmos DB of geneste structuren in een serverloze SQL-pool.
Belangrijk
Als u onverwachte tekens in uw tekst ziet, zoals Mélade
in plaats van Mélade
, is uw databasesortering niet ingesteld op UTF-8-sortering .
Wijzig de sortering van de database in UTF-8-sortering met behulp van een SQL-instructie zoals ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Geneste matrices plat maken
Azure Cosmos DB-gegevens hebben mogelijk geneste submatrices, zoals de matrix van de auteur uit een CORD-19-gegevensset :
{
"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>
},
...
],
...
}
In sommige gevallen moet u mogelijk de eigenschappen uit het bovenste item (metagegevens) samenvoegen met alle elementen van de matrix (auteurs). Met een serverloze SQL-pool kunt u geneste structuren plat maken door de OPENJSON
functie toe te passen op de geneste matrix:
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
Het resultaat van deze query kan er als volgt uitzien:
title | authors | Eerste | Laatste | Aansluiting |
---|---|---|---|---|
Aanvullende informatie Een eco-epidemi... | [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Julien | Mélade | {"laboratory":"Centre de Recher… |
Aanvullende informatie Een eco-epidemi... | [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… |
Nicolas | #4 | {"laboratory":"","institution":"U… |
Aanvullende informatie Een eco-epidemi... | [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… |
Beza | Ramazindrazana | {"laboratory":"Centre de Recher… |
Aanvullende informatie Een eco-epidemi... | [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … |
Olivier | Flores | {"laboratory":"UMR C53 CIRAD, … |
Belangrijk
Als u onverwachte tekens in uw tekst ziet, zoals Mélade
in plaats van Mélade
, is uw databasesortering niet ingesteld op UTF-8-sortering . Wijzig de sortering van de database in UTF-8-sortering met behulp van een SQL-instructie zoals ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8
.
Toewijzingen van Azure Cosmos DB naar SQL-type
Hoewel transactionele opslag van Azure Cosmos DB schemaneutraal is, wordt de analytische opslag geschematiseerd om te optimaliseren voor analytische queryprestaties. Met de functie voor automatisch synchroniseren van Azure Synapse Link beheert Azure Cosmos DB de schemaweergave in de analytische opslag, waaronder het verwerken van geneste gegevenstypen. Omdat een serverloze SQL-pool query's op de analytische opslag uitgeeft, is het belangrijk om te begrijpen hoe u Invoergegevenstypen van Azure Cosmos DB kunt toewijzen aan SQL-gegevenstypen.
Azure Cosmos DB-accounts van SQL (Core) API ondersteunen JSON-eigenschapstypen van getal, tekenreeks, Booleaanse waarde, null, geneste objecten of matrix. U moet SQL-typen kiezen die overeenkomen met deze JSON-typen als u de WITH
component in OPENROWSET
. In de volgende tabel ziet u de SQL-kolomtypen die moeten worden gebruikt voor verschillende eigenschapstypen in Azure Cosmos DB.
Eigenschapstype van Azure Cosmos DB | SQL-kolomtype |
---|---|
Booleaanse waarde | bit |
Geheel getal | bigint |
Decimaal | zwevend |
String | varchar (UTF-8-databasesortering) |
Datum/tijd (ISO-notatietekenreeks) | varchar(30) |
Datum/tijd (UNIX-tijdstempel) | bigint |
Null | any SQL type |
Genest object of matrix | varchar(max) (UTF-8-databasesortering), geserialiseerd als JSON-tekst |
Schema voor volledige betrouwbaarheid
Het Azure Cosmos DB-schema voor volledige betrouwbaarheid registreert zowel waarden als de beste overeenkomsttypen voor elke eigenschap in een container. De OPENROWSET
functie in een container met een schema voor volledige betrouwbaarheid biedt zowel het type als de werkelijke waarde in elke cel. Stel dat met de volgende query de items uit een container met een volledig betrouwbaarheidsschema worden gelezen:
SELECT *
FROM OPENROWSET(
'CosmosDB',
'account=MyCosmosDbAccount;database=covid;region=westus2;key=C0Sm0sDbKey==',
Ecdc
) as rows
Het resultaat van deze query retourneert typen en waarden die zijn opgemaakt als JSON-tekst:
date_rep | cases | geo_id |
---|---|---|
{"date":"2020-08-13"} | {"int32":"254"} | {"tekenreeks":"RS"} |
{"date":"2020-08-12"} | {"int32":"235"} | {"tekenreeks":"RS"} |
{"date":"2020-08-11"} | {"int32":"316"} | {"tekenreeks":"RS"} |
{"date":"2020-08-10"} | {"int32":"281"} | {"tekenreeks":"RS"} |
{"date":"2020-08-09"} | {"int32":"295"} | {"tekenreeks":"RS"} |
{"tekenreeks":"2020/08/08"} | {"int32":"312"} | {"tekenreeks":"RS"} |
{"date":"2020-08-07"} | {"float64":"339.0"} | {"tekenreeks":"RS"} |
Voor elke waarde ziet u het type dat is geïdentificeerd in een Azure Cosmos DB-containeritem. De meeste waarden voor de date_rep
eigenschap bevatten date
waarden, maar sommige waarden worden onjuist opgeslagen als tekenreeksen in Azure Cosmos DB. Het schema voor volledige betrouwbaarheid retourneert zowel correct getypte date
waarden als onjuist opgemaakte string
waarden.
Het aantal gevallen is informatie die is opgeslagen als een int32
waarde, maar er is één waarde die wordt ingevoerd als een decimaal getal. Deze waarde heeft het float64
type. Als er een aantal waarden zijn die het grootste int32
getal overschrijden, worden ze opgeslagen als het int64
type. Alle geo_id
waarden in dit voorbeeld worden opgeslagen als string
typen.
Belangrijk
De OPENROWSET
functie zonder een WITH
component bevat zowel waarden met verwachte typen als de waarden met onjuist ingevoerde typen. Deze functie is ontworpen voor gegevensverkenning en niet voor rapportage. Parseert geen JSON-waarden die zijn geretourneerd door deze functie om rapporten te maken. Gebruik een expliciete WITH-component om uw rapporten te maken. U moet de waarden met onjuiste typen in de Azure Cosmos DB-container opschonen om correcties toe te passen in de analytische opslag met volledige betrouwbaarheid.
Als u query's wilt uitvoeren op Azure Cosmos DB voor MongoDB-accounts, vindt u meer informatie over de schemaweergave van volledige betrouwbaarheid in de analytische opslag en de uitgebreide eigenschapsnamen die moeten worden gebruikt in Wat is analytische opslag van Azure Cosmos DB?
Query's uitvoeren op items met een schema met volledige betrouwbaarheid
Tijdens het uitvoeren van query's op het schema voor volledige betrouwbaarheid moet u expliciet het SQL-type en het verwachte Azure Cosmos DB-eigenschapstype in de WITH
component opgeven.
In het volgende voorbeeld wordt ervan uitgegaan dat dit string
het juiste type is voor de geo_id
eigenschap en int32
het juiste type is voor de cases
eigenschap:
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
Waarden voor geo_id
en cases
met andere typen worden geretourneerd als NULL
waarden. Deze query verwijst alleen naar het cases
opgegeven type in de expressie (cases.int32
).
Als u waarden hebt met andere typen (cases.int64
, cases.float64
) die niet kunnen worden opgeschoond in een Azure Cosmos DB-container, moet u er expliciet naar verwijzen in een WITH
component en de resultaten combineren. Met de volgende query worden zowel int32
, int64
als float64
opgeslagen in de cases
kolom samengevoegd:
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
In dit voorbeeld wordt het aantal gevallen opgeslagen als int32
, int64
of float64
waarden. Alle waarden moeten worden geëxtraheerd om het aantal gevallen per land/regio te berekenen.
Probleemoplossing
Bekijk de zelfhulppagina om de bekende problemen of stappen voor probleemoplossing te vinden waarmee u potentiële problemen met Azure Cosmos DB-query's kunt oplossen.
Volgende stappen
Raadpleeg voor meer informatie de volgende artikelen:
- Power BI en serverloze SQL-pool gebruiken met Azure Synapse Link
- Weergaven maken en gebruiken in een serverloze SQL-pool
- Zelfstudie over het bouwen van serverloze SQL-poolweergaven via Azure Cosmos DB en het verbinden met Power BI-modellen via DirectQuery
- Ga naar de azure Synapse-koppeling voor de self-helppagina van Azure Cosmos DB als u fouten krijgt of prestatieproblemen ondervindt.
- Bekijk de Learn-module over het uitvoeren van query's op Azure Cosmos DB met SQL Serverless voor Azure Synapse Analytics.