Interroger des données d’Azure Cosmos DB avec un pool SQL serverless dans Azure Synapse Link

Un pool SQL serverless vous permet d’analyser les données figurant dans vos conteneurs Azure Cosmos DB activés avec Azure Synapse Link en quasi-temps réel, sans que cela affecte les performances de vos charges de travail transactionnelles. Il offre une syntaxe T-SQL familière pour interroger les données du magasin analytique, et une connectivité intégrée à un vaste éventail d’outils décisionnels et d’interrogation ad hoc via l’interface T-SQL.

Pour l’interrogation d’Azure Cosmos DB, toute la surface d’exposition SELECT est prise en charge via la fonction OPENROWSET, y compris la majorité des fonctions et opérateurs SQL. Vous pouvez également stocker les résultats de la requête qui lit des données d’Azure Cosmos DB ainsi que des données du Stockage Blob Azure ou d’Azure Data Lake Storage à l’aide de la commande create external table as select (CETAS). Actuellement, vous ne pouvez pas stocker les résultats d’une requête de pool SQL serverless dans Azure Cosmos DB à l’aide de CETAS.

Cet article explique comment écrire une requête à l’aide d’un pool SQL serverless, qui interrogera les données de conteneurs Azure Cosmos DB pour lesquels la fonctionnalité Synapse Link est activée. Ce tutoriel fournit également des informations supplémentaires sur la création de vues de pool SQL serverless sur des conteneurs Azure Cosmos DB, et leur connexion à des modèles Power BI. Ce tutoriel utilise un conteneur avec un schéma bien défini Azure Cosmos DB. Vous pouvez également consulter le module Learn sur la façon d’interroger Azure Cosmos DB avec SQL serverless pour Azure Synapse Analytics.

Prérequis

  • Assurez-vous que vous avez préparé le magasin analytique :
  • Assurez-vous que vous avez appliqué toutes les meilleures pratiques, notamment :
    • Assurez-vous que votre stockage analytique Azure Cosmos DB se trouve dans la même région que le pool SQL serverless.
    • Assurez-vous que l’application cliente (Power BI, Analysis Services) se trouve dans la même région que le pool SQL serverless.
    • Si vous renvoyez une grande quantité de données (plus de 80 Go), envisagez d’utiliser une couche de mise en cache telle qu’Analysis Services et chargez les partitions de moins de 80 Go dans le modèle Analysis Services.
    • Si vous filtrez les données à l’aide de colonnes de type chaîne, assurez-vous d’utiliser la fonction OPENROWSET avec la clause WITH explicite qui a les types les plus petits possibles [par exemple, n’utilisez pas VARCHAR(1000) si vous savez que la propriété contient jusqu’à 5 caractères].

Vue d’ensemble

Le pool SQL serverless vous permet d’interroger le stockage analytique d’Azure Cosmos DB à l’aide de la fonction OPENROWSET.

  • OPENROWSET avec clé inlined. Cette syntaxe peut être utilisée pour interroger les collections d’Azure Cosmos DB sans avoir besoin de préparer les informations d’identification.
  • OPENROWSET qui a référencé les informations d’identification contenant la clé de compte Azure Cosmos DB. Cette syntaxe peut être utilisée pour créer des vues sur des collections d’Azure Cosmos DB.

Pour prendre en charge l’interrogation et l’analyse des données d’un magasin analytique Azure Cosmos DB, un pool SQL serverless est utilisé. Le pool SQL Server sans serveur utilise la syntaxe SQL OPENROWSET. Vous devez donc d’abord convertir votre chaîne de connexion Azure Cosmos DB au format suivant :

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

La chaîne de connexion SQL pour Azure Cosmos DB spécifie le nom du compte Azure Cosmos DB, le nom de la base de données, la clé principale du compte de base de données et un nom de région facultatif pour la fonction OPENROWSET. Certaines de ces informations peuvent être extraites de la chaîne de connexion Azure Cosmos DB standard.

Conversion du format de chaîne de connexion Azure Cosmos DB standard :

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

Le format de la chaîne de connexion SQL est le suivant :

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

La région est facultative. En cas d’omission, la région primaire du conteneur est utilisée.

Important

Il existe un autre paramètre facultatif dans la chaîne de connexion appelée endpoint. Le param endpoint est nécessaire pour les comptes qui ne correspondent pas au format *.documents.azure.com standard. Par exemple, si votre compte Azure CosmosDB se termine par .documents.azure.us, assurez-vous d’ajouter endpoint=<account name>.documents.azure.us dans la chaîne de connexion.

Le nom du conteneur Azure Cosmos DB est spécifié sans guillemets dans la syntaxe OPENROWSET. Si le nom du conteneur contient des caractères spéciaux, par exemple un tiret (-), le nom doit être encapsulé entre crochets ([]) dans la syntaxe OPENROWSET.

Important

Assurez-vous que vous utilisez un classement de base de données UTF-8, par exemple Latin1_General_100_CI_AS_SC_UTF8, car les valeurs de chaîne dans le magasin analytique Azure Cosmos DB sont encodées sous forme de texte UTF-8. Une incompatibilité entre l’encodage de texte dans le fichier et le classement peut entraîner des erreurs de conversion de texte inattendues. Vous pouvez facilement modifier le classement par défaut de la base de données actuelle à l’aide de l’instruction T-SQL alter database current collate Latin1_General_100_CI_AI_SC_UTF8.

Notes

Un pool SQL serverless ne prend pas en charge l’interrogation d’un magasin transactionnel d’Azure Cosmos DB.

Exemple de jeu de données

Les exemples de cet article sont basés sur des données relatives aux Cas de COVID-19 du Centre européen pour la prévention et le contrôle des maladies (CEPCM) et du COVID-19 Open Research DataSet (CORD-19), doi:10.5281/zenodo.3715505.

Vous trouverez la licence et la structure des données dans ces pages. Vous pouvez également télécharger des exemples de données pour les jeux de données ECDC et CORD-19 .

Pour suivre cet article montrant comment interroger les données d’Azure Cosmos DB avec un pool SQL serverless, veillez à créer les ressources suivantes :

  • un compte de base de données Azure Cosmos DB compatible Azure Synapse Link ;
  • une base de données Azure Cosmos DB nommée covid ;
  • deux conteneurs Azure Cosmos DB nommés Ecdc et Cord19 chargés avec les exemples de jeux de données ci-dessus.

Vous pouvez utiliser la chaîne de connexion suivante à des fins de test : Account=synapselink-cosmosdb-sqlsample;Database=covid;Key=s5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==. Notez que cette connexion ne garantit pas les performances, car ce compte peut se trouver dans une région distante par rapport à votre point de terminaison Synapse SQL.

Explorer des données d’Azure Cosmos DB avec une inférence de schéma automatique

Le moyen le plus simple d’explorer des données dans Azure Cosmos DB consiste à utiliser la fonctionnalité d’inférence de schéma automatique. En omettant la clause WITH de l’instruction OPENROWSET, vous pouvez donner pour instruction au pool SQL serverless de détecter automatiquement (inférer) le schéma du magasin analytique du conteneur Azure Cosmos DB.

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

Dans l’exemple ci-dessus, nous avons donné pour instruction à un pool SQL serverless de se connecter à la base de données covid dans un compte Azure Cosmos DB MyCosmosDbAccount authentifié à l’aide de la clé Azure Cosmos DB (la clé factice dans l’exemple ci-dessus). Nous avons accédé ensuite au magasin analytique Ecdc du conteneur dans la région West US 2. Étant donné qu’il n’y a aucune projection de propriétés spécifiques, la fonction OPENROWSET retourne toutes les propriétés des éléments d’Azure Cosmos DB.

En supposant que les éléments se trouvant dans le conteneur Azure Cosmos DB aient les propriétés date_rep, cases et geo_id, les résultats de cette requête figurent dans le tableau suivant :

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

Si vous devez explorer les données de l’autre conteneur dans la même base de données Azure Cosmos DB, vous pouvez utiliser la même chaîne de connexion et le conteneur de référence requis comme troisième paramètre :

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

Spécifier explicitement le schéma

Bien que la fonctionnalité d’inférence de schéma automatique dans OPENROWSET offre une expérience de requête simple et facile à utiliser, vos scénarios d’entreprise peuvent vous obliger à spécifier explicitement le schéma pour lire uniquement les propriétés pertinentes à partir des données d’Azure Cosmos DB.

La fonction OPENROWSET vous permet de spécifier de manière explicite les propriétés que vous souhaitez lire à partir des données du conteneur, ainsi que de spécifier leurs types de données.

Supposons que nous avons importé des données du jeu de données COVID du CEPCM avec la structure suivante dans 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"}

Ces documents JSON plats dans Azure Cosmos DB peuvent être représentés sous la forme d’un ensemble de lignes et de colonnes dans Synapse SQL. La fonction OPENROWSET vous permet de spécifier un sous-ensemble de propriétés que vous souhaitez lire et les types de colonnes exacts dans la clause WITH :

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

Le résultat de cette requête peut ressembler au tableau suivant :

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

Pour plus d’informations sur les types SQL à utiliser pour les valeurs Azure Cosmos DB, consultez les règles pour les mappages de type SQL à la fin de l’article.

Créer une vue

La création de vues dans la base de données master ou dans la base de données par défaut n’est ni recommandée ni prise en charge. Vous devez donc créer une base de données utilisateur pour vos vues.

Une fois que vous avez identifié le schéma, vous pouvez préparer une vue en plus de vos données Azure Cosmos DB. Vous devez placer votre clé de compte Azure Cosmos DB dans des informations d’identification distinctes et référencer ces informations d’identification à partir de la fonction OPENROWSET. Ne conservez pas votre clé de compte dans la définition de la vue.

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

N’utilisez pas OPENROWSET sans schéma explicitement défini, car cela peut avoir un impact sur vos performances. Veillez à utiliser les plus petites tailles possibles pour vos colonnes [par exemple VARCHAR(100) au lieu de VARCHAR(8000) par défaut]. Vous devriez utiliser un classement UTF-8 comme classement de base de données par défaut ou le définir comme classement de colonnes explicite pour éviter les problèmes de conversion UTF-8. Le classement Latin1_General_100_BIN2_UTF8 offre des performances optimales quand vous filtrez des données en utilisant des colonnes de chaîne.

Lorsque vous interrogez la vue, vous pouvez rencontrer des erreurs ou des résultats inattendus. Cela signifie vraisemblablement que la vue fait référence à des colonnes ou des objets qui ont été modifiés ou qui n’existent plus. Vous devez ajuster manuellement la définition de la vue pour l’aligner sur les modifications sous-jacentes de schéma. N’oubliez pas que cela peut se produire à la fois lors de l’utilisation de l’inférence automatique de schéma dans la vue et lors d’une spécification explicite du schéma.

Interroger des objets imbriqués

Azure Cosmos DB vous permet de représenter des modèles de données plus complexes en les composant en tant qu’objets ou tableaux imbriqués. La fonctionnalité de synchronisation automatique d’Azure Synapse Link pour Azure Cosmos DB gère la représentation de schéma dans le magasin analytique prêt à l’emploi qui comprend la gestion des types de données imbriqués, ce qui permet d’effectuer des requêtes enrichies à partir du pool SQL serverless.

Par exemple, le jeu de données CORD-19 contient des documents JSON suivant cette structure :

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

Les objets et tableaux imbriqués dans Azure Cosmos DB sont représentés en tant que chaînes JSON dans le résultat de la requête lorsque la fonction OPENROWSET les lit. Vous pouvez spécifier les chemins d’accès aux valeurs imbriquées dans les objets lorsque vous utilisez la clause WITH :

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;

Le résultat de cette requête peut ressembler au tableau suivant :

paper_id title metadata authors
bb11206963e831f… Informations supplémentaires An eco-epidemi… {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
bb1206963e831f1… The Use of Convalescent Sera in Immune-E… {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
bb378eca9aac649… Tylosema esculentum (Marama) Tuber and B… {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

En savoir plus sur l’analyse des types de données complexes comme les fichiers Parquet et les conteneurs dans Azure Synapse Link pour Azure Cosmos DB ou des structures imbriquées dans un pool SQL serverless.

Important

Si vous voyez des caractères inattendus dans votre texte, par exemple MÃÂ&copy;lade au lieu de Mélade, cela signifie que votre classement de base de données n’est pas défini sur le classement MÃÂ&copy;lade. Remplacez le classement de la base de données par un classement UTF-8 à l’aide d’une instruction SQL telle que ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8.

Aplatir des tableaux imbriqués

Il se peut que les données Azure Cosmos DB comprennent des sous-tableaux imbriqués tels que le tableau d’auteurs du jeu de données CORD-19 :

{
    "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>
            },
            ...
        ],
        ...
}

Dans certains cas, il se peut que vous deviez « joindre » les propriétés de l’élément supérieur (métadonnées) à tous les éléments du tableau (authors). Un pool SQL serverless vous permet d’aplatir des structures imbriquées en appliquant la fonction OPENJSON au tableau imbriqué :

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

Le résultat de cette requête peut ressembler au tableau suivant :

title authors first last affiliation
Informations supplémentaires An eco-epidemi… [{"first":"Julien","last":"Mélade","suffix":"","affiliation":{"laboratory":"Centre de Recher… Julien Mélade {"laboratory":"Centre de Recher…
Informations supplémentaires An eco-epidemi… [{"first":"Nicolas","last":"4#","suffix":"","affiliation":{"laboratory":"","institution":"U… Nicolas 4# {"laboratory":"","institution":"U…
Informations supplémentaires An eco-epidemi… [{"first":"Beza","last":"Ramazindrazana","suffix":"","affiliation":{"laboratory":"Centre de Recher… Beza Ramazindrazana {"laboratory":"Centre de Recher…
Informations supplémentaires An eco-epidemi… [{"first":"Olivier","last":"Flores","suffix":"","affiliation":{"laboratory":"UMR C53 CIRAD, … Olivier Flores {"laboratory":"UMR C53 CIRAD, …

Important

Si vous voyez des caractères inattendus dans votre texte, par exemple MÃÂ&copy;lade au lieu de Mélade, cela signifie que votre classement de base de données n’est pas défini sur le classement MÃÂ&copy;lade. Remplacez le classement de la base de données par un classement UTF-8 à l’aide d’une instruction SQL telle que ALTER DATABASE MyLdw COLLATE LATIN1_GENERAL_100_CI_AS_SC_UTF8.

Mappages de type Azure Cosmos DB à SQL

Même si le magasin transactionnel Azure Cosmos DB est indépendant du schéma, le magasin analytique est schématisé afin de l’optimiser pour les performances de requête analytique. Avec la fonctionnalité de synchronisation automatique d’Azure Synapse Link, Azure Cosmos DB gère la représentation de schéma dans le magasin analytique prêt à l’emploi qui comprend la gestion des types de données imbriqués. Étant donné qu’un pool SQL serverless interroge le magasin analytique, il est important de comprendre comment mapper des types de données d’entrée Azure Cosmos DB à des types de données SQL.

Les comptes Azure Cosmos DB de l’API SQL (Core) prennent en charge les types de propriété JSON nombre, chaîne, booléen, null, objet imbriqué ou tableau. Vous devez choisir des types SQL correspondant à ces types JSON si vous utilisez WITH dans la clause OPENROWSET. Le tableau suivant montre les types de colonnes SQL à utiliser pour les différents types de propriétés dans Azure Cosmos DB.

Type de propriété Azure Cosmos DB Type de colonne SQL
Booléen bit
Integer bigint
Decimal float
String varchar (classement de base de données UTF-8)
Date et heure (chaîne au format ISO) varchar(30)
Date et heure (horodatage UNIX) bigint
Null any SQL type
Objet ou tableau imbriqués varchar(max) (classement de base de données UTF-8), sérialisé en tant que texte JSON

Schéma de fidélité optimale

Le schéma de fidélité optimale Azure Cosmos DB enregistre les valeurs et leurs meilleurs types de correspondance pour chaque propriété au sein d’un conteneur. La fonction OPENROWSET sur un conteneur avec un schéma de fidélité optimale fournit le type et la valeur réelle dans chaque cellule. Supposons que la requête suivante lit les éléments d’un conteneur avec un schéma de fidélité optimale :

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

Le résultat de cette requête renvoie des types et des valeurs au format de texte JSON :

date_rep cas 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"}

Pour chaque valeur, vous pouvez voir le type identifié dans un élément de conteneur Azure Cosmos DB. La plupart des valeurs pour la propriété date_rep sont des valeurs date, mais certaines sont stockées de manière incorrecte en tant que chaînes (string) dans Azure Cosmos DB. Le schéma de fidélité optimale retourne les valeurs date correctement typées et les valeurs string mises en forme de manière incorrecte. Le nombre de cas est une information stockée en tant que valeur int32, mais il existe une valeur entrée sous la forme d’un nombre décimal. Cette valeur a le type float64. Si certaines valeurs dépassent le plus grand nombre int32, elles sont stockées en tant que type int64. Toutes les valeurs geo_id de cet exemple sont stockées en tant que types string.

Important

La fonction OPENROWSET sans clause WITH expose les valeurs avec les types attendus et les valeurs dont les types sont incorrectement entrés. Cette fonction est conçue pour l’exploration de données, non pour la création de rapports. N’analysez pas les valeurs JSON retournées par cette fonction pour créer des rapports. Utilisez une clause WITH explicite pour créer vos rapports. Vous devez nettoyer les valeurs dont les types sont incorrects dans le conteneur Azure Cosmos DB pour appliquer des corrections dans le magasin analytique de fidélité optimale.

Pour interroger des comptes Azure Cosmos DB for Mongo DB, vous pouvez en apprendre davantage sur la représentation du schéma de fidélité optimale dans le magasin analytique et sur les noms de propriétés étendues à utiliser dans Qu’est-ce que le magasin analytique Azure Cosmos DB ?.

Interroger des éléments avec un schéma de fidélité optimale

Lors de l’interrogation du schéma de fidélité optimale, vous devez spécifier explicitement le type SQL et le type de propriété Azure Cosmos DB attendu dans la clause WITH.

Dans l’exemple suivant, nous allons supposer que le type string est correct pour la propriété geo_id, et que le type int32 est correct pour la propriété 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

Des valeurs geo_id et cases d’autres types sont retournées en tant que valeurs de NULL. Cette requête fait référence uniquement aux cases avec le type spécifié dans l’expression (cases.int32).

Si vous avez des valeurs avec d’autres types (cases.int64, cases.float64) qui ne peuvent pas être nettoyées dans le conteneur Azure Cosmos DB, vous devez les référencer explicitement dans une clause WITH et combiner les résultats. La requête suivante agrège les valeurs int32, int64 et float64 stockées dans la colonne cases:

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

Dans cet exemple, le nombre de cas est stocké en tant que valeurs int32, int64 ou float64. Toutes les valeurs doivent être extraites pour calculer le nombre de cas par pays/région.

Résolution des problèmes

Consultez la page d’auto-assistance pour trouver les problèmes connus ou les étapes de dépannage qui peuvent vous aider à résoudre les problèmes que vous pouvez rencontrer avec les requêtes Azure Cosmos DB.

Étapes suivantes

Pour plus d’informations, consultez les articles suivants :