Partager via


Interroger des données Azure Cosmos DB à l’aide d’un pool SQL serverless

Important

Synapse Link pour Cosmos DB n’est plus pris en charge pour les nouveaux projets. N’utilisez pas cette fonctionnalité.

Utilisez la fonctionnalité de mise en miroir d'Azure Cosmos DB pour Microsoft Fabric, qui est désormais en disponibilité générale. La mise en miroir offre les mêmes avantages sans ETL et est complètement intégrée à Microsoft Fabric. En savoir plus dans l'aperçu de la mise en miroir de Cosmos DB.

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 Transact-SQL (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 plupart 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 avec un pool SQL serverless qui interroge les données à partir de conteneurs Azure Cosmos DB activés avec Azure Synapse Link. 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 qui explique comment Interroger Azure Cosmos DB avec SQL serverless pour Azure Synapse Analytics.

Prérequis

  • Veillez à préparer 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 des données à l’aide de colonnes de chaîne, veillez à 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é comporte jusqu’à cinq 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( 
       'CosmosDB',
       '<SQL connection string for Azure Cosmos DB>',
       <other parameters>
    )  [ < with clause > ] AS alias

La chaîne de connexion SQL pour Azure Cosmos DB inclut les composants suivants :

  • account : nom du compte Azure Cosmos DB que vous ciblez.
  • database : nom du conteneur, spécifié sans guillemets dans la syntaxe OPENROWSET. Si le nom du conteneur contient des caractères spéciaux (par exemple, un tiret -), il doit être placé entre crochets ([]).
  • region (facultatif) : région de votre stockage analytique Cosmos DB. En cas d’omission, la région primaire du conteneur est utilisée.
  • endpoint (facultatif) : URI du point de terminaison Cosmos DB (par exemple https://<account name>.documents.azure.us) requis si votre compte Cosmos DB ne respecte pas le format standard *.documents.azure.com .

Important

Ce endpoint paramètre est nécessaire pour les comptes qui ne correspondent pas au format standard *.documents.azure.com . Par exemple, si votre compte Azure Cosmos DB se termine par .documents.azure.us, assurez-vous d’ajouter endpoint=https://<account name>.documents.azure.us dans la chaîne de connexion. Assurez-vous d’inclure le https:// préfixe.

Ces propriétés peuvent être identifiées à partir de la chaîne de connexion Cosmos DB standard, par exemple :

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

La chaîne de connexion SQL peut être formatée comme suit :

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

Cette chaîne de connexion n’inclut pas les informations d’authentification requises pour se connecter au stockage analytique Cosmos DB. Des informations supplémentaires sont nécessaires en fonction du type d’authentification utilisé :

  • Si OPENROWSET vous utilisez l’identité managée de l’espace de travail pour accéder au magasin analytique, vous devez ajouter la AuthType propriété.
  • Si OPENROWSET vous utilisez une clé de compte en ligne, vous devez ajouter la key propriété. Cela vous permet d’interroger des collections Azure Cosmos DB sans avoir à préparer d’informations d’identification.
  • Au lieu d’inclure des informations d’authentification dans la chaîne de connexion, OPENROWSET vous pouvez référencer des informations d’identification contenant la clé de compte Azure Cosmos DB. Cette approche peut être utilisée pour créer des vues sur des collections Azure Cosmos DB.

Ces options sont décrites ci-dessous.

Le pool SQL serverless vous permet d’interroger le stockage Cosmos DB Analytical et de vous authentifier à l’aide de la clé de compte Cosmos DB d’origine, ou d’autoriser l’identité managée Synapse à accéder au stockage Cosmos DB Analytique. Vous pouvez utiliser la syntaxe suivante dans ce scénario :

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

En plus des propriétés communes de la chaîne de connexion SQL décrites ci-dessus (compte, base de données, région et point de terminaison), vous devez ajouter l’une des options suivantes :

  • AuthType : définissez cette option sur ManagedIdentity si vous accédez à Cosmos DB à l’aide de l’identité managée de l’espace de travail Synapse.
  • key : clé principale permettant d’accéder aux données Cosmos DB, utilisée si elle n’utilise pas l’identité managée de l’espace de travail Synapse.

Le tableau suivant présente des exemples de chaînes de connexion :

Type d’authentification Chaîne de connexion
Identité managée de l’espace de travail Synapse account=<account name>;database=<db name>;region=<region name>;AuthType=ManagedIdentity
Clé principale de compte Cosmos DB account=<account name>;database=<db name>;region=<region name>;key=<account master key>

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.

Remarque

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 présentés dans cet article sont basés sur les données du Centre européen de prévention et de contrôle des maladies (ECDC) sur les cas de COVID-19 et sur l’ensemble de données de recherche ouverte sur la COVID-19 (CORD-19).

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

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.

Important

Dans le script, remplacez ces valeurs par vos propres valeurs :

  • your-cosmosdb : le nom de votre compte Cosmos DB
  • yourcosmosdbkey : la clé de votre compte Cosmos DB
SELECT TOP 10 *
FROM OPENROWSET( 
       'CosmosDB',
       'Account=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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 renvoie 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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 simple et facile à utiliser, vos scénarios d’entreprise peuvent vous obliger à indiquer 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 d’indiquer explicitement les propriétés que vous souhaitez lire à partir des données du conteneur et d’indiquer 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 d’indiquer 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       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 la section Mappages de Azure Cosmos DB vers type SQL à la fin de cet article.

Créer une vue

La création de vues dans la base de données master ou 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 = 'yourcosmosdbkey';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=your-cosmosdb;Database=covid',
      OBJECT = 'Ecdc',
      SERVER_CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

N’utilisez pas OPENROWSET sans schéma explicitement défini, car cela peut affecter 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 un problème 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. La vue, les références, les colonnes ou les objets ont probablement été modifiés ou 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       Cord19)
WITH (  paper_id    varchar(8000),
        title        varchar(1000) '$.metadata.title',
        metadata     varchar(max),
        authors      varchar(max) '$.metadata.authors'
) AS docs;

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

paper_id titre métadonnées Auteurs
BB11206963E831F... Informations supplémentaires An eco-epidemi… {"title":"Supplementary Informati… [{"first":"Julien","last":"Mélade","suffix":"","af…
BB1206963E831F1... L’utilisation de sérums de convalescence dans le traitement immunitaire... {"title":"The Use of Convalescent… [{"first":"Antonio","last":"Lavazza","suffix":"", …
BB378ECA9AAC649... Tylosema esculentum (Marama) Tubercule et B... {"title":"Tylosema esculentum (Ma… [{"first":"Walter","last":"Chingwaru","suffix":"",…

Pour plus d’informations, consultez la section Analyser des types de données complexes dans Azure Synapse Analytics ou Interroger des types imbriqués dans des fichiers Parquet et JSON à l’aide du 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. Vous pouvez modifier le classement de base de données en classement UTF-8 à l’aide d’une instruction SQL comme 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 (auteurs). 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=your-cosmosdb;Database=covid;Key=yourcosmosdbkey',
       Cord19
    ) WITH ( title varchar(1000) '$.metadata.title',
             authors varchar(max) '$.metadata.authors' ) AS docs
      CROSS APPLY OPENJSON ( authors )
                  WITH (
                       first varchar(50),
                       last varchar(50),
                       affiliation nvarchar(max) as json
                  ) AS a

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

titre Auteurs premier dernier 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… Bèze 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. Vous pouvez modifier le classement de base de données en classement UTF-8 à l’aide d’une instruction SQL comme 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és 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 mors
Nombre entier bigint
Décimal flotter
Chaîne 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
Zéro 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 renvoie les valeurs date correctement typées et les valeurs string mises en forme de manière incorrecte.

Le nombre de cas est stocké 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 supposons 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 renvoyés 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 ou région.

Dépannage

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.