Partager via


Informations de référence sur le langage SQL d’accélération des requêtes

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_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_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).

Voir aussi