Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Conseil / Astuce
Microsoft Fabric Data Warehouse est un entrepôt relationnel à l’échelle de l’entreprise sur une base de lac de données, avec une architecture future, une IA intégrée et de nouvelles fonctionnalités. Si vous débutez avec l'entreposage de données, commencez par Fabric Data Warehouse. Les charges de travail de pool SQL existantes dédicées peuvent être mises à niveau vers Fabric pour accéder à de nouvelles fonctionnalités dans la science des données, l’analytique en temps réel et la création de rapports.
Dans cet article, vous allez apprendre à écrire une requête à l'aide d'un pool SQL serverless dans Azure Synapse Analytics. L’objectif de la requête est de lire des fichiers JSON à l’aide d’OPENROWSET.
- Fichiers JSON standard où plusieurs documents JSON sont stockés sous forme de tableau JSON.
- Fichiers JSON délimités par des lignes, où les documents JSON sont séparés par un caractère de nouvelle ligne. Les extensions courantes pour ces types de fichiers sont
jsonl,ldjsonetndjson.
Lire des documents JSON
Le moyen le plus simple de voir le contenu de votre fichier JSON consiste à fournir l’URL du fichier à la OPENROWSET fonction, à spécifier csv FORMATet à définir des valeurs 0x0b pour fieldterminator et fieldquote. Si vous avez besoin de lire des fichiers JSON délimités par des lignes, cela suffit. Si vous avez un fichier JSON classique, vous devez définir des valeurs 0x0b pour rowterminator.
OPENROWSET la fonction analyse JSON et retourne chaque document au format suivant :
| doc |
|---|
| {"date_rep » :"2020-07-24 »,"day » :24,"month » :7,"year » :2020,"cases » :3,"deaths » :0,"geo_id » :"AF"} |
| {"date_rep » :"2020-07-25 »,"day » :25,"month » :7,"year » :2020,"cases » :7,"deaths » :0,"geo_id » :"AF"} |
| {"date_rep » :"2020-07-26 »,"day » :26,"month » :7,"year » :2020,"cases » :4,"deaths » :0,"geo_id » :"AF"} |
| {"date_rep » :"2020-07-27 »,"day » :27,"month » :7,"year » :2020,"cases » :8,"deaths » :0,"geo_id » :"AF"} |
Si le fichier est disponible publiquement ou si votre identité de Microsoft Entra peut accéder à ce fichier, vous devez voir le contenu du fichier à l’aide de la requête comme celle illustrée dans les exemples suivants.
Lire des fichiers JSON
L’exemple de requête suivant lit les fichiers JSON et JSON délimités par ligne et retourne chaque document sous forme de ligne distincte.
select top 10 *
from openrowset(
bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.jsonl',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
go
select top 10 *
from openrowset(
bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.json',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b',
rowterminator = '0x0b' --> You need to override rowterminator to read classic JSON
) with (doc nvarchar(max)) as rows
Le document JSON de l’exemple de requête précédent inclut un tableau d’objets. La requête retourne chaque objet sous forme de ligne distincte dans le jeu de résultats. Assurez-vous que vous pouvez accéder à ce fichier. Si votre fichier est protégé par une clé SAP ou une identité personnalisée, vous devez configurer les informations d’identification au niveau du serveur pour la connexion sql.
Utilisation de la source de données
L’exemple précédent utilise le chemin d’accès complet au fichier. Vous pouvez également créer une source de données externe avec l’emplacement qui pointe vers le dossier racine du stockage et utiliser cette source de données et le chemin relatif du fichier dans la OPENROWSET fonction :
create external data source covid
with ( location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases' );
go
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
go
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.json',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b',
rowterminator = '0x0b' --> You need to override rowterminator to read classic JSON
) with (doc nvarchar(max)) as rows
Si une source de données est protégée avec une clé SAP ou une identité personnalisée, vous pouvez configurer la source de données avec des informations d’identification délimitées à la base de données.
Dans les sections suivantes, vous pouvez voir comment interroger différents types de fichiers JSON.
Analyser des documents JSON
Les requêtes dans les exemples précédents retournent chaque document JSON sous forme de chaîne unique dans une ligne distincte du jeu de résultats. Vous pouvez utiliser des fonctions JSON_VALUE et OPENJSON analyser les valeurs dans les documents JSON et les retourner en tant que valeurs relationnelles, comme indiqué dans l’exemple suivant :
| date_rep | cas | geo_id |
|---|---|---|
| 2020-07-24 | 3 | AF |
| 2020-07-25 | 7 | AF |
| 2020-07-26 | 4 | AF |
| 2020-07-27 | 8 | AF |
Exemple de document JSON
Les exemples de requête lisent des fichiers json contenant des documents avec la structure suivante :
{
"date_rep":"2020-07-24",
"day":24,"month":7,"year":2020,
"cases":13,"deaths":0,
"countries_and_territories":"Afghanistan",
"geo_id":"AF",
"country_territory_code":"AFG",
"continent_exp":"Asia",
"load_date":"2020-07-25 00:05:14",
"iso_country":"AF"
}
Note
Si ces documents sont stockés en tant que JSON délimité par une ligne, vous devez définir FIELDTERMINATOR et FIELDQUOTE 0x0b. Si vous avez un format JSON standard, vous devez définir ROWTERMINATOR sur 0x0b.
Interroger des fichiers JSON à l’aide de JSON_VALUE
La requête ci-dessous vous montre comment utiliser JSON_VALUE pour récupérer des valeurs scalaires (date_rep, countries_and_territories, cases) à partir d’un document JSON :
select
JSON_VALUE(doc, '$.date_rep') AS date_reported,
JSON_VALUE(doc, '$.countries_and_territories') AS country,
CAST(JSON_VALUE(doc, '$.deaths') AS INT) as fatal,
JSON_VALUE(doc, '$.cases') as cases,
doc
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
order by JSON_VALUE(doc, '$.geo_id') desc
Une fois que vous avez extrait des propriétés JSON à partir d’un document JSON, vous pouvez définir des alias de colonne et éventuellement convertir la valeur textuelle en un certain type.
Interroger des fichiers JSON à l’aide d’OPENJSON
La requête suivante utilise OPENJSON. Il va récupérer les statistiques de la COVID signalées en Serbie :
select
*
from openrowset(
bulk 'latest/ecdc_cases.jsonl',
data_source = 'covid',
format = 'csv',
fieldterminator ='0x0b',
fieldquote = '0x0b'
) with (doc nvarchar(max)) as rows
cross apply openjson (doc)
with ( date_rep datetime2,
cases int,
fatal int '$.deaths',
country varchar(100) '$.countries_and_territories')
where country = 'Serbia'
order by country, date_rep desc;
Les résultats sont fonctionnellement identiques aux résultats retournés à l’aide de la JSON_VALUE fonction. Dans certains cas, OPENJSON peut avoir un avantage sur JSON_VALUE:
- Dans la
WITHclause, vous pouvez définir explicitement les alias de colonne et les types pour chaque propriété. Vous n’avez pas besoin de placer laCASTfonction dans chaque colonne de laSELECTliste. -
OPENJSONpeut être plus rapide si vous renvoyez un grand nombre de propriétés. Si vous retournez seulement 1 à 2 propriétés, laOPENJSONfonction peut être une surcharge. - Vous devez utiliser la
OPENJSONfonction si vous devez analyser le tableau à partir de chaque document et le joindre à la ligne parente.
Étapes suivantes
Les articles suivants de cette série montrent comment :