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 die gegevens leest uit Azure Cosmos DB, 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

Vereisten

  • Zorg ervoor dat u analytische opslag hebt voorbereid:
  • 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 expliciete WITH 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_UTF8bijvoorbeeld 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 en Cord19 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 WITHOPENROWSET 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, casesen 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 Auteurs
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ÃÂ&copy;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 Auteurs 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ÃÂ&copy;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, int64als 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, int64of float64 waarden. Alle waarden moeten worden geëxtraheerd om het aantal gevallen per land/regio te berekenen.

Problemen oplossen

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: