Interroger des fichiers de stockage à l’aide d’un pool SQL serverless
Un pool SQL serverless vous autorise à interroger des données dans votre lac de données. Ce service offre une surface d’exposition de requête Transact-SQL (T-SQL) qui prend en charge les requêtes de données semi-structurées et non structurées. Pour l’interrogation, les aspects T-SQL suivants sont pris en charge :
- Surface d’exposition SELECT complète, y compris la plupart des fonctions et opérateurs SQL.
- CREATE EXTERNAL TABLE AS SELECT (CETAS) crée une table externe, puis exporte, en parallèle, les résultats d’une instruction SELECT T-SQL vers le stockage Azure.
Pour plus d’informations sur ce qui est pris en charge ou non, consultez Vue d’ensemble du pool SQL serverless ou les articles suivants :
- Développer un accès au stockage, pour utiliser des tables externes et la fonction OPENROWSET afin de lire des données à partir du stockage.
- Contrôler l’accès au stockage, pour voir comment permettre à Synapse SQL d’accéder au stockage à l’aide de l’authentification SAS ou de l’identité managée de l’espace de travail.
Vue d’ensemble
Pour faciliter la prise en charge de l’interrogation sur place des données qui se trouvent dans des fichiers de Stockage Azure, le pool SQL serverless utilise la fonction OPENROWSET avec plus de fonctionnalités :
- Interroger des fichiers PARQUET
- Interroger des fichiers CSV et un texte délimité (marque de fin de champ, marque de fin de ligne, caractère d’échappement)
- Interroger le format DELTA LAKE
- Lire un sous-ensemble choisi de colonnes
- Inférence de schéma
- Interroger plusieurs fichiers ou dossiers
- Fonction Filename
- Fonction Filepath
- Utilisation de types complexes et de structures de données imbriquées ou répétées
Interroger des fichiers PARQUET
Pour interroger les données sources Parquet, utilisez FORMAT = 'PARQUET'
:
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Pour obtenir des exemples d’utilisation, consultez Interroger des fichiers Parquet.
Interroger des fichiers CSV
Pour interroger les données sources CSV, utilisez FORMAT = 'CSV'
. Vous pouvez spécifier le schéma du fichier CSV dans le cadre de la fonction OPENROWSET
quand vous interrogez des fichiers CSV :
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.csv', FORMAT = 'CSV', PARSER_VERSION='2.0')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Vous pouvez utiliser des options supplémentaires pour ajuster les règles d’analyse au format CSV personnalisé :
-
ESCAPE_CHAR = 'char'
Spécifie le caractère dans le fichier qui est utilisé pour se placer lui-même dans une séquence d’échappement ainsi que toutes les valeurs de délimiteur dans le fichier. Si le caractère d’échappement est suivi d’une valeur autre que lui-même, ou que l’une des valeurs de délimiteur, le caractère d’échappement est supprimé lors de la lecture de la valeur. Le paramètreESCAPE_CHAR
est appliqué si l’optionFIELDQUOTE
est activée ou n’est pas activée. Il ne sera pas utilisé comme caractère d’échappement devant le caractère de délimitation. Le caractère de délimitation doit être placé dans une séquence d’échappement avec un autre caractère de délimitation. Le caractère de délimitation peut apparaître dans la valeur de colonne seulement si la valeur est encapsulée avec des caractères de délimitation. -
FIELDTERMINATOR ='field_terminator'
Spécifie la marque de fin de champ à utiliser. La marque de fin de champ par défaut est une virgule (,
). -
ROWTERMINATOR ='row_terminator'
Spécifie l’indicateur de fin de ligne à utiliser. Par défaut, il s’agit d’un caractère de nouvelle ligne (\r\n
).
Interroger le format DELTA LAKE
Pour interroger les données sources Delta Lake, utilisez FORMAT = 'DELTA'
, puis référencez le dossier racine contenant vos fichiers Delta Lake.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder', FORMAT = 'DELTA')
WITH (C1 int, C2 varchar(20), C3 varchar(max)) as rows
Le dossier racine doit contenir un sous-dossier appelé _delta_log
. Pour obtenir des exemples d’utilisation, consultez Interroger des fichiers Delta Lake (v1).
Schéma de fichier
Le langage SQL dans Synapse SQL vous autorise à définir le schéma du fichier dans le cadre de la fonction OPENROWSET
et de lire la totalité ou un sous-ensemble des colonnes, ou il tente de déterminer automatiquement les types de colonne à partir du fichier à l’aide de l’inférence de schéma.
Lire un sous-ensemble choisi de colonnes
Pour spécifier les colonnes que vous souhaitez lire, vous pouvez fournir une clause WITH
facultative dans votre instruction OPENROWSET
.
- S’il y a des fichiers de données CSV, indiquez les noms des colonnes et leur type de données pour lire toutes les colonnes. Si vous souhaitez un sous-ensemble de colonnes, utilisez des nombres ordinaux pour sélectionner les colonnes des fichiers de données d’origine par ordinal. Les colonnes sont liées par la désignation ordinale.
- S’il existe des fichiers de données Parquet, fournissez des noms de colonne qui correspondent aux noms des colonnes dans les fichiers de données d’origine. Les colonnes sont alors liées par nom.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
WITH (
C1 int,
C2 varchar(20),
C3 varchar(max)
) as rows;
Pour chaque colonne, vous devez spécifier le nom et le type de colonne dans la clause WITH
. Pour obtenir des exemples, consultez Lire des fichiers CSV sans spécifier toutes les colonnes.
Inférence de schéma
En omettant la clause WITH
dans l’instruction OPENROWSET
, vous pouvez demander au service de détecter automatiquement (déduire) le schéma à partir des fichiers sous-jacents.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/mycontainer/mysubfolder/data.parquet', FORMAT = 'PARQUET')
Assurez-vous que des types de données déduits appropriés sont utilisés pour des performances optimales.
Interroger plusieurs fichiers ou dossiers
Pour exécuter une requête T-SQL sur un ensemble de fichiers, à l’intérieur d’un dossier ou d’un ensemble de dossiers, tout en les traitant en tant qu’entité ou ensemble de lignes unique, fournissez un chemin de dossier ou de modèle (à l’aide de caractères génériques) sur un ensemble de fichiers ou de dossiers.
Les règles suivantes s’appliquent :
- Les modèles peuvent apparaître comme faisant partie d’un chemin de répertoire, ou dans un nom de fichier.
- Plusieurs modèles peuvent apparaître dans la même étape de répertoire ou le même nom de fichier.
- S’il y a plusieurs caractères génériques, les fichiers présents dans tous les chemins correspondants sont inclus dans le jeu de fichiers obtenu.
SELECT * FROM
OPENROWSET( BULK N'https://myaccount.dfs.core.windows.net/myroot/*/mysubfolder/*.parquet', FORMAT = 'PARQUET' ) as rows
Pour obtenir des exemples d’utilisation, consultez Interroger des dossiers et plusieurs fichiers.
Fonctions de métadonnées de fichier
Fonction filename
Cette fonction retourne le nom du fichier d’où provient la ligne.
Pour interroger des fichiers spécifiques, lisez la section Filename dans l’article Interroger des fichiers spécifiques.
Le type de données de retour est nvarchar (1024). Pour des performances optimales, castez toujours le résultat de la fonction filename en un type de données approprié. Si vous utilisez le type de données caractères, assurez-vous que la longueur appropriée est utilisée.
Fonction filepath
Cette fonction retourne un chemin complet ou une partie de chemin :
- En cas d’appel sans paramètre, elle retourne le chemin complet du fichier d’où est issue une ligne.
- En cas d’appel avec paramètre, elle retourne une partie du chemin qui correspond au caractère générique, à la position spécifiée dans le paramètre. Par exemple, la valeur de paramètre 1 retourne une partie du chemin qui correspond au premier caractère générique.
Pour plus d’informations, consultez la section Filepath dans l’article Interroger des fichiers spécifiques.
Le type de données de retour est nvarchar(1024). Pour des performances optimales, diffusez toujours le résultat de la fonction filepath en un type de données approprié. Si vous utilisez le type de données caractères, assurez-vous que la longueur appropriée est utilisée.
Utiliser des types complexes et des structures de données imbriquées ou répétées
Pour faciliter la prise en charge des données stockées dans des types de données imbriqués ou répétés, comme dans des fichiers Parquet, le pool SQL serverless comprend les extensions suivantes.
Projeter des données imbriquées ou répétées
Pour projeter des données, exécutez une instruction SELECT
sur le fichier Parquet qui contient des colonnes de types de données imbriquées. En sortie, les valeurs imbriquées sont sérialisées en JSON et retournées sous la forme d’un type de données SQL varchar(8000).
SELECT * FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Pour plus d’informations, consultez la section Projeter des données imbriquées ou répétées dans l’article Interroger des types imbriqués Parquet.
Accéder aux éléments à partir de colonnes imbriquées
Pour accéder aux éléments imbriqués à partir d’une colonne imbriquée, telle que Struct, utilisez la notation par points pour concaténer les noms de champ dans le chemin. Indiquez le chemin en tant que column_name
dans la clause WITH
de la fonction OPENROWSET
.
L’exemple de fragment de syntaxe est le suivant :
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
WITH ('column_name' 'column_type')
[AS alias]
'column_name' ::= '[field_name.] field_name'
Par défaut, la fonction OPENROWSET
associe le chemin et le nom de champ de la source aux noms de colonne fournis dans la clause WITH
. Les éléments contenus à des niveaux d’imbrication différents dans le même fichier Parquet source sont accessibles en utilisant la clause WITH
.
Valeurs retournées
- La fonction retourne une valeur scalaire, telle que
int
,decimal
etvarchar
, à partir de l’élément spécifié, et dans le chemin spécifié, pour tous les types Parquet qui ne sont pas dans le groupe Type imbriqué. - Si le chemin pointe vers un élément qui est d’un Type imbriqué, la fonction retourne un fragment JSON à partir de l’élément du plus haut niveau dans le chemin spécifié. Le fragment JSON est de type varchar(8000).
- Si la propriété est introuvable au niveau de l’élément
column_name
spécifié, la fonction retourne une erreur. - Si la propriété est introuvable au niveau de l’élément
column_path
précisé, en fonction du mode de chemin, la fonction retourne une erreur en mode strict, ou retourne la valeur nulle en mode lax.
Pour obtenir des exemples de requêtes, consultez la section Lire les propriétés à partir de colonnes d’objets imbriquées dans l’article Interroger des types imbriqués Parquet.
Accéder aux éléments à partir de colonnes répétées
Pour accéder aux éléments d’une colonne répétée, par exemple un élément d’un tableau ou d’un plan, utilisez la fonction JSON_VALUE pour chaque élément scalaire que vous devez projeter, et fournissez les informations suivantes :
- Colonne imbriquée ou répétée, en tant que premier paramètre
- Un chemin JSON qui spécifie la propriété ou l’élément auquel accéder, en tant que second paramètre
Pour accéder à des éléments non scalaires à partir d’une colonne répétée, utilisez la fonction JSON_QUERY pour chaque élément non scalaire que vous devez projeter, et fournissez les informations suivantes :
- Colonne imbriquée ou répétée, en tant que premier paramètre
- Un chemin JSON qui spécifie la propriété ou l’élément auquel accéder, en tant que second paramètre
Consultez le fragment de syntaxe suivant :
SELECT
JSON_VALUE (column_name, path_to_sub_element),
JSON_QUERY (column_name [ , path_to_sub_element ])
FROM
OPENROWSET
( BULK 'unstructured_data_path' ,
FORMAT = 'PARQUET' )
[AS alias]
Vous trouverez des exemples de requêtes permettant d’accéder à des éléments depuis les colonnes répétées dans l’article Interroger des types imbriqués Parquet.
Contenu connexe
Pour plus d’informations sur l’interrogation de différents types de fichiers ainsi que sur la création et l’utilisation de vues, consultez les articles suivants :