Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
L’accélération des requêtes prend en charge un langage similaire au SQL ANSI pour exprimer des requêtes sur le contenu des blobs. Le dialecte SQL d’accélération de requête est un sous-ensemble d’ANSI SQL, avec un ensemble limité de types de données, opérateurs, etc., mais il s’étend également sur ANSI SQL pour prendre en charge les requêtes sur des formats de données semi-structurés hiérarchiques 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 true.
SELECT * FROM table [WHERE expression] [LIMIT limit]
Pour les données au format CSV, la table doit être BlobStorage. 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, la table est un « descripteur de table ». Consultez la section Descripteurs de tableau de cet article.
Dans l’exemple suivant, pour chaque ligne pour laquelle l’expression WHERE retourne la valeur true, cette instruction retourne une nouvelle ligne effectué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 le cadre de l’expression SELECT (par exemple). SELECT Title, Author, ISBN
Remarque
Le nombre maximal de colonnes spécifiques que vous pouvez utiliser dans l’expression SELECT est de 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 true.
SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]
L’exemple suivant retourne des décalages appropriés pour fractionner un objet 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 | Descriptif |
|---|---|
| ENT | Nombre entier signé de 64 bits. |
| FLOTTER | Virgule flottante 64 bits (« double précision »). |
| CHAÎNE | Chaîne Unicode de longueur variable. |
| HORODATEUR | Un point dans le temps. |
| BOOLÉEN | Vrai ou faux. |
Lors de la lecture de valeurs à partir de données au format CSV, toutes les valeurs sont lues sous forme de chaînes. Les valeurs de chaîne peuvent être converties en d’autres types à l’aide d’expressions CAST. Les valeurs peuvent être implicitement converties en d’autres types en fonction du contexte. Pour plus d’informations, consultez priorité du type 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 et ne doivent pas contenir de caractères spéciaux.
Dans les données au format CSV, les champs peuvent également être référencés par ordinal, précédés d’un caractère de soulignement (_). Par exemple, le premier champ peut être référencé en tant que _1, ou le onzee champ peut être référencé comme _11. Le référencement de champs par ordinal est utile pour les données au format CSV qui ne contiennent pas de ligne d’en-tête, auquel cas la seule façon de référencer un champ particulier est par ordinal.
Opérateurs
Les opérateurs SQL standard suivants sont pris en charge :
| Opérateur | Descriptif |
|---|---|
= |
Compare l’égalité de deux expressions (opérateur de comparaison). |
!= |
Teste si une expression n’est pas égale à 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 pour une valeur inférieure ou égale (opérateur de comparaison). |
> |
Compare deux expressions avec l’opérateur de comparaison supérieur à. |
>= |
Compare deux expressions pour une valeur supérieure ou égale (opérateur de comparaison). |
+ |
Additionne deux nombres. Cet opérateur arithmétique d’ajout peut également ajouter un nombre, en jours, à une date. |
- |
Effectue une soustraction entre deux nombres (opérateur de soustraction arithmétique). |
/ |
Divise un nombre par un autre (opérateur de division arithmétique). |
* |
Multiplie deux expressions (opérateur de multiplication arithmétique). |
% |
Retourne 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 |
Effectue une opération logique OU au niveau des bits entre deux valeurs entières spécifiées, traduites en expressions binaires dans les instructions Transact-SQL. |
NOT |
Annule une entrée booléenne. |
CAST |
Convertit une expression d’un type de données en une autre. |
BETWEEN |
Définit un intervalle sur lequel la recherche doit porter. |
IN |
Détermine si une valeur spécifiée correspond à une valeur dans une sous-requête ou une liste. |
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 n’a initialement pas la valeur NULL. |
Si les types de données à gauche et à droite d’un opérateur sont différents, la conversion automatique est effectuée en fonction des règles spécifiées ici : priorité du type de données (Transact-SQL).
Le langage SQL d’accélération des requêtes ne prend en charge qu’un sous-ensemble très petit des types de données abordés dans cet article. Consultez la section Types de données de cet article.
Jette
Le langage SQL d’accélération de requête prend en charge l’opérateur CAST, en fonction des règles ici : conversion de type de données (moteur de base de données).
Le langage SQL d’accélération des requêtes ne prend en charge qu’un petit sous-ensemble des types de données abordés dans cet article. Consultez la section Types de données de cet article.
Fonctions de chaîne
Le langage SQL d’accélération de requête prend en charge les fonctions de chaîne SQL standard suivantes :
| Fonction | Descriptif |
|---|---|
| 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 identique à la fonction CHAR_LENGTH |
| BAISSER | Retourne une chaîne de caractères après avoir transformé les caractères majuscules en caractères minuscules. |
| upper | Renvoie une expression de caractère avec des données de caractères minuscules converties en majuscules. |
| SOUS-CHAÎNE | Retourne une partie d'une expression de type caractère, binaire, texte ou image dans SQL Server. |
| COUPER | Supprime le caractère d’espace char(32) ou d’autres caractères spécifiés du début et de la fin d’une chaîne. |
| DIRECTEUR | Supprime le caractère d’espace char(32) ou d’autres caractères spécifiés au début d’une chaîne. |
| FUITE | Supprime le caractère d’espace char(32) ou d’autres caractères spécifiés de la fin d’une chaîne. |
Voici quelques exemples :
| Fonction | Exemple : | Résultat |
|---|---|---|
| CHARACTER_LENGTH | SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage |
7 |
| CHAR_LENGTH | SELECT CHAR_LENGTH(_1) from BlobStorage |
1 |
| BAISSER | SELECT LOWER('AbCdEfG') from BlobStorage |
abcdefg |
| SUPÉRIEUR | SELECT UPPER('AbCdEfG') from BlobStorage |
ABCDEFG |
| SOUS-CHAÎNE | SUBSTRING('123456789', 1, 5) |
23456 |
| COUPER | TRIM(BOTH '123' FROM '1112211Microsoft22211122') |
Microsoft |
Fonctions de date
Les fonctions de date SQL standard suivantes sont prises en charge :
DATE_ADDDATE_DIFFEXTRACTTO_STRINGTO_TIMESTAMP
Actuellement, tous les formats de date de la norme ISO 8601 sont convertis.
Fonction DATE_ADD
Le langage SQL d’accélération de requête prend en charge l’année, le mois, le jour, l’heure, la minute, la seconde pour la DATE_ADD fonction.
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 de requête prend en charge l’année, le mois, le jour, l’heure, la minute, la seconde pour la DATE_DIFF fonction.
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 TO_STRING fonction.
| Chaîne de format | Sortie |
|---|---|
| aa | Année au format à 2 chiffres - 1999 en tant que '99' |
| 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 | Mois abrégé de l’année - JAN |
| MMMM | Mois complet - Mai |
| d | Jour du mois (1-31) |
| jj | Jour rembourré zéro du mois (01-31) |
| un | AM ou PM |
| h | Heure de la journée (1-12) |
| Hh | Heures du jour complétées par un zéro (01-12) |
| H | Heure du jour (0-23) |
| HH | Heure remplie zéro du jour (00-23) |
| m | Minute de l’heure (0-59) |
| MM | Minute complétée par un zéro (00 à 59) |
| s | Seconde de minutes (0-59) |
| ß | Secondes complétées par un zéro (00 à 59) |
| S | Fraction de secondes (0,1-0,9) |
| ß | 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 en minutes (+0430) |
| XXX ou XXXXX | Décalage en heures et en minutes (-07:00) |
| x | Décalage en heures (7) |
| xx ou xxxx | Décalage en heure et en minute (+0530) |
| Xxx ou xxxxx | Décalage en heure et en minute (+05:30) |
Fonction TO_TIMESTAMP
Seuls les formats IS08601 sont pris en charge.
Exemples:
TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')
Remarque
Vous pouvez également utiliser la UTCNOW fonction pour obtenir l’heure système.
Expressions d’agrégation
Une instruction SELECT peut contenir une ou plusieurs expressions de projection ou une seule expression d’agrégation. Les expressions d’agrégation suivantes sont prises en charge :
| L'Expression | Descriptif |
|---|---|
| COUNT(*) | Retourne le nombre d’enregistrements correspondant à l’expression de prédicat. |
| COUNT(expression) | Retourne le nombre d’enregistrements pour lesquels l’expression n’est pas null. |
| AVG(expression) | Retourne la moyenne des valeurs non nulles de l’expression. |
| MIN(expression) | Retourne la valeur non nulle minimale de l’expression. |
| MAX(expression) | Retourne la valeur maximale non null de l’expression. |
| SUM(expression) | Retourne la somme de toutes les valeurs non null de l’expression. |
MANQUANT
L’opérateur IS MISSING est la seule non standard prise en charge par le langage SQL d’accélération de requête. Pour les données JSON, si un champ est manquant dans un enregistrement d’entrée particulier, le champ IS MISSING d’expression 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 mentionner le chemin d’accès dans une partie 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 aux valeurs de tableau et d’objet JSON.
Prenons un exemple pour comprendre cela plus en détail.
Voici nos exemples 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
}
]
}
Vous ne serez peut-être intéressé que par l’objet warehouses JSON des données ci-dessus. L’objet warehouses est un type de tableau JSON. Vous pouvez donc le mentionner dans la clause FROM. Votre exemple de requête peut ressembler à ceci.
SELECT latitude FROM BlobStorage[*].warehouses[*]
La requête obtient tous les champs, mais sélectionne uniquement la latitude.
Si vous souhaitez accéder uniquement à la valeur de l’objet dimensions JSON, vous pouvez utiliser cette 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 valeurs internes d’objets JSON, vous pouvez utiliser une requête telle qu’illustrée dans l’exemple suivant :
SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]
Remarque
BlobStorage et BlobStorage[*] font tous les 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, disponible uniquement 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, puis traiter les enregistrements de données CSV par lots. De cette façon, vous pouvez traiter des enregistrements en parallèle au lieu de devoir télécharger tous les enregistrements à la fois. 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 vous souhaitez contenir pour chaque lot. Par exemple, si vous souhaitez traiter seulement 10 Mo de données à la fois, votre instruction ressemble à ceci : SELECT sys.split(10485760)FROM BlobStorage car 10 Mo sont égaux à 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 est légèrement supérieure au nombre que vous spécifiez. Cela est dû au fait qu’un lot ne peut pas contenir d’enregistrement partiel. Si le dernier enregistrement d’un lot commence avant la fin de votre seuil, le lot sera plus grand afin qu’il puisse contenir l’enregistrement complet. La taille du dernier lot sera probablement inférieure à la taille que vous spécifiez.
Remarque
La split_size doit comporter au moins 10 Mo (10485760).