Informations de référence sur l’accélération des requêtes en langage SQL
L’accélération des requêtes prend en charge un langage de type SQL ANSI pour exprimer des requêtes sur le contenu des blobs. Le dialecte SQL d’accélération des requêtes est un sous-ensemble de SQL ANSI, avec un ensemble limité de types de données, d’opérateurs, etc. pris en charge, mais il s’étend également au SQL ANSI pour prendre en charge les requêtes sur des formats de données hiérarchiques semi-structurés tels que JSON.
Syntaxe SELECT
La seule instruction SQL prise en charge par l’accélération des requêtes est l’instruction SELECT. Cet exemple retourne chaque ligne pour laquelle l’expression retourne la valeur true.
SELECT * FROM table [WHERE expression] [LIMIT limit]
Pour les données au format CSV, table doit être . Cela signifie que la requête sera exécutée sur le blob spécifié dans l’appel REST. Pour les données au format JSON, table est un « descripteur de table ». Consultez la section Descripteurs de table de cet article.
Dans l’exemple suivant, pour chaque ligne pour laquelle l’expression WHERE retourne la valeur true, cette instruction renverra une nouvelle ligne créée à partir de l’évaluation de chacune des expressions de projection.
SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]
Vous pouvez spécifier une ou plusieurs colonnes spécifiques dans l’expression SELECT (par exemple : SELECT Title, Author, ISBN
).
Notes
Le nombre maximal de colonnes spécifiques que vous pouvez utiliser dans l’expression SELECT est 49. Si vous avez besoin que votre instruction SELECT retourne plus de 49 colonnes, utilisez un caractère générique (*
) pour l’expression SELECT (par exemple : SELECT *
).
L’exemple suivant retourne un calcul d’agrégation (par exemple, la valeur moyenne d’une colonne particulière) sur chacune des lignes pour lesquelles l’expression retourne la valeur true.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
L’exemple suivant retourne des décalages appropriés pour le fractionnement d’un blob au format CSV. Consultez la section Sys.Split de cet article.
SELECT sys.split(split_size)FROM BlobStorage
Types de données
Type de données | Description |
---|---|
INT | Entier signé 64 bits. |
FLOAT | Virgule flottante (« double précision ») 64 bits. |
STRING | Chaîne Unicode de longueur variable. |
timestamp | Limite dans le temps. |
BOOLEAN | True ou false. |
Lors de la lecture de valeurs à partir de données au format CSV, toutes les valeurs sont lues en tant que chaînes. Les valeurs de chaîne peuvent être converties en d’autres types à l’aide d’expressions CAST. Les valeurs peuvent être castées implicitement en d’autres types en fonction du contexte. Pour plus d’informations, consultez Priorité des types de données (Transact-SQL).
Expressions
Référencement des champs
Pour les données au format JSON ou les données au format CSV avec une ligne d’en-tête, les champs peuvent être référencés par nom. Les noms de champs peuvent être entre guillemets ou sans guillemets. Les noms de champs entre guillemets sont placés entre guillemets doubles ("
), peuvent contenir des espaces et respectent la casse. Les noms de champs sans guillemets ne respectent pas la casse ni ne doivent contenir de caractères spéciaux.
Dans les données au format CSV, les champs peuvent également être référencés par un ordinal, précédé d’un trait de soulignement (_
). Par exemple, le premier champ peut être référencé par _1
, ou le onzième champ par _11
. Le référencement des champs par ordinal est utile pour les données au format CSV qui ne contiennent pas de ligne d’en-tête, auquel cas le seul moyen de référencer un champ particulier est par un nombre ordinal.
Opérateurs
Les opérateurs SQL standard suivants sont pris en charge :
Opérateur | Description |
---|---|
= |
Compare l'égalité de deux expressions (opérateur de comparaison). |
!= |
Teste si une expression est différente d'une autre expression (opérateur de comparaison). |
<> |
Compare deux expressions avec l’opérateur de comparaison différent de. |
< |
Compare deux expressions avec l’opérateur de comparaison inférieur à. |
<= |
Compare deux expressions avec l’opérateur de comparaison inférieur ou égal à. |
> |
Compare deux expressions avec l’opérateur de comparaison supérieur à. |
>= |
Compare deux expressions avec l'opérateur de comparaison supérieur ou égal à. |
+ |
Additionne deux nombres. Cet opérateur arithmétique d'addition peut aussi ajouter un nombre de jours à une date. |
- |
Effectue une soustraction entre deux nombres (opérateur de soustraction arithmétique). |
/ |
Divise un nombre par un autre (opérateur arithmétique de division). |
* |
Multiplie deux expressions (opérateur arithmétique de multiplication). |
% |
Renvoie le reste d'un nombre divisé par un autre. |
AND |
Effectue une opération AND logique au niveau du bit avec deux valeurs entières. |
OR |
Exécute une opération logique OR au niveau du bit entre deux valeurs entières spécifiées, traduites en expressions binaires dans les instructions Transact-SQL. |
NOT |
Inverse une entrée booléenne. |
CAST |
Convertit une expression d'un type de données à un autre. |
BETWEEN |
Définit un intervalle sur lequel la recherche doit porter. |
IN |
Détermine si une valeur donnée correspond à la valeur d'une liste ou d'une sous-requête. |
NULLIF |
Retourne une valeur NULL si les deux expressions spécifiées sont égales. |
COALESCE |
Évalue les arguments dans l’ordre et retourne la valeur actuelle de la première expression qui ne prend pas initialement la valeur NULL. |
Si les types de données à gauche et à droite d’un opérateur sont différents, la conversion automatique sera effectuée en fonction des règles spécifiées ici : Priorité des types de données (Transact-SQL).
Le langage SQL d’accélération des requêtes prend en charge uniquement un très petit sous-ensemble des types de données décrits dans cet article. Consultez la section Types de données de cet article.
Casts
Le langage SQL d’accélération des requêtes prend en charge l’opérateur CAST, conformément aux règles ci-dessous : Conversion de types de données (Moteur de base de données).
Le langage SQL d’accélération des requêtes prend en charge uniquement un minuscule sous-ensemble des types de données décrits dans cet article. Consultez la section Types de données de cet article.
Fonctions de chaînes
Le langage SQL d’accélération des requêtes prend en charge les fonctions de chaîne SQL standard suivantes :
Fonction | Description |
---|---|
CHAR_LENGTH | Retourne la longueur en caractères de l’expression de chaîne, si l’expression de chaîne est de type de données character ; sinon, retourne la longueur en octets de l’expression de chaîne (le plus petit entier qui n’est pas inférieur au nombre de bits divisé par 8). (Cette fonction est la même que la fonction CHARACTER_LENGTH.) |
CHARACTER_LENGTH | Retourne la longueur en caractères de l’expression de chaîne, si l’expression de chaîne est de type de données character ; sinon, retourne la longueur en octets de l’expression de chaîne (le plus petit entier qui n’est pas inférieur au nombre de bits divisé par 8). (Cette fonction est la même que la fonction CHAR_LENGTH.) |
LOWER | Retourne une chaîne de caractères après avoir transformé les caractères majuscules en caractères minuscules. |
UPPER | Transforme les caractères d'une expression en minuscules en caractères majuscules. |
SUBSTRING | Retourne une partie d’une expression de type caractère, binaire, texte ou image dans SQL Server. |
TRIM | Supprime le caractère espace char(32) ou d’autres caractères spécifiés au début et à la fin d’une chaîne. |
LEADING | Supprime l’espace char(32) ou d’autres caractères spécifiés au début d’une chaîne. |
TRAILING | Supprime l’espace char(32) ou d’autres caractères spécifiés à la fin d’une chaîne. |
Voici quelques exemples :
Fonction | Exemple | Résultats |
---|---|---|
CHARACTER_LENGTH | SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage |
7 |
CHAR_LENGTH | SELECT CHAR_LENGTH(_1) from BlobStorage |
1 |
LOWER | SELECT LOWER('AbCdEfG') from BlobStorage |
abcdefg |
UPPER | SELECT UPPER('AbCdEfG') from BlobStorage |
ABCDEFG |
SUBSTRING | SUBSTRING('123456789', 1, 5) |
23456 |
TRIM | TRIM(BOTH '123' FROM '1112211Microsoft22211122') |
Microsoft |
Fonctions de date
Les fonctions de date SQL standard suivantes sont prises en charge :
DATE_ADD
DATE_DIFF
EXTRACT
TO_STRING
TO_TIMESTAMP
À l’heure actuelle, tous les formats de date des IS08601 standard sont convertis.
Fonction DATE_ADD
Le langage SQL d’accélération des requêtes prend en charge l’année, le mois, le jour, l’heure, la minute et la seconde pour la fonction DATE_ADD
.
Exemples :
DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)
Fonction DATE_DIFF
Le langage SQL d’accélération des requêtes prend en charge l’année, le mois, le jour, l’heure, la minute et la seconde pour la fonction DATE_DIFF
.
DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00')
Fonction EXTRACT
Pour l’extraction autre que l’élément de date pris en charge pour la fonction DATE_ADD
, le langage SQL d’accélération des requêtes prend en charge timezone_hour et timezone_minute en tant qu’élément de date.
Exemples :
EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')
Fonction TO_STRING
Exemples :
TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP), 'MMMM d, y')
Ce tableau décrit les chaînes que vous pouvez utiliser pour spécifier le format de sortie de la fonction TO_STRING
.
Chaîne de format | Output |
---|---|
yy | Année au format à 2 chiffres : « 99 » pour 1999 |
y | Année au format à 4 chiffres |
aaaa | Année au format à 4 chiffres |
M | Mois de l’année : 1 |
MM | Mois complété par un zéro : 01 |
MMM | Abbr. Mois de l’année : JAN |
MMMM | Nom de mois complet : mai |
d | Jour du mois (1 à 31) |
jj | Jour du mois complété par un zéro (01 à 31) |
a | AM ou PM |
h | Heure de la journée (1 à 12) |
hh | Heure de la journée complétée par un zéro (01 à 12) |
H | Heure de la journée (0 à 23) |
HH | Heure de la journée complétée par un zéro (00 à 23) |
m | Minute de l’heure (0 à 59) |
MM | Minute complétée par un zéro (00 à 59) |
s | Secondes des minutes (0 à 59) |
ss | Secondes complétées par un zéro (00 à 59) |
S | Fraction de secondes (0,1 à 0,9) |
SS | Fraction de secondes (0,01 à 0,99) |
SSS | Fraction de secondes (0,001 à 0,999) |
X | Décalage en heures |
XX ou XXXX | Décalage en heures et minutes (+0430) |
XXX ou XXXXX | Décalage en heures et minutes (-07:00) |
x | Décalage en heures (7) |
xx ou xxxx | Décalage en heures et minutes (+0530) |
Xxx ou xxxxx | Décalage en heures et minutes (+05:30) |
Fonction TO_TIMESTAMP
Seuls les formats ISO 8601 sont pris en charge.
Exemples :
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Notes
Vous pouvez également utiliser la fonction UTCNOW
pour récupérer l’heure système.
Expressions d’agrégation
Une instruction SELECT peut contenir une ou plusieurs expressions de projection ou une expression d’agrégation unique. Les expressions d’agrégation suivantes sont prises en charge :
Expression | Description |
---|---|
COUNT(*) | Retourne le nombre d’enregistrements qui correspondent à l’expression de prédicat. |
COUNT(expression) | Retourne le nombre d’enregistrements pour lesquels l’expression n’a pas une valeur nulle. |
AVG(expression) | Retourne la moyenne de toutes les valeurs non nulles de l’expression. |
MIN(expression) | Retourne la valeur non nulle minimale de l’expression. |
MAX(expression | Retourne la valeur non nulle maximale de l’expression. |
SUM(expression) | Retourne la somme de toutes les valeurs non nulles d’une expression. |
MISSING
L’opérateur IS MISSING
est le seul opérateur non standard pris en charge par le langage SQL d’accélération des requêtes. Pour les données JSON, si un champ est manquant dans un enregistrement d’entrée particulier, le champ d’expression IS MISSING
prend la valeur booléenne true.
Descripteurs de table
Pour les données CSV, le nom de la table est toujours BlobStorage
. Par exemple :
SELECT * FROM BlobStorage
Pour les données JSON, des options supplémentaires sont disponibles :
SELECT * FROM BlobStorage[*].path
Cela permet d’interroger des sous-ensembles de données JSON.
Pour les requêtes JSON, vous pouvez indiquer le chemin d’accès dans le cadre de la clause FROM. Ces chemins d’accès permettent d’analyser le sous-ensemble de données JSON. Ces chemins d’accès peuvent faire référence à des valeurs Objet et Tableau JSON.
Prenons un exemple pour comprendre cela plus en détail.
Voici notre exemple de données :
{
"id": 1,
"name": "mouse",
"price": 12.5,
"tags": [
"wireless",
"accessory"
],
"dimensions": {
"length": 3,
"width": 2,
"height": 2
},
"weight": 0.2,
"warehouses": [
{
"latitude": 41.8,
"longitude": -87.6
}
]
}
Parmi les données ci-dessus, vous pouvez être intéressé uniquement par l’objet JSON warehouses
. L’objet warehouses
est un type de tableau JSON. Vous pouvez donc l’indiquer dans la clause FROM. Votre exemple de requête peut se présenter comme suit.
SELECT latitude FROM BlobStorage[*].warehouses[*]
La requête récupère tous les champs, mais sélectionne uniquement la latitude.
Si vous souhaitez accéder uniquement à la valeur de l’objet JSON dimensions
, vous pouvez utiliser la référence à cet objet dans votre requête. Par exemple :
SELECT length FROM BlobStorage[*].dimensions
Cela limite également votre accès aux membres de l’objet dimensions
. Si vous souhaitez accéder à d’autres membres de champs JSON et aux valeurs internes d’objets JSON, vous pouvez utiliser une requête telle que celle illustrée dans l’exemple suivant :
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Notes
BlobStorage et BlobStorage[*] font tous deux référence à l’objet entier. Toutefois, si vous avez un chemin dans la clause FROM, vous devez utiliser BlobStorage[*].path
Sys.Split
Il s’agit d’une forme spéciale de l’instruction SELECT, qui est uniquement disponible pour les données au format CSV.
SELECT sys.split(split_size) FROM BlobStorage
Utilisez cette instruction dans les cas où vous souhaitez télécharger et traiter les enregistrements de données CSV par lots. De cette façon, vous pouvez traiter les enregistrements en parallèle au lieu de devoir télécharger tous les enregistrements en même temps. Cette instruction ne retourne pas d’enregistrements du fichier CSV. Au lieu de cela, elle retourne une collection de tailles de lot. Vous pouvez ensuite utiliser chaque taille de lot pour récupérer un lot d’enregistrements de données.
Utilisez le paramètre split_size pour spécifier le nombre d’octets que doit contenir chaque lot. Par exemple, si vous souhaitez traiter uniquement 10 Mo de données à la fois, l’instruction ressemble à ceci : SELECT sys.split(10485760)FROM BlobStorage
, car 10 Mo est égal à 10 485 760 octets. Chaque lot contiendra autant d’enregistrements que possible dans ces 10 Mo.
Dans la plupart des cas, la taille de chaque lot sera légèrement supérieure au nombre que vous spécifiez. Cela est dû au fait qu’un lot ne peut pas contenir un enregistrement partiel. Si le dernier enregistrement d’un lot commence avant que votre seuil soit atteint, le lot est plus volumineux afin de pouvoir contenir l’enregistrement complet. La taille du dernier lot sera probablement inférieure à la taille que vous spécifiez.
Notes
Le valeur de split_size doit être au minimum de 10 Mo (10485760).